# RNN / LSTM / GRU ###### tags: `Artificial Inteligence`, `RNN`,`NLP`,`LSTM`,`GRU` ## 什麼是 RNN ? * 是一種循環的網路,常用來處理時間與序列問題 ![](https://i.imgur.com/meKuN3f.png) [圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) * RNN 的下一個輸出會考慮上一層,所以很適合處理時間與序列的問題,但會遇到以下困難: 1. **梯度消失** 2. **梯度爆炸** ## 梯度下降/ 消失 / 爆炸 ### 梯度下降(Gradient Descent) * 如果變數是線性關係,Gradient Descent 是一種找最小 Loss Function 的工具 * 通常起始點是隨機選一個斜率開始使用一個樣本資料去更新,稱**隨機梯度下降法(Stochastic Gradient Descent)**。但可能會卡在局部最小值(Local Minimum)而非全域最小值(Global Minimum),解決方案如下: 1. **批次梯度下降(Batch Gradient Descent)**:但每次更新都要用一個 Batch 的資料 2. 牛頓法、momentum 或是 Adam 3. 或是根據問題調整 Learning rate 、Update 次數等 ### 梯度消失(Gradient Vanishing) ![](https://i.imgur.com/kdeRu9o.png) [圖片來源](https://ithelp.ithome.com.tw/m/articles/10280019) * 針對上面這個DNN: 1. 本層輸出 = f(上層輸出 * 本層權重 + Bias) 2. 從輸入到輸出的前向傳導公式![](https://i.imgur.com/3SOz9kx.png) 3. 我們如果使用標準化初始的權重(w1)對本層權重求 Gradient 可以看出來是從輸出到輸入層反向求出。**而這種從後面輸出往前找、往前調整的動作,叫做 Back propagation** ,當 layer 越多參數越多,越難找到至關重要的調整處(Activation function 的導數也是 0~1 之間的數,在反向傳播中,當梯度由後往前傳時,其連乘後結果會變的很小,最後變為零),稱為**梯度消失** * 解決方案: 1. 如設計較好的 Activation function ,如 Relu (讀書小記會放在本篇最末附件) 2. 設計一個較好的 Gradient descent Algorithm ### 梯度爆炸(Gradient Exploding) * 如果一開始的 w 很大,大到後面的Activation function 的導數比 1 更大,這樣結果也會很大,學習不穩定,找不到最好的參數 ### 所以 RNN... * 如果輸入的資料太長,就會記不住前面的資料,導致**梯度消失** * 如果資料太長,權重一不小心沒調好就會爆掉,導致**梯度爆炸** ## 長短期記憶模型(LSTM) * 因為單純的 RNN 表現不好,長期記憶表現不佳,故出現長短期記憶模型 * 傳統的 RNN 架構非常單純!![](https://i.imgur.com/54ybwGx.png) [圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) * LSTM 由不斷重複的單元(有四層不同函數)所組成,彼此互相影響! ![](https://i.imgur.com/X7yGbHW.png) [圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) * 以下為標準的 LSTMs 步驟: 1. 核心概念 : **透過閘門調控**,關鍵在於神經元多了三個步驟,分別為遺忘、更新與輸出 2. cell state(粉紅色) : 可用來表示單元狀態,會有一條路貫穿,把這個單元的資訊帶去下一個,這個記憶可以由閘門( 黃色 Gate 去控制 )![](https://i.imgur.com/XBUc0Xr.png)[圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) 3. 黃色 Gate (即邏輯函數)可以決定上一層的資訊要帶多少到下一層,再將資料帶進 cell state 內,此後會有兩個步驟:決定什麼資訊要留下來、更新單元狀態![](https://i.imgur.com/818wNzR.jpg)![](https://i.imgur.com/ZNnB3vc.jpg)[圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) 4. tanh 函數也會算出要使用多少資訊(Ct 去更新主要單元),但這個主要單元更新也會考量到上一個遺忘步驟的結果(ft)![](https://i.imgur.com/xXQgPF5.jpg)![](https://i.imgur.com/fU6p2pU.jpg)[圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) 5. 最後,會考量前一步驟的 Ct ,再透過邏輯函數與 tanh 去決定主要單元輸出資訊 ![](https://i.imgur.com/6Y7wCvf.jpg)[圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) * 這樣的 RNN 跟 LSTMs 很適合處理 seq2seq 的問題(如:自動翻譯或影片分類) ## 讓 LSTM 更好:GRU * 但 LSTM 太慢了,所以 Gate Recurrent Unit(GRU)被提出 1. 把 input gate + forget gate = update gate 2. cell state + ht ![](https://i.imgur.com/F9MJzp2.jpg) [圖片來源](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) https://www.youtube.com/watch?v=lycKqccytfU ## 讀書小記 ### 使用 ReLU 解決梯度消失的問題 * Sigmoid 導數介於 [0,0.25],可以壓縮資料到 0 到 1 之間,但卻容易發生梯度消失的問題,原因如下: 1. 多個小於 1 的導數連續相乘 2. 因為導數小於 1 會導致 Bp 的時候梯度越來越小,最後根本無法訓練 3. Sigmoid 的導數只有在 0 的時候有比較好的激活性 * 使用 ReLU 在正半軸不會有梯度消失的問題,負半軸又有一定的稀疏性(還是有可能會帶來梯度消失的問題) 1. 輸入為正數時不會有梯度消失的問題 2. 輸入負數導數為 0 ,神經元不會被激活,可能會導致 **Dead ReLU Problem** (因為梯度不會越來越小),神經元對數字沒有反應,隨之而來的問題就是 **不會更新** * **Leaky ReLU** 1. 希望 input 為 0 時,output 還是有一定的值(input 小於 0 時,output 等於 0.01* input) * **PReLU**(Parametric ReLU) 1. output 是 alpha (是 neuron 的一個參數,可透過 training data 學習出來,甚至每個 neuron 有不同的輸出 ) ### Back propagation 反向傳導 * 前向傳導公式與反向傳導公式為何做偏微分 1. 為了得出權重,了解哪一個 layer 對 output 影響最大 ### tanh 是什麼? * LSTM 跟 GRU 內部的 Gate 會使用 Sigmoid 確定 0 到 1 的各種狀態,使用 tanH 可以避免梯度爆炸(當然還是會發生,會比 Sigmoid 好一些) ## 參考資料 * https://ithelp.ithome.com.tw/m/articles/10280019 * https://tengyuanchang.medium.com/淺談遞歸神經網路-rnn-與長短期記憶模型-lstm-300cbe5efcc3 * https://tengyuanchang.medium.com/比較長短期記憶模型-lstm-與改良後的遞歸神經網路模型-gru-813dec22ec6d * https://www.cupoy.com/qa/club/ai_tw/0000016D6BA22D97000000016375706F795F72656C656173654B5741535354434C5542/0000017BAC14A4DE000000116375706F795F72656C656173655155455354 * https://www.cupoy.com/qa/club/ai_tw/0000016D6BA22D97000000016375706F795F72656C656173654B5741535354434C5542/0000017BAA3460330000000F6375706F795F72656C656173655155455354 * https://zhuanlan.zhihu.com/p/166126411?utm_id=0