RNN學習筆記(一):長短時記憶網絡(LSTM)

 

1、前言

       在圖像處理領域,卷積神經網絡(Convolution Nerual Network,CNN)憑藉其強大的性能取得了普遍的應用。做爲一種前饋網絡,CNN中各輸入之間是相互獨立的,每層神經元的信號只能向下一層傳播,同一卷積層對不一樣通道信息的提取是獨立的。所以,CNN擅長於提取圖像中包含的空間特徵,但卻不可以有效處理時間序列數據(語音、文本等)。網絡

       時序數據每每包含如下特性:函數

  • 輸入的序列數據長度是不固定(如機器翻譯,句子長度不固定)
  • 不一樣時刻的數據存在相互影響(如前一時刻的事實會影響後續時刻的推斷)

 

       拿到一個小球,咱們並不知道它下一步會往哪個方向運動,到當咱們獲取了小球前幾個時刻的位置,咱們就能推斷出小球下一步的運動方向。前一時刻的信息影響了後續時刻的推測,不一樣時刻下小球的位置信息就是時間序列數據的一種。性能

 

2、循環神經網絡

       與前饋網絡不一樣,循環神經網絡(Recurrent Nerual Network,RNN)在隱藏層中帶有自反饋的神經元對前面的信息進行記憶並應用於當前輸出的計算中,即神經元在接收當前數據輸入的同時,也接收了上一個隱藏層的輸出結果,一直循環直到全部數據所有輸入。RNN可以利用歷史信息來輔助當前的決策,它也能夠根據任務的不一樣,靈活地改變輸出的個數。學習

  

  • one to one:一個輸入對應一個輸出;
  • one to many:一個輸入對應許多輸出,好比圖像理解,輸入一張圖像,讓機器試着描述圖像內容;
  • many to one:語句情感分析,輸入句子,對語句中所包含的情感進行分類;
  • many to many:機器翻譯。

 

        在RNN中,隱藏層狀態(Hidden State)通俗的理解就是隱藏層神經元將輸入計算後的輸出值,這一輸出值不只是當前時刻神經元的輸出,也是後一時刻神經元的輸入。spa

       其中,h爲t時刻的隱藏層狀態,Xt 爲時間序列數據,φ爲激活函數(如雙曲正切函數、sigmoid函數等),UW分別爲在前一個時刻隱藏層和在當前時刻輸入的係數矩陣。翻譯

       整個RNN的計算圖以下圖所示:設計

 

        參數共享和循環反饋的設計機制,使得 RNN 模型理論上可以處理任意長度的時間序列,所以RNN很是適用於時間序列數據的分析應用中。理論上,RNN能夠無限拓展他的隱藏層,去學習更長序列數據。可是過多的層數不只會使模型訓練速度變慢,並且也會帶來「梯度消失」「梯度爆炸」的問題形成 RNN 沒法獲取長時間依賴信息,從而喪失了利用長距離歷史信息的能力。3d

 

3、長期依賴(Long-Term Dependencies)的問題

        對於間隔較長的時間序列數據,在實際應用中RNN每每在學習長距離歷史信息表現欠佳。      blog

        如下面這個例子來講,「The clouds are in the       」最後咱們要模型去輸出這個詞,歷史信息告訴模型前面出現了「clouds」,那麼模型就能夠根據歷史信息來推斷出要輸出「sky」。由於這裏的相關信息和預測詞的位置之間只有很是小的間隔,以下圖所示:ci

 

 

 

       可是在現實應用不只僅有這種簡單的預測任務,還存在大量複雜的時間序列數據,這些數據須要模型去記憶更早的歷史信息去完成推斷。好比「I grew up in France,...and I speak fluent      」,要去推測這個詞,模型須要記憶「France」這一歷史信息,但它與輸出位置間隔太遠,因爲「梯度消失」的問題,這麼遠的歷史信息很難被有效傳遞。

 

       所以,隨着間隔的增大,傳統RNN在面對這樣時間序列數據的建模效果每每差強人意。目前,存在必定方法可以緩解「梯度消失」來解決長期依賴問題,如

  • 用RELU函數替換sigmoid函數做爲激活函數
  • 權重初始化(權重係數矩陣初始化爲單位矩陣,偏置係數矩陣初始化爲0)
  • 使用帶有門控(gate)的更復雜循環單元去記錄長期歷史信息(如LSTM,GRU等)

 

4、長短時記憶網絡(Long Short-Term Memory Network)

       LSTM就是爲了解決間隔較遠的歷史信息沒法有效傳遞這一問題,它是利用門控單元(Gated Cell)來控制長期歷史信息的傳遞過程。

 

       門控(Gate)這一律念是指控制循環單元內信息的增長或刪除的一種結構,它選擇性地讓信息經過,例以下圖,一個簡單的sigmoid函數加哈達瑪積便可實現這樣一個控制信息傳遞的過程,sigmoid輸出爲0表示徹底捨棄,輸出爲1表示徹底經過。

     

       LSTM就是靠着sigmoid函數來控制信息的傳遞過程,LSTM循環單元中通常包含三個門控單元,即遺忘門輸入門輸出門

       不一樣於傳統RNN,LSTM在每一個循環單元中添加了單元狀態(Cell State)來選擇性地記憶過去傳遞的信息。一個循環單元不只要接收上一次時間步驟傳遞出的Hidden  State,也要接收傳遞出的Cell State。通俗的理解,Hidden State是到目前爲止咱們所看到的整體信息,而Cell State是歷史信息的選擇性記憶。

 

       LSTM的工做方式能夠抽象地分爲如下四步:

  • 遺忘(Forget)
  • 存儲(Store)
  • 更新(Update)
  • 輸出(Output)

 

一、遺忘(Forget)

 

       接收上一時間步驟的Hidden State ht-1  和當前輸入數據Xt,將他們計算後的值經過sigmoid激活函數,計算遺忘門的信息,來肯定須要遺忘的信息。

二、存儲(Store)

       

       計算輸入門的值 it 並將其與總體信息 S計算哈達瑪積。在這一步,之因此要在輸入門的值再與總體信息 St 計算哈達瑪積的緣由是,門控結構(Gate)輸出的介於0-1之間的數字,至關於圖像的掩膜(mask),與總體信息結合在一塊兒才能肯定輸入的信息。

三、更新(Update)

 

       單元狀態(Cell State)表示的是到t時刻,循環單元選擇性記憶的信息。對它進行更新就須要遺忘 t-1時刻的單元狀態Ct-1,並加上當前時刻輸入信息,這樣更新Cell State。

四、輸出(output)

 

       到了輸出這一步,循環單元計算輸出門的值,並將當前時刻下已經選擇性記憶的信息 Ct 拿出來作「掩膜」,來獲得輸出的Hidden State Ht

4、小結

       學習LSTM的關鍵在於理解單元狀態(Cell State)的意義。傳統RNN中的Hidden state保留的是到當前時刻爲止所積攢的全部信息,而Cell State保留的是經歷過遺忘和輸入的信息。LSTM有效地解決了 RNN 模型訓練時出現的梯度「爆炸」和梯度「消失」問題在不少應用中都取得了不錯的效果。

 

參考資料

https://www.quora.com/How-is-the-hidden-state-h-different-from-the-memory-c-in-an-LSTM-cell

MIT.Introduction to Deep Learning:Deep Sequence Modeling,2020

相關文章
相關標籤/搜索