深度學習_(時間)序列模型筆記(LSTM)_LSTM的三道門_改善RNN處理序列模型存在的缺陷

 


RNN處理序列模型存在的缺陷
1.長距離依賴(long term dependencies)問題:
RNN模型藉由隱藏資訊進行傳遞,較早時間步的隱藏資訊,透過時間步傳遞,會逐漸消失且無法幫助預測。

比方預測一句話下一個可能出現的單詞
臺北是台灣的.....   首都
這很容易聯想預測,因為句子還滿簡短的


2.短距離無用資訊:
RNN在距離較近的時間步中保存的隱藏資訊較多,也會存到無用資訊。
用上面句子來舉例,該句中"的"對預測無幫助意義,可視為停頓詞,但和預測單詞距離鄰近。

長短期記憶LSTM(Long Short-Term Memory)
  • 也是一種RNN,算是改良版。
  • 專門用於規避梯度消失和爆炸等問題。
  • 可避免長期依賴問題
  • 更可避免短期無用資訊。
  • LSTM 不像傳統RNN那樣只有單個 tanh 層,而是包含四個內部通訊的互動層。
LSTM會透過細胞狀態貫穿整個序列,可更好對資訊做更好分析處理。
LSTM使用門"Gate"控機制來控制如何擦除記憶並同時寫入新的記憶,分別有如下幾種門:
  1. 遺忘門(Forget Gate)
  2. 輸入門(Input Gate)
  3. 輸出門(Output Gate)


上述示意圖圖對應圖標含意

LSTM中所謂的"門"其實是一種讓資訊選擇式通過的方法(可去除或增加資訊到細胞狀態)
通常門會包含一個sigmoid神經網路層和一個pointwise乘法操作
Sigmoid層輸出0~1之間的數值,主要用來描述每個部份有多少量可通過。
(比方0就表示不允許任何量通過,1就表示允許任意量通過。它可以用來決定忘記或記住資訊。)

LSTM的三道門如下依序介紹門控機制



LSTM的核心內容就是Ct

1.遺忘門:
"細胞"中要丟掉捨麼訊息,都由遺忘門來處理。
該層讀取當前輸入x跟前一個神經元資訊h,由ft來決定丟棄的資訊。
輸出結果1表示"完全保留",0表示"完全捨棄"。

ht-1:上一個LSTM單元的輸出
σ:Sigmoid層

2.輸入門:
細胞狀態所存放的新訊息,都由輸入門處理。
輸入門決定將要更新的值 I 
tanh層來創建一個新的候選值向量Ct加入到狀態中
(在語言模型中,希望增加新的主語到細胞狀態中,替代舊的需要忘記的主語。)

更新舊細胞的狀態,將Ct-1更新為Ct
舊狀態與ft(遺忘門)相乘,丟棄掉我們已確認要丟棄的資訊再加上It * ~Ct
可以丟掉老舊資訊,添加新的資訊。

tanh:tanh層
X:縮放的資訊--“門”
+:添加的資訊

ct-1:上一個LSTM單元的記憶


3.輸出門:
用來預測結果的控制

sigmoid層用來確定細胞狀態的哪個部分將輸出出去。
細胞狀態會通過tanh進行處理(得到範圍坐落在-1~1之間的值)並將它和sigmoid門的輸出相乘。

參數決定了ht傳遞過程中,哪些被保存或捨棄。
參數被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:

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題