1. 程式人生 > >一步步教你理解LSTM

一步步教你理解LSTM

作者:王千發

編輯:田 旭

什麼是LSTM1

LSTM全名是Long Short-Term Memory,長短時記憶網路,可以用來處理時序資料,在自然語言處理和語音識別等領域應用廣泛。和原始的迴圈神經網路RNN相比,LSTM解決了RNN的梯度消失問題,可以處理長序列資料,成為當前最流行的RNN變體。

LSTM應用舉例
2

假設我們的模型的輸入是依次輸入一句話的每個單詞,我們需要對單詞做分類,比如有兩句話:(1)arrive Beijing on November 2nd,這裡的Beijing是目的地;(2)leave Beijing on November 2nd,這裡的Beijing是出發地。如果用普通的神經網路,輸入是'Beijing',那麼輸出一定就是確定的,但事實上我們希望在'Beijing'前面是'arrive'時,'Beijing'被識別為目的地,在'Beijing'前面時'leave'時,'Beijing'被識別為出發地。這裡LSTM就會派上用場,因為LSTM可以記住歷史資訊,在讀到'Beijing'時,LSTM還知道在前面是'arrive'還是'leave',根據歷史資訊來做出不同的判斷,即使輸入是相同的,輸出也會不同。


LSTM結構剖析

3

普通的神經元是一個輸入,一個輸出,如圖所示: 

640?wx_fmt=jpeg

對於神經元h1來講,輸入就是x1,輸出就是y1,LSTM做的就是把普通的神經元,替換成LSTM的單元。

640?wx_fmt=jpeg

從圖中可以看到LSTM有四個輸入,分別是input(模型輸入),forget gate(遺忘門),input gate(輸入門),以及output gate(輸出門)。因此相比普通的神經網路,LSTM的引數量是它們的4倍。這3個門訊號都是處於0~1之間的實數,1代表完全開啟,0代表關閉。遺忘門:決定了前一時刻中memory中的是否會被記住,當遺忘門開啟時,前一刻的記憶會被保留,當遺忘門關閉時,前一刻的記憶就會被清空。輸入門:決定當前的輸入有多少被保留下來,因為在序列輸入中,並不是每個時刻的輸入的資訊都是同等重要的,當輸入完全沒有用時,輸入門關閉,也就是此時刻的輸入資訊被丟棄了。輸出門:決定當前memroy的資訊有多少會被立即輸出,輸出門開啟時,會被全部輸出,當輸出門關閉時,當前memory中的資訊不會被輸出。

LSTM公式推導4

了上面的知識,再來推導LSTM的公式就很簡單了,圖中640?wx_fmt=png代表遺忘門,640?wx_fmt=png代表輸入門,640?wx_fmt=png代表輸出門。C是memroy cell,儲存記憶資訊。640?wx_fmt=png代表上一時刻的記憶資訊,640?wx_fmt=png代表當前時刻的記憶資訊,h是LSTM單元的輸出,640?wx_fmt=png是前一刻的輸出。

640?wx_fmt=jpeg

遺忘門計算:

640?wx_fmt=png

這裡的640?wx_fmt=png是把兩個向量拼接起來的意思,用sigmoid函式主要原因是得到有個0~1之間的數,作為遺忘門的控制訊號。

輸入門計算:

640?wx_fmt=png

當前輸入:

640?wx_fmt=png

當前時刻的記憶資訊的更新:

640?wx_fmt=png

從這個公式可以看出,前一刻的記憶資訊640?wx_fmt=png通過遺忘門640?wx_fmt=png,當前時刻的輸入640?wx_fmt=png通過輸入門640?wx_fmt=png加起來更新當前的記憶資訊640?wx_fmt=png

輸入門計算:

640?wx_fmt=png

LSTM的輸出,是由輸出門和當前記憶資訊共同決定的:

640?wx_fmt=png

這樣我們就明白了LSTM的前向計算過程。有了LSTM前向傳播演算法,推導反向傳播演算法就很容易了, 通過梯度下降法迭代更新我們所有的引數,關鍵點在於計算所有引數基於損失函式的偏導數,這裡就不細講了。

小結5

LSTM雖然結構複雜,但是隻要理順了裡面的各個部分和之間的關係,是不難掌握的。在實際使用中,可以藉助演算法庫如Keras,PyTorch等來搞定,但是仍然需要理解LSTM的模型結構。

參考文獻
  1. https://www.youtube.com/watch?v=rTqmWlnwz_0&index=35&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49

  2. https://zybuluo.com/hanbingtao/note/581764

  3. http://www.cnblogs.com/pinard/p/6519110.html

  4. http://blog.echen.me/2017/05/30/exploring-lstms/

機器學習演算法全棧工程師

                            一個用心的公眾號

640?wx_fmt=jpeg長按,識別,加關注

進群,學習,得幫助

你的關注,我們的熱度,

我們一定給你學習最大的幫助

640?wx_fmt=jpeg

公眾號商務合作請聯絡  ▶▶▶

640?wx_fmt=jpeg