1 遞歸神經網絡結構
一個簡單的傳統神經網絡結構如下圖所示:
給他一些輸入x0,x1,x2 … xt, 經過神經元作用之后得到一些對應的輸出h0,h1,h2 … ht。每次的訓練,神經元和神經元之間不需要傳遞任何信息。
遞歸神經網絡和傳統神經網絡不同的一個點在於,每次的訓練,神經元和神經元之間需要傳遞一些信息。本次的訓練,神經元需要使用上一次神經元作用之后的狀態信息。類似遞歸函數一樣。
3 傳統RNN的瓶頸
如果我們嘗試預測這句話 “雲飄在天空”里的最后一個詞,我們只需要參考之前的幾個詞,就可以很容易的得出結果是“天空“,
但是有些時候,我們需要之前的更多內容才可以得出結果。假設我們想要預測這句話 ”我家小狗從小接受握手訓練,所以現在會和人握手”里的最后一個詞,最近的幾個詞只能幫助我們限制最后一詞的范圍,如果想進一步縮小這個范圍,就需要更多之前的內容。當需要的之前內容越來越多時, RNN恐怕很難處理了。
4 LSTM網絡
LSTM是一種特殊的RNN, 用來解決長期依賴問題。和傳統的RNN一樣,網絡結構是重復的,每次的訓練,神經元和神經元之間需要傳遞一些信息。傳統的RNN,每個重復的模塊里都有一個簡單tanh層。
LSTM擁有同樣的結構,唯一不同的地方在於每個模塊里面的結構不同,它里面有4個網絡層,以一種特殊方式的相互作用。
5 具體怎樣相互作用
狀態單元(cell state) 可以長期保存某些狀態,cell state的值通過忘記門層(forget gate),輸入門層(input gate layer), 更新門層來控制實現保留多少舊狀態,更新多少新的狀態。
上圖中Ct-1就是上一次神經元傳遞過來的狀態信息,Ct就是經過本次神經元作用之后更新的狀態信息,然后繼續往后傳遞。
6 忘記門層(fortget gate layer),輸入門層(input gate layer)
首先fortget gate layer使用Ht-1和Xt的值, 經過sigmoid函數作用之后,值ft落在0~1之間,用來控制需要忘記多少Ct-1里的內容,0到1之間的值相當於一個百分比。
接着input gate layer同樣使用Ht-1和Xt的值,經過sigmoid函數作用之后,值it落在0~1之間,然后經過tanh函數作用之后,值
落在-1~1之間,-1到1之間的值相當於是減少多少或者增加多少信息。
7 更新層(update layer)
接着通過下圖中的函數來更新本單元里的Ct,用來傳遞到下一個單元里去。函數中加號左邊用的算式用來控制需要忘記多少Ct-1里的內容,加號右邊的算式用來控制需要改變多少本單元里的內容是減少還是增加,最后相加的結果Ct用來傳遞到下一個單元里去。
8 輸出層(output layer)
接着我們需要決定輸出什么,使用Ht-1和Xt的值,經過sigmoid函數作用之后,值Ot落在0~1之間 。然后使用Ct的值,經過tanh函數作用之后,值變成-1~1之間,接着乘以Ot,這樣就可以控制想要輸出的那一部分內容了,變成下一個單元的Ht-1。