之前提到了 LSTM 可以有效的解決 gradient vanishing 的問題,那到底其中的結構有什麼魔法呢?讓我們從以下的內部結構圖來看一下.
LSTM 的第一個定義是 cell 裡面會存著狀態 (state) : C(t) ,而 C(t) 會跟上個時間點 C(t-1) 有關,當然在時間點 t 會對其做些修改,然後再繼續傳遞給下一個時間點 t+1.
第二個特性是其中會有一個 forget gate 來決定上一個時刻的 C(t-1) 中的內容哪些要保留哪些要留下來,而這是由 H(t-1) 以及 X(t) 經過一個 sigmoid 所決定的,其輸出的內容是一個 0 到 1 的數,0 代表完全捨棄;1 代表完全留下.而這個結果會乘上 C(t-1) 來決定過去的狀態有哪些要被留下,以及留下的程度.
接著要決定的事情是在 cell 狀態裡面要加入哪些新的資訊,其中新的資訊由 X(t) 以及 H(t-1) 經過 tanh 產生,而資訊的強弱程度則由 X(t) 以及 H(t-1) 經過 sigmoid 來決定.
最後新的 cell 狀態 C(t) 會由舊狀態 (C(t-1)) 和其遺忘的程度 (f(t)) 加上新訊息 (i(t)) 所決定.
最後還需要來決定輸出 H(t),其會由 cell 的狀態加上一些操作來決定.首先它會把 C(t) 乘上一個 tanh 來把它的數值轉換到 -1 以及 1 之間,之後乘上 H(t-1) 以及 X(t) 經過 sigmoid 的值,以此決定輸出數值的強弱程度.到此就完成了一個標準的 LSTM.
經由圖解以及數學式了解了一個基本的 LSTM 內部基本結構,
嘗試使用基本的 tensorflow op 來實現此 LSTM 結構.