深度學習(Deep Learning)讀書思考七:循環神經網絡二(LSTM)

概述

通過前一節對循環神經網絡RNN的瞭解,簡單的RNN雖然能夠解決長期依賴問題,但是訓練和優化比較困難,然後長短時記憶模型LSTM很大程度上解決長期依賴問題,本文主要介紹

1.LSTM的提出
2.LSTM網絡結構
3.LSTM的分析

LSTM的提出

早在94年Hochreiter發現了RNN訓練過程中的梯度消失和爆炸問題,然後在99年提出LSTM解決該問題。

梯度消失問題的原因可以參考之前的介紹。

常量錯誤傳播

RNN難訓練的主要原因在後向傳播過程中,梯度隨着時間序列的增加而逐漸消失。如果誤差能夠不消減的進行傳遞,則可以避免訓練難得問題。

常量錯誤傳播-直觀想法

假設隱藏層只有一個節點j,則該節點誤差計算過程爲

δj(t)=fj(netj(t))δj(t+1)wjj
其中netj(t),δj(t)j .
如果想做到常誤差傳播,則需要
fj(netj(t))wjj=1

此時可以近似無限長時間序列,但是網絡過於簡單並且實現比較複雜。

LSTM也是根據CEC演化而來。

針對上面的必要條件fj(netj(t))wjj=1 ,兩邊同時積分可以得到

fj(netj(t))=netj(t)wjj
對於任意時序網絡輸入netj(t) 都要滿足。
此時激活函數必須是線性並且激活值保持爲常量。
yj(t+1)=fj(netj(t+1))=fj(wjjyj(t))=yj(t)
此時激活函數必須滿足f(x)=xwjj=1
作者將滿足這個等式的傳播稱之爲 CEC。

當然如果滿足CEC的約束條件能夠進行常誤差傳播,但是該網絡結構過於簡單,同時有兩個相關問題需要解決:

1.輸入權重衝突:隱藏層節點不僅要保存歷史信息,還要對當前的輸入進行響應。
2.輸出權重衝突:同理隱藏層節點不僅保存歷史信息,還要響應該節點到輸出層的反饋。
因此隱藏層不僅保存歷史信息還要對輸入和輸出進行不同程度的響應,會導致相關的權重更新衝突。這也是LSTM加入門節點的重要原因之一。

LSTM原型

爲了解決1)常量誤差傳播2)衝突問題,作者通過引入內存單元和門單元重新構建了網絡結構。
輸入門:能夠保護內存單元的內容不受不相關輸入的影響,最大程度保存有用信息。
輸出門:能夠保護其他單元不受不相關內存的影響。網絡拓撲如下:
這裏寫圖片描述

1.y_in表示輸入門 ,y_out表示輸出門。門在網絡結構中相當於新引入隱藏節點,不過激活函數一般選取爲sigmoid,將權重壓縮到0-1之間
2.內存單元狀態sc 用於存儲歷史信息和當前輸入。
3.內存塊,這也是該模型長短時記憶由來的原因。在一個內存塊中可以有多個內存單元,他們有着相同的輸入和輸出門。引入內存塊能夠減少門的個數,加快計算效率。

引入遺忘門

爲了解決狀態不斷累加問題,引入遺忘門對狀態進行縮減。網絡結構如下:

這裏寫圖片描述

引入Peephole Connection

爲了學習到更精確的時序,引入Peephole Connection,使得各種門的狀態能夠學習更準確。這也是目前使用最多的網絡結構。
這裏寫圖片描述

LSTM經典網絡結構

目前使用較多的網絡結構如下圖所示:
這裏寫圖片描述

1.上圖展示的是一個內存塊並且內存塊中僅有一個內存單元
2.網絡結構中包括輸入、輸出和遺忘門;Cell爲內存狀態單元;虛線表示Peephole連接。

LSTM展開圖

下圖更形象的展示了LSTM的網絡結構,隱藏層有兩個內存塊,每個內存塊有2個單元。
這裏寫圖片描述

LSTM數學表達

符號定義

