RNN與LSTM之間的介紹和公式梳理
最近在整理tensorflow,經常用到RNN與lSTM,故整理如下:
-RNN:迴圈神經網路(Recurrent Neural Networks)
-LSTM:長短時記憶網路(Long Short-Term Memory)
在看這篇文章之前,如果之前沒有接觸過-神經網路,請先閱讀-神經網路調優
RNNs的目的使用來處理序列資料。其在自然語言中貢獻巨大,中文分詞、詞性標註、命名實體識別、機器翻譯、語音識別都屬於序列挖掘的範疇。序列挖掘的特點就是某一步的輸出不僅依賴於這一步的輸入,還依賴於其他步的輸入或輸出。在序列挖掘領域傳統的機器學習方法有HMM(Hidden Markov Model,隱馬爾可夫模型)和CRF(Conditional Random Field,條件隨機場),近年來又開始流行深度學習演算法RNN(Recurrent Neural Networks,迴圈神經網路)。
你可以這樣理解:
LSTM有多種變換形式,但我們只講解一個簡單的。一個Cell由三個Gate(input、forget、output)和一個cell單元組成。Gate使用一個sigmoid啟用函式,而input和cell state通常會使用tanh來轉換。
其中S(t+1) = tanh( U*X(t+1) + W*S(t)),[tanh啟用函式]
RNN的變體
1.雙向RNN
雙向RNN認為otot不僅依賴於序列之前的元素,也跟tt之後的元素有關,這在序列挖掘中也是很常見的事實。
2.深層雙向RNN
在雙向RNN的基礎上,每一步由原來的一個隱藏層變成了多個隱藏層。
RNN的問題所在
LSTM
由於梯度消失/梯度爆炸的問題傳統RNN在實際中很難處理長期依賴,而LSTM(Long Short Term Memory)則繞開了這些問題依然可以從語料中學習到長期依賴關係。比如“I grew up in France… I speak fluent (French)”要預測()中應該填哪個詞時,跟很久之前的”France”有密切關係。
傳統RNN每一步的隱藏單元只是執行一個簡單的tanh或ReLU操作。
LSTM每個迴圈的模組內又有4層結構:3個sigmoid層,1個tanh層
LSTM每個模組的4層結構後文會詳細說明,先來解釋一下基本的圖示。
粉色的圓圈表示一個二目運算。兩個箭頭匯合成一個箭頭表示2個向量首尾相連拼接在一起。一個箭頭分叉成2個箭頭表示一個數據被複製成2份,分發到不同的地方去。
LSTM內部結構詳解
LSTM的關鍵是細胞狀態C,一條水平線貫穿於圖形的上方,這條線上只有些少量的線性操作,資訊在上面流傳很容易保持。
圖 細胞狀態的傳送帶
第一層是個忘記層,決定細胞狀態中丟棄什麼資訊。把和拼接起來,傳給一個sigmoid函式,該函式輸出0到1之間的值,這個值乘到細胞狀態上去。sigmoid函式的輸出值直接決定了狀態資訊保留多少。比如當我們要預測下一個詞是什麼時,細胞狀態可能包含當前主語的性別,因此正確的代詞可以被選擇出來。當我們看到新的主語,我們希望忘記舊的主語。
圖 更新細胞狀態
一步的細胞狀態已經被忘記了一部分,接下來本步應該把哪些資訊新加到細胞狀態中呢?這裡又包含2層:一個tanh層用來產生更新值的候選項,tanh的輸出在[-1,1]上,說明細胞狀態在某些維度上需要加強,在某些維度上需要減弱;還有一個sigmoid層(輸入門層),它的輸出值要乘到tanh層的輸出上,起到一個縮放的作用,極端情況下sigmoid輸出0說明相應維度上的細胞狀態不需要更新。在那個預測下一個詞的例子中,我們希望增加新的主語的性別到細胞狀態中,來替代舊的需要忘記的主語。
圖 生成新的細胞狀態
現在可以讓舊的細胞狀態與(f是forget忘記門的意思)相乘來丟棄一部分資訊,然後再加個需要更新的部分(i是input輸入門的意思),這就生成了新的細胞狀態。
圖 迴圈模組的輸出
最後該決定輸出什麼了。輸出值跟細胞狀態有關,把輸給一個tanh函式得到輸出值的候選項。候選項中的哪些部分最終會被輸出由一個sigmoid層來決定。在那個預測下一個詞的例子中,如果細胞狀態告訴我們當前代詞是第三人稱,那我們就可以預測下一詞可能是一個第三人稱的動詞。
LSTM實現
原理推到 引數更新方法 。核心是實現了和反向遞迴計算。
GRU
GRU(Gated Recurrent Unit)是LSTM最流行的一個變體,比LSTM模型要簡單。
RNN與LSTM之間的聯絡
探討與思考
應用
如有整理錯誤,歡迎批評指正!