遼寧省城鄉(xiāng)住房建設(shè)廳網(wǎng)站搜狗站長工具綜合查詢
目錄
一、LSTM結(jié)構(gòu)
二、LSTM 核心思想
三、LSTM分步演練
(一)初始化
1、權(quán)重和偏置初始化
2、初始細(xì)胞狀態(tài)和隱藏狀態(tài)初始化
(二)前向傳播
1、遺忘門計算(決定從上一時刻隱狀態(tài)中丟棄多少信息)
2、輸入門及候選記憶元計算(決定存儲多少選記憶元的新數(shù)據(jù))
3、記憶元更新
4、輸出門及隱狀態(tài)更新
(三)反向傳播
?四、簡單LSTM代碼實現(xiàn)
修改要點:
輸出結(jié)果;
五、LSTM變體
1、窺視孔連接(Peephole Connections)
2、耦合的遺忘和輸入門(Coupled Forget and Input Gates)
3、門控循環(huán)單元(GRU)
4、深度門控RNN(Deep Gated RNN)
5、Clockwork RNN
6. Layer Normalization LSTM
7. Variational LSTM
8. Attention Mechanism
9. Multi-Scale LSTM
10. Attention-Based LSTM
11. Hierarchical LSTM
12. Context-Aware LSTM
13. Temporal Convolutional Networks (TCN)
14. S4 (State Space for Sequence Modeling)
15. Recurrent Neural Network with Sparse Connections
16. BERT-Style LSTM
17. Graph Neural Networks with LSTM
18. Attention-Based GRU
19. LSTM with External Memory
20. LSTM with Reinforcement Learning
往期文章:
時間序列預(yù)測(一)——線性回歸(linear regression)-CSDN博客
時間序列預(yù)測(二)——前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Network, FNN)-CSDN博客
時間序列預(yù)測(六)——循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)_rnn序列預(yù)測-CSDN博客
長短期記憶網(wǎng)絡(luò)(LSTM, Long Short-Term Memory)是一種專門設(shè)計用來解決時間序列數(shù)據(jù)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。LSTM的主要優(yōu)勢是能夠捕捉長時間依賴,適用于處理長期記憶(長期依賴)的問題,同時在訓(xùn)練過程中避免了傳統(tǒng)RNN常見的梯度消失和爆炸問題。在時間序列預(yù)測中,LSTM網(wǎng)絡(luò)非常適合處理具有長期相關(guān)性的輸入數(shù)據(jù),例如氣溫變化、股票價格、駕駛員行為數(shù)據(jù)等。LSTM可以通過記憶單元和門控機(jī)制來決定哪些信息需要“記住”,哪些需要“遺忘”。
一、LSTM結(jié)構(gòu)
LSTM的結(jié)構(gòu)和基礎(chǔ)的RNN相比,并沒有特別大的不同,都是一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)浇Y(jié)構(gòu)。在標(biāo)準(zhǔn)的RNN中,這個重復(fù)的模塊只有一個非常簡單的結(jié)構(gòu),如下圖,只有一個激活函數(shù)tanh層。
LSTM的結(jié)構(gòu)也是如此,只是重復(fù)模塊的內(nèi)容有所變化,沒有單個神經(jīng)網(wǎng)絡(luò)層,而是有四個神經(jīng)網(wǎng)絡(luò)層,它們以非常特殊的方式交互。
其中不同符號表示不同的意思,
σ表示的Sigmoid 激活函數(shù),有關(guān)激活函數(shù)的介紹可以看這篇文章:
時間序列預(yù)測(三)——激活函數(shù)(Activation Function)_預(yù)測任務(wù)用什么激活函數(shù)-CSDN博客
二、LSTM 核心思想
LSTM的關(guān)鍵就是記憶元(memory cell),與隱狀態(tài)具有相同的形狀,其設(shè)計目的是用于記錄附加的信息。即貫穿圖頂部的水平線。
LSTM的核心思想就是保護(hù)和控制記憶元。這里用到了三個門:輸入門、遺忘門、輸出門:
- 輸入門決定新的輸入信息是否需要記入記憶單元。
- 遺忘門決定當(dāng)前的記憶單元是否需要遺忘部分過去的信息。
- 輸出門決定記憶單元中的信息是否會影響當(dāng)前輸出
他們由 sigmoid 神經(jīng)網(wǎng)絡(luò)層和逐點乘法運(yùn)算組成。選擇性地讓信息通過,選擇性地讓信息通過,sigmoid 層輸出介于 0 和 1 之間的數(shù)字,值 0 表示“不讓任何內(nèi)容通過”,而值 1 表示“讓所有內(nèi)容通過!
三、LSTM分步演練
(一)初始化
1、權(quán)重和偏置初始化
LSTM有多個權(quán)重矩陣和偏置項需要初始化。對于一個具有輸入維度xt??(輸入向量的維度)、隱藏層維度ht??的LSTM單元,有以下主要的權(quán)重矩陣和偏置項:
- 遺忘門的權(quán)重矩陣Wf??和偏置bf??。
- 輸入門的權(quán)重矩陣Wi??和偏置bi??。
- 輸出門的權(quán)重矩陣Wo??和偏置bo??。
- 用于計算候選細(xì)胞狀態(tài)的權(quán)重矩陣Wc??和偏置bc??。
這些權(quán)重矩陣和偏置項通常初始化為小的隨機(jī)值,例如在[?0.1,0.1]?區(qū)間內(nèi)的隨機(jī)數(shù)。
2、初始細(xì)胞狀態(tài)和隱藏狀態(tài)初始化
初始細(xì)胞狀態(tài)C0??和初始隱藏狀態(tài)h0??也需要初始化。一般來說,C0??和h0??可以初始化為全零向量。
(二)前向傳播
1、遺忘門計算(決定從上一時刻隱狀態(tài)中丟棄多少信息)
輸入上一時刻的隱狀態(tài)和當(dāng)前時刻的特征
,通過sigmoid層輸出一個介于0和1之間的數(shù)字ft,1表示 “完全保留此內(nèi)容”,而0代表 “完全擺脫此內(nèi)容”。
2、輸入門及候選記憶元計算(決定存儲多少選記憶元的新數(shù)據(jù))
同樣,輸入和
,通過sigmoid層輸出
,同時再通過tanh層輸出候選記憶元(candidate memory cell)
,
3、記憶元更新
將上一時刻的記憶元乘以ft,再添加候選記憶元乘以,最終計算出當(dāng)前時刻的記憶元Ct
4、輸出門及隱狀態(tài)更新
同樣,輸入和
,通過sigmoid層輸出
,再乘以
通過tanh層的輸出值,最終輸出當(dāng)前時刻的隱狀態(tài)ht
(三)反向傳播
反向傳播的目標(biāo)是通過鏈?zhǔn)椒▌t(鏈?zhǔn)角髮?dǎo))計算損失函數(shù)相對于每個權(quán)重和偏置的梯度。LSTM 中的反向傳播稱為 通過時間的反向傳播(Backpropagation Through Time,BPTT),因為 LSTM 具有時間依賴性。
-
計算損失函數(shù)的梯度:從最后的輸出開始計算損失函數(shù)相對于 hT? 和 cT 的梯度。
-
反向傳播梯度:從時間步 T逐步往回傳播梯度,依次計算遺忘門、輸入門、輸出門、記憶單元狀態(tài)和隱藏狀態(tài)的梯度。
-
計算權(quán)重和偏置的梯度:使用各門的梯度,結(jié)合前一時間步的隱藏狀態(tài)和輸入,計算權(quán)重 Wf,Wi,Wo,Wc以及偏置 bf,bi,bo,bc 的梯度。
-
更新參數(shù):根據(jù)計算得到的梯度,通過優(yōu)化算法(如梯度下降或Adam)更新權(quán)重和偏置,以最小化損失函數(shù)。
注意:LSTM反向傳播的計算過程還是較為復(fù)雜的,但在Python等高層編程語言中,使用深度學(xué)習(xí)框架(如TensorFlow或PyTorch)可以簡化實現(xiàn)??蚣軙詣犹幚矸聪騻鞑サ挠嬎?#xff0c;你只需定義模型結(jié)構(gòu)和損失函數(shù),訓(xùn)練時框架會自動計算梯度和更新參數(shù)。
# 3. 設(shè)置損失函數(shù)和優(yōu)化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 4. 訓(xùn)練模型
num_epochs = 1000
for epoch in range(num_epochs):model.train()# 前向傳播outputs = model(x_train_tensor)loss = criterion(outputs, y_train_tensor)# 反向傳播optimizer.zero_grad() # 清除之前的梯度loss.backward() # 計算梯度 optimizer.step() # 更新參數(shù)
最后,再用當(dāng)前時刻的隱狀態(tài)ht和下一時刻的特征xt+1作為輸入,重復(fù)上訴步驟,直到處理完整個序列。
注意:如果遺忘門始終為1且輸入門始終為0,則過去的記憶元Ct?1 將隨時間被保存并傳遞到當(dāng)前時間步。這樣可以緩解梯度消失問題,并更好地捕獲序列中的長距離依賴關(guān)系。
?四、簡單LSTM代碼實現(xiàn)
從RNN模型改成LSTM模型是比較簡單的,因為兩者的主要區(qū)別在于它們的結(jié)構(gòu)和如何處理時間序列數(shù)據(jù)。LSTM比RNN更復(fù)雜,能夠更好地處理長期依賴關(guān)系。接下來,我將逐步講解如何將RNN模型替換為LSTM模型,并給出修改后的代碼。
1、任務(wù):
根據(jù)一個包含道路曲率(Curvature)、車速(Velocity)、側(cè)向加速度(Ay)和方向盤轉(zhuǎn)角(Steering_Angle)真實的數(shù)據(jù)集,去預(yù)測未來的方向盤轉(zhuǎn)角。
2、做法:
提取前5個歷史曲率、速度、方向盤轉(zhuǎn)角作為輸入特征,同時添加后5個未來曲率(由于車輛的預(yù)瞄距離)。目標(biāo)輸出為未來5個方向盤轉(zhuǎn)角。采用LSTM網(wǎng)絡(luò)訓(xùn)練。
3、修改要點:
- LSTM替換RNN:直接用
nn.LSTM
替換原有的nn.RNN
。 - LSTM層的隱藏狀態(tài):LSTM有兩個隱藏狀態(tài),分別是
h0
(隱藏狀態(tài))和c0
(細(xì)胞狀態(tài))。 - 其余部分保持不變,包括數(shù)據(jù)預(yù)處理、訓(xùn)練過程等。
4、具體代碼:
# LSTM 模型
import pandas as pd
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error as mae, r2_score
import matplotlib.pyplot as plt# 1. 數(shù)據(jù)預(yù)處理
# 讀取數(shù)據(jù)
data = pd.read_excel('input_data_20241010160240.xlsx') # 替換為你的數(shù)據(jù)文件路徑 # 提取特征和標(biāo)簽
curvature = data['Curvature'].values
velocity = data['Velocity'].values
steering = data['Steering_Angle'].values# 定義歷史和未來的窗口大小
history_size = 5
future_size = 5features = []
labels = []
for i in range(history_size, len(data) - future_size):# 提取前5個歷史的曲率、速度和方向盤轉(zhuǎn)角history_curvature = curvature[i - history_size:i]history_velocity = velocity[i - history_size:i]history_steering = steering[i - history_size:i]# 提取后5個未來的曲率(用于預(yù)測)future_curvature = curvature[i:i + future_size]# 輸入特征:歷史 + 未來曲率feature = np.hstack((history_curvature, history_velocity, history_steering, future_curvature))features.append(feature)# 輸出標(biāo)簽:未來5個方向盤轉(zhuǎn)角label = steering[i:i + future_size]labels.append(label)# 轉(zhuǎn)換為 NumPy 數(shù)組
features = np.array(features)
labels = np.array(labels)# 歸一化
scaler_x = StandardScaler()
scaler_y = StandardScaler()features = scaler_x.fit_transform(features)
labels = scaler_y.fit_transform(labels)# 劃分訓(xùn)練集和測試集
x_train, x_test, y_train, y_test = train_test_split(features, labels, test_size=0.05)# 將特征轉(zhuǎn)換為三維張量,形狀為 [樣本數(shù), 時間序列長度, 特征數(shù)]
input_feature_size = history_size * 3 + future_size # 歷史曲率、速度、方向盤轉(zhuǎn)角 + 未來曲率
x_train_tensor = torch.tensor(x_train, dtype=torch.float32).view(-1, 1, input_feature_size) # [batch_size, seq_len=1, input_size]
y_train_tensor = torch.tensor(y_train, dtype=torch.float32).view(-1, future_size) # 輸出未來的5個方向盤轉(zhuǎn)角
x_test_tensor = torch.tensor(x_test, dtype=torch.float32).view(-1, 1, input_feature_size)
y_test_tensor = torch.tensor(y_test, dtype=torch.float32).view(-1, future_size)# 2. 創(chuàng)建LSTM模型
class LSTMModel(nn.Module):def __init__(self, input_size, hidden_size, num_layers, output_size):super(LSTMModel, self).__init__()self.hidden_size = hidden_sizeself.num_layers = num_layersself.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True) # 使用LSTMself.fc = nn.Linear(hidden_size, output_size) # 輸出層def forward(self, x):# 初始化隱藏狀態(tài)和細(xì)胞狀態(tài)h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)# 前向傳播out, _ = self.lstm(x, (h0, c0)) # LSTM輸出out = self.fc(out[:, -1, :]) # 只取最后一個時間步的輸出return out# 實例化模型
input_size = input_feature_size # 輸入特征數(shù)
hidden_size = 64 # 隱藏層大小
num_layers = 2 # LSTM層數(shù)
output_size = future_size # 輸出5個未來方向盤轉(zhuǎn)角
model = LSTMModel(input_size, hidden_size, num_layers, output_size)# 3. 設(shè)置損失函數(shù)和優(yōu)化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 4. 訓(xùn)練模型
num_epochs = 1000
for epoch in range(num_epochs):model.train()# 前向傳播outputs = model(x_train_tensor)loss = criterion(outputs, y_train_tensor)# 后向傳播和優(yōu)化optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')# 5. 預(yù)測
model.eval()
with torch.no_grad():y_pred_tensor = model(x_test_tensor)y_pred = scaler_y.inverse_transform(y_pred_tensor.numpy()) # 將預(yù)測值逆歸一化
y_test = scaler_y.inverse_transform(y_test_tensor.numpy()) # 逆歸一化真實值# 評估指標(biāo)
r2 = r2_score(y_test, y_pred, multioutput='uniform_average') # 多維輸出下的R^2
mae_score = mae(y_test, y_pred)
print(f"R^2 score: {r2:.4f}")
print(f"MAE: {mae_score:.4f}")# 支持中文
plt.rcParams['font.sans-serif'] = ['SimSun'] # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號# 繪制未來5個方向盤轉(zhuǎn)角的預(yù)測和真實值對比
plt.figure(figsize=(10, 6))
for i in range(future_size):plt.plot(range(len(y_test)), y_test[:, i], label=f'真實值 {i+1} 步', color='blue')plt.plot(range(len(y_pred)), y_pred[:, i], label=f'預(yù)測值 {i+1} 步', color='red')
plt.xlabel('樣本索引')
plt.ylabel('Steering Angle')
plt.title('未來5個方向盤轉(zhuǎn)角的實際值與預(yù)測值對比圖')
plt.legend()
plt.grid(True)
plt.show()# 計算預(yù)測和真實方向盤轉(zhuǎn)角的平均值
y_pred_mean = np.mean(y_pred, axis=1) # 每個樣本的5個預(yù)測值取平均
y_test_mean = np.mean(y_test, axis=1) # 每個樣本的5個真實值取平均# 繪制平均值的實際值與預(yù)測值對比圖
plt.figure(figsize=(10, 6))
plt.plot(range(len(y_test_mean)), y_test_mean, label='真實值(平均)', color='blue')
plt.plot(range(len(y_pred_mean)), y_pred_mean, label='預(yù)測值(平均)', color='red')
plt.xlabel('樣本索引')
plt.ylabel('Steering Angle (平均)')
plt.title('未來5個方向盤轉(zhuǎn)角的平均值對比圖')
plt.legend()
plt.grid(True)
plt.show()# 繪制第1個時間步的實際值與預(yù)測值對比圖
plt.figure(figsize=(10, 6))
plt.plot(range(len(y_test)), y_test[:, 0], label='真實值 (第1步)', color='blue')
plt.plot(range(len(y_pred)), y_pred[:, 0], label='預(yù)測值 (第1步)', color='red')
plt.xlabel('樣本索引')
plt.ylabel('Steering Angle')
plt.title('未來第1步方向盤轉(zhuǎn)角的實際值與預(yù)測值對比圖')
plt.legend()
plt.grid(True)
plt.show()# 計算每個時間步的平均絕對誤差
time_steps = y_test.shape[1]
mae_per_step = [mae(y_test[:, i], y_pred[:, i]) for i in range(time_steps)]# 繪制每個時間步的平均絕對誤差
plt.figure(figsize=(10, 6))
plt.bar(range(1, time_steps + 1), mae_per_step, color='orange')
plt.xlabel('時間步')
plt.ylabel('MAE')
plt.title('不同時間步的平均絕對誤差')
plt.grid(True)
plt.show()
5、輸出結(jié)果;
?
五、LSTM變體
1、窺視孔連接(Peephole Connections)
- 引入者:Gers和Schmidhuber(2000年)
- 特征:允許門控層直接訪問細(xì)胞狀態(tài),增強(qiáng)了對長期依賴的學(xué)習(xí)能力。
- 應(yīng)用:通過讓門控直接查看單元狀態(tài),可以更好地控制信息流動。
2、耦合的遺忘和輸入門(Coupled Forget and Input Gates)
使用耦合的 forget 和 input 門。我們不是單獨(dú)決定要忘記什么以及應(yīng)該添加新信息什么,而是一起做出這些決定
- 特征:將遺忘門和輸入門合并,決定何時忘記和輸入新信息的過程是耦合的。
- 優(yōu)點:簡化了模型,同時可能提高了信息更新的效率,因為它只在特定條件下輸入新值。
3、門控循環(huán)單元(GRU)
- 引入者:Cho等人(2014年)
- 特征:將遺忘門和輸入門合并為一個更新門,并將細(xì)胞狀態(tài)和隱藏狀態(tài)合并為一個狀態(tài)。
- 優(yōu)點:結(jié)構(gòu)更簡單,計算效率高,越來越受到歡迎,尤其在一些任務(wù)上表現(xiàn)良好。
具體請看這篇文章:
時間序列預(yù)測(九)—門控循環(huán)單元網(wǎng)絡(luò)(GRU)-CSDN博客
4、深度門控RNN(Deep Gated RNN)
- 引入者:Yao等人(2015年)
- 特征:在多個層次上使用門控結(jié)構(gòu),提升模型的表達(dá)能力。
- 優(yōu)點:適應(yīng)性強(qiáng),能夠捕捉更復(fù)雜的特征,特別適合于長序列數(shù)據(jù)。
5、Clockwork RNN
- 引入者:Koutnik等人(2014年)
- 特征:通過使用不同的時間步長來處理不同的時間序列信息,解決長期依賴問題。
- 優(yōu)點:能夠在不同時間尺度上學(xué)習(xí),適合處理多時間尺度的數(shù)據(jù)。
6. Layer Normalization LSTM
- 引入者:Ba 等人 (2016年)
- 特征:在每一層的輸入進(jìn)行層歸一化,改善訓(xùn)練過程中的穩(wěn)定性。
- 優(yōu)點:減少了內(nèi)部協(xié)變量偏移,加速收斂,并且在許多任務(wù)中提升了模型性能。
7. Variational LSTM
- 引入者:未特定提及,但結(jié)合了變分推理的思路。
- 特征:通過變分推理處理不確定性和缺失數(shù)據(jù)。
- 優(yōu)點:增強(qiáng)了模型的魯棒性,適合于需要建模不確定性的任務(wù)。
8. Attention Mechanism
- 引入者:Bahdanau 等人 (2014年)
- 特征:為模型引入注意力機(jī)制,使其動態(tài)關(guān)注序列中的重要信息。
- 優(yōu)點:提升了長序列數(shù)據(jù)的處理能力,特別在自然語言處理和機(jī)器翻譯等領(lǐng)域取得顯著效果。
9. Multi-Scale LSTM
- 引入者:未特定提及,但在多尺度學(xué)習(xí)的研究中得到廣泛應(yīng)用。
- 特征:在不同時間尺度上并行運(yùn)行多個LSTM。
- 優(yōu)點:能夠捕捉多層次的時間特征,提高對復(fù)雜序列的建模能力。
10. Attention-Based LSTM
- 引入者:結(jié)合了Bahdanau等人的工作(2014年)。
- 特征:在LSTM中引入注意力機(jī)制,動態(tài)選擇重要的信息。
- 優(yōu)點:提高了在長序列中的預(yù)測準(zhǔn)確性和模型的可解釋性。
11. Hierarchical LSTM
- 引入者:未特定提及,但適用于處理層次結(jié)構(gòu)數(shù)據(jù)。
- 特征:在多層次上對數(shù)據(jù)進(jìn)行建模,適合復(fù)雜結(jié)構(gòu)的數(shù)據(jù)(如文本、視頻)。
- 優(yōu)點:能夠更好地捕捉上下文信息,適用于處理具有層次特征的數(shù)據(jù)集。
12. Context-Aware LSTM
- 引入者:未特定提及,通常在任務(wù)特定模型中使用。
- 特征:結(jié)合上下文信息,通過額外輸入增強(qiáng)模型的決策能力。
- 優(yōu)點:提升了模型在特定場景或條件下的適應(yīng)性和準(zhǔn)確性。
13. Temporal Convolutional Networks (TCN)
- 引入者:Bai 等人 (2018年)
- 特征:使用卷積操作替代遞歸結(jié)構(gòu)處理序列數(shù)據(jù)。
- 優(yōu)點:能有效處理長序列數(shù)據(jù),具有并行化的優(yōu)勢,并且在許多任務(wù)中表現(xiàn)良好。
14. S4 (State Space for Sequence Modeling)
- 引入者:Tay et al. (2021年)
- 特征:結(jié)合了狀態(tài)空間模型和深度學(xué)習(xí),通過狀態(tài)空間方程處理長序列。
- 優(yōu)點:在長序列建模方面表現(xiàn)出色,能夠捕捉長期依賴關(guān)系,同時計算效率較高。
15. Recurrent Neural Network with Sparse Connections
- 引入者:未特定提及,近年來在RNN結(jié)構(gòu)中逐漸受到關(guān)注。
- 特征:通過稀疏連接減少參數(shù)量,提高計算效率。
- 優(yōu)點:保持性能的同時,顯著降低計算成本,適用于資源有限的場景。
16. BERT-Style LSTM
- 引入者:結(jié)合了BERT的思想與LSTM。
- 特征:通過自注意力機(jī)制增強(qiáng)LSTM的上下文理解能力。
- 優(yōu)點:在文本理解和生成任務(wù)中表現(xiàn)出更好的效果,提升了模型的表達(dá)能力。
17. Graph Neural Networks with LSTM
- 引入者:在圖神經(jīng)網(wǎng)絡(luò)與RNN結(jié)合的研究中逐漸發(fā)展。
- 特征:結(jié)合圖結(jié)構(gòu)數(shù)據(jù)與LSTM,用于處理圖形序列數(shù)據(jù)。
- 優(yōu)點:能夠在具有圖結(jié)構(gòu)的序列數(shù)據(jù)中捕捉復(fù)雜的關(guān)系,適合社交網(wǎng)絡(luò)和推薦系統(tǒng)等領(lǐng)域。
18. Attention-Based GRU
- 引入者:結(jié)合GRU和注意力機(jī)制的研究。
- 特征:在GRU中引入注意力機(jī)制,使其能夠動態(tài)關(guān)注輸入序列中的重要部分。
- 優(yōu)點:提高了在長序列預(yù)測中的準(zhǔn)確性和可解釋性。
19. LSTM with External Memory
- 引入者:結(jié)合神經(jīng)圖靈機(jī)(Neural Turing Machines)等思路。
- 特征:在LSTM結(jié)構(gòu)中引入外部記憶,增強(qiáng)信息存儲和檢索能力。
- 優(yōu)點:能夠處理更復(fù)雜的任務(wù),如序列生成和推理,適合于需要長期記憶的應(yīng)用。
20. LSTM with Reinforcement Learning
- 引入者:在強(qiáng)化學(xué)習(xí)與RNN結(jié)合的研究中得到應(yīng)用。
- 特征:在LSTM訓(xùn)練過程中引入強(qiáng)化學(xué)習(xí)策略,優(yōu)化決策過程。
- 優(yōu)點:在動態(tài)和不確定環(huán)境中表現(xiàn)出色,能夠適應(yīng)實時決策任務(wù)。
?參考文獻(xiàn):
《動手學(xué)深度學(xué)習(xí)》 — 動手學(xué)深度學(xué)習(xí) 2.0.0 documentation (d2l.ai)
如何從RNN起步,一步一步通俗理解LSTM_rnn lstm-CSDN博客
了解 LSTM 網(wǎng)絡(luò) -- colah 的博客
別忘了給這篇文章點個贊哦,非常感謝。我也正處于學(xué)習(xí)的過程,如果有問題,歡迎在評論區(qū)留言討論,一起學(xué)習(xí)!