I 表示輸入集合
H 表示隱藏層節點個數
C爲內存塊中細胞單元個數
K表示輸出層節點個數
γ,ϕ,ω
S表示內存單元狀態

前向遍歷過程

某個內存塊計算過程如下:

  1. 輸入門表達
    atγbtγ=i=1Iwi,γxti+h=1Hwh,γbt1h+c=1Cwc,γst1c=f(atγ)
    輸入門的輸入依次來自於原始輸入x、前一時序隱藏層h、前一時序內存節點狀態
  2. 遺忘門表達
    atϕbtϕ=i=1Iwi,ϕxti+h=1Hwh,ϕbt1h+c=1Cwc,ϕst1c=f(atϕ)
    類似於輸入門,遺忘門的輸入依次來自於原始輸入x、前一時序隱藏層h、前一時序內存節點狀態
  3. 細胞單元表達
    atcstc=i=1Iwi,cxti+h=1Hwh,cbt1h=btϕst1c+btγg(atc)
    中間狀態計算包括兩部分一是通過遺忘門加權的前一時序的狀態值;二是通過輸入門進行加權後的當前單元的輸入
  4. 輸出門表達
    atωbtω=i=1Iwi,ωxti+h=1Hwh,ωbt1h+c=1Cwc,ωstc=f(atω)
    輸出門的輸入依次來自於原始輸入x、前一時序隱藏層h、當前時序內存節點狀態。需要注意的是:輸出門控制的是當前細胞單元的輸出,因此需要依賴當前節點的狀態。
  5. 內存單元輸出
    btc=btωh(stc)
    內存單元的最終輸出可以用於連接輸出層和下一時序的隱藏層輸入。

後向遍歷過程

後向遍歷過程,類似於RNN,需要計算得到各個節點的誤差,然後傳遞到相關的權重。

符號定義

ϵtc=Lbtc 表示細胞單元輸出的誤差,即到達btc 時的彙總誤差
ϵts=Lstc 表示中間狀態的誤差
δtk 表示輸出層節點的誤差

1.細胞節點誤差

ϵtc=k=1Kwckδtk+g=1Gwcgδt+1g
誤差主要來自於1)輸出層傳遞的誤差2)下一時序輸出門、輸入門、遺忘門和中間狀態傳遞的誤差,其中G=4H分別表示各個部分
2.輸出門誤差
δtω=f(atω)c=1Ch(stc)ϵtc
由於一個內存塊共享一個輸出門,因此需要對該內存塊中的各個節點進行誤差累加
3.細胞狀態誤差
ϵtc=btωh(stc)ϵtc+bt+1ϕϵt+1s+wc,γδt+1γ+wc,ϕδt+1ϕ+wc,ωδtω
誤差依次來自於1)細胞輸出傳遞的誤差2)後一時序細胞狀態的誤差3)後一時序輸入門的誤差4)後一時序遺忘門的誤差5)輸出門的誤差
4.細胞節點的誤差
δtc=btγg(atc)ϵts

5.遺忘門誤差
δtϕ=f(atϕ)c=1Cst1cϵts

6.輸入門誤差
δtγ=f(atγ)c=1Cg(atc)ϵts

LSTM分析

優勢

1.在一個內存塊中LSTM能夠做到常誤差傳遞(通過後向傳遞過程可以得到);以及在不同時序階段中通過輸入門和遺忘門的控制能夠使得誤差極大化向後傳遞;最終使得LSTM能夠解決較長的依賴問題
2.LSTM能夠處理噪聲、連續型輸入以及分佈式表示等問題
3.LSTM泛化能力較其他模型強
4.不需要細粒度參數調優,而且計算複雜度和RNN一致

侷限

1.計算複雜度線性增加
2.RNN加上相關優化算法能夠解決100以內依賴問題,LSTM能夠處理1000以內依賴問題;對於更長的依賴LSTM也會遇到梯度相關問題。

總結

通過本文學習能夠非常清楚LSTM的網絡結構以及求解算法、理解LSTM內存塊內的常量誤差傳遞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章