[學習筆記] Long Short-Term Memory
Recurrent Neural Networks
人類的思考不是空穴來風。當你閱讀這篇文章的時候,你理解詞語的意思其是是通過前文的意思。人類的思想是永續的。傳統NN不能做到這一點,但RNN可以,因為其內部有loops,使得過去的信息可以對現在的訓練有所影響。
recurrent neural networks are intimately related to sequences and lists
RNN可以很好的應用於:speech recognition, language modeling(compute the probability of a sentence or sequence of words), translation, image captioning...尤其是這裡介紹的其神奇功能The Unreasonable Effectiveness of Recurrent Neural Networks by Andrej Karpathy。
而RNN之所以能取得這樣的成績離不開黨和國家對它的栽培。。更重要的是離不開一個神器「LSTM-long short-term memory」。其實LSTM是一種特殊的RNN,不過比一般的RNN屌太多,幾乎目前所有比較exciting的成果都是基於LSTM的模型獲得的。
Long-Term Dependencies
預測詞語需要前文context,但需要多早之前的就要case by case。RNN可以利用比較近的context,但比較久遠的就很難利用,主要難度在於Gradient Descent對於訓練Long-Term Dependencies很困難,具體為什麼可以參看Learning Long-Term Dependencies with Gradient Descent is Difficult,大概結論是back-propagation難以發現跨度太大的關聯性。而LSTM就厲害在它沒有這個問題。後面有解釋RNN用gradient方法會產生的gradient vanishing問題。
LSTM Networks
優點是:可以訓練long-term dependencies。用兩個圖對比傳統RNN和LSTM
LSTM的repeating module內部有四個相互關聯的神經網路層次,下面細講。
核心思想
cell state,就是下圖所示的水平箭頭,類似一個傳送帶,只有一些簡單的線性變換,所以可以讓信息在不同module之間流動不產生變化。
步驟分解
- 第一步:決定哪些信息是要扔掉的。由「遺忘之門 - forget gate layer」決定。input是前一個module的輸出結果以及input(就是word sequence)。比如,探究一個新的對象的性別,我們需要忘記上一個對象的性別。
- 第二步:決定哪些信息是要存進cell state。由「輸入之門 - input gate layer」和tanh層共同決定。input gate層是sigmoid層決定哪些component值得update,然後一個tanh層計算一個新的cell state加在舊的上面。接前例,這一步將把新對象的性別加到cell state中。
綜合第一第二步:我們獲得第t次更新後的cell state,即放棄該放棄的,堅持該堅持的。
- 最後:確定輸出,給下一個module,即。首先,用一個sigmoid層決定cell state的哪些component值得輸出,然後把當前cell state經過tanh的洗禮並與之前的sigmoid 結果相乘,就可以輸出我們想輸出的。緊接上例,因為模型目前只知道有這麼一個對象,所以猜測,下一個次可能是動詞(也可能不是),因此決定輸出的對象可以包含一些對動詞的預測有幫助的信息,比如對象是單數還是複數,這樣後面一個module在預測下一個動詞(如果真是動詞)的時候可以選擇對應單數主語或複數主語。
計算出的有兩個去向,一個是用作模型的預測值輸入error function計算error,另一個就 是輸入下一個module
LSTM變體
前述LSTM是一個標準形式,但所有人都會對自己的LSTM作一些小調整。這裡介紹一些比較厲害的。
- Gers & Schmidhuber (2000)加入了一個「peephole connection (pc)」,就是每一個門都接收上一個cell state:,也有的paper只給部分門pc.
- 變體二將forget gate 和input gate合在一起,即,就是,對於某個component,只有forget才會有input,不forget就不input
- 變體三變得比較大,但其實形式比標準LSTM簡單,而且越來越流行:Cho, et al. (2014)提出的GRU(Gated Recurrent Unit)。結合forget和input gates形成一個"update gate",同時也結合cell state以及hidden state。如下圖:
結論
下一步的研究將是「attention」。讓RNN的每一步都能從一個大範圍的信息中抽取細節。比如作image caption,RNN可以每次看圖片的一小部分然後model一個詞。
還有其他比較有前景的方向,比如Grid LSTM by Kalchbrenner, et al. (2015)。Generative Models using RNNs by Gregor, et al. (2015), Chung, et al. (2015), or Bayer & Osendorfer (2015)
其他補充知識
- Exploding and Vanishing gradients是RNN一個很典型的問題,因為它是自循環,所以相當於gradient matrix的很多次方,使得gradient grow or shrink at a rate exponential in number of time steps。
- Exploding很好解決,當其norm(範式,L1或L2)超過一個設定值,就縮小gradient。
- 但是Vanishing不好解決,因為並不是說所有gradient都很小,而是gradient的component在對應於long-term dependencies的方向上很小,在對應於short-term dependencies的方向上很大,所以RNN更容易學習short term dependencies而不是long -term。LSTM的解決方法是修改RNN對hidden state的update方式,RNN是用作矩陣乘法得到,而LSTM是用先算然後兩者相加得到。,the gradients of an RNN that computesare nicer, since they cannot vanish. 有兩個因素決定gradient會不會vanish,1)weight;2)activation function,就像時間序列方程的coefficients一樣,有一個是小於0的話,gradient就會vanish。根據前文LSTM結構核心概念,主線cell state在repeating module之間的flow所用的activation function是identity function,gradient是1,而effective weight是forget gate activation,it is the rate at which you want the neural network to forget its past memory。大概意思是每一次只要forget gate有輸出那麼輸出就接近1,不會造成vanishing。
- How LSTM (or RNN) stops:Show and Tell: A Neural Image Caption Gdnerator. 里粗略的提了一下
we denote by a special start word and by a special stop word which designates the start and end of the sentence. In particular by emitting the stop word the LSTM signals that a complete sentence has been generated.
自己的理解:
- 模型的設置是對language model有一些prior knowledge,所以machine learning不是模型和編程那麼簡單,不是說建立一個模型適用於所有問題,而是需要對所要研究的問題有一定的研究,假設。比如另一篇翻譯AlexNet的文章裡面,Alex也有提到,他們的CNN是基於很多重要的對圖像的假設。
- 感覺學科之間的交互性,雖然尚未接觸到深層原理,但是看RNN的結構和對gradient vanishing的一些解釋,感覺這個模型很像一個時間序列模型。因為,RNN是需要以往的信息作為一個input來預測下一個信息,很像時間序列模型。兩者都需要對參數進行控制以識別使用過去多久的信息比較合理。還需要搜索一下有沒有這方面的研究,感覺是很好的學科交流。
拓展閱讀
有幾個不錯的了解LSTM的文章或tutorial:
- TensorFlows tutorial on RNN and LSTM
- LSTM implementation explained:用Torch7框架 Lua語言
推薦閱讀:
※我是如何「元學習」的
※生成對抗網路
※【求援】需要你的參與
※模型評估和選擇
※非極大值抑制演算法(Python實現)
TAG:機器學習 |