# LSTM長短期記憶網路 #### LSTM說明: 為RNN的一種衍伸型態,傳統的RNN在訓練過程中會有**梯度消失**亦或者**梯度爆炸**的問題,而LSTM正可以藉由三門(forgot_gate、input_get、output_gate)的控制來解決梯度消失的問題,但仍無法解決梯度爆炸。  --- #### 為何梯度消失與爆炸:   圖為基本RNN的連接形式,每個神經元接收到輸入後除了輸出外也會把權重(weigh)丟給下個神經元,而最後輸出的權重則是累乘的結果,如果weight>1的話最後則可能無窮大而導致梯度爆炸,相對的如果weight<1則最後可能趨近於0導致梯度消失。 #### LSTM動作原理: 一個lstm_cell裡面會包含四個輸入,分別為input_gate、output_gate、forgot_gate三個門的控制訊號以及一個input_data。  * #### input_gate: 由Zi輸入經由一個優化函數得到f(Zi)再與我們的g(ZI)也就是我們的input_data相乘後決定要存入memory_cell的比重,而input_gate這的優化函數通常會選擇sigmoid把數值收斂在0~1之間。 * #### forgot_gate: 由Zf輸入經由一個優化函數得到f(Zf),而這個優化函數選擇的一樣為sigmoid,所以得到的f(Zf)也會是個在0~1之間的數值,接著會把存在memory_cell裡的狀態c乘以我們的f(Zf)再加上先前input_gate得到的值相加後也就會得到我們的c'。 * #### output_gate: 由Zo輸入經由一個優化函數得到f(Zo),這個優化函數仍然為sigmoid,理所當然的我們的f(Zo)也會介於0~1之間,最後將這個數值乘上我們memory_cell裡的c'就能決定最終輸出y的數值。 --- ### 人體LSTM小例子:  輸入為右下的x1、x2、x3由左而右依序輸入,每一筆 input data 進入 LSTM input 端的 weight 顯示在線上數字,然後加上一個 bias (綠色 1) 依此類推,進入 input gate, output gate, forgate gate 的參數輸入與運算也比照辦理 至於線上面各自的 weight 值以及 bias 值都是要透過 train data 及使用 gradiant decent 方法去訓練出來,我們假設已經訓練好這些值,已經顯示在圖中 所有 activation function f 都採用 sigmoid。 經過我們的運算: input_gate 平常都是關起來的,因為 bias 那邊的 weight 是 -10 除非 x2 有值,才會壓過 -10 讓 input 打開。 同理,output_gate 平常也都是關起來的,只有在 x3 有值的時候,正值才會壓過負值,使 output 打開。 forget gate 平常都是被打開的,因為 bias 那邊是 10,只有在 x2 那邊出現負值才會壓過 bias 讓 forget_gate 被關起來。 ### 參考資料 * 工程師。日常 https://hackmd.io/h9euzeWhT12d5T6HWaY1LA * 李宏毅教授hackmd https://hackmd.io/@overkill8927/SyyCBk3Mr?type=view#30-Recurrent-Neural-Network%EF%BC%88RNN%EF%BC%89--1
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up