深度學習_(時間)序列模型筆記(LSTM)_LSTM的三道門_改善RNN處理序列模型存在的缺陷
RNN處理序列模型存在的缺陷
1.長距離依賴(long term dependencies)問題:
RNN模型藉由隱藏資訊進行傳遞,較早時間步的隱藏資訊,透過時間步傳遞,會逐漸消失且無法幫助預測。
比方預測一句話下一個可能出現的單詞
臺北是台灣的..... 首都
這很容易聯想預測,因為句子還滿簡短的
2.短距離無用資訊:
RNN在距離較近的時間步中保存的隱藏資訊較多,也會存到無用資訊。
用上面句子來舉例,該句中"的"對預測無幫助意義,可視為停頓詞,但和預測單詞距離鄰近。
長短期記憶LSTM(Long Short-Term Memory)
- 也是一種RNN,算是改良版。
- 專門用於規避梯度消失和爆炸等問題。
- 可避免長期依賴問題
- 更可避免短期無用資訊。
- LSTM 不像傳統RNN那樣只有單個 tanh 層,而是包含四個內部通訊的互動層。
LSTM會透過細胞狀態貫穿整個序列,可更好對資訊做更好分析處理。
LSTM使用門"Gate"控機制來控制如何擦除記憶並同時寫入新的記憶,分別有如下幾種門:
- 遺忘門(Forget Gate)
- 輸入門(Input Gate)
- 輸出門(Output Gate)
上述示意圖圖對應圖標含意
通常門會包含一個sigmoid神經網路層和一個pointwise乘法操作
Sigmoid層輸出0~1之間的數值,主要用來描述每個部份有多少量可通過。
(比方0就表示不允許任何量通過,1就表示允許任意量通過。它可以用來決定忘記或記住資訊。)
LSTM的三道門如下依序介紹門控機制
1.遺忘門:
"細胞"中要丟掉捨麼訊息,都由遺忘門來處理。
該層讀取當前輸入x跟前一個神經元資訊h,由ft來決定丟棄的資訊。
輸出結果1表示"完全保留",0表示"完全捨棄"。
2.輸入門:
細胞狀態所存放的新訊息,都由輸入門處理。
輸入門決定將要更新的值 I
tanh層來創建一個新的候選值向量Ct加入到狀態中
(在語言模型中,希望增加新的主語到細胞狀態中,替代舊的需要忘記的主語。)
舊狀態與ft(遺忘門)相乘,丟棄掉我們已確認要丟棄的資訊再加上It * ~Ct
可以丟掉老舊資訊,添加新的資訊。
tanh:tanh層
X:縮放的資訊--“門”
+:添加的資訊
3.輸出門:
用來預測結果的控制
參數被Gate影響Sigmoid函數係數決定 Ct參數的變化
Pytorch建立LSTM模型(其實跟RNN差不多)
#coding:utf-8 import torch import torch.nn as nn #導入 PyTorch 的神經網絡子模組 class LstmModel(nn.Module): def __init__(self): super(LstmModel,self).__init__() self.rnn = nn.LSTM(input_size=1, hidden_size=32, num_layers=1) self.out = nn.Linear(32,1) def forward(self,x,h): out,h = self.rnn(x,h) prediction = self.out(out) return prediction,h lstm = LstmModel() print(lstm)
Ref:
留言
張貼留言