--- tags: cs231 --- # Lecture 10: Recurrent Neural Networks ## RNN各種型態 輸入與輸出皆為序列 ![](https://i.imgur.com/pg5Ez2g.png) 1. one to one:圖片分類 2. one to many:圖片敘述 3. many to one:正面/負面新聞分類 4. many to many:中翻英 5. many to many:影片異常偵測(黃標) ## RNN(Recurrent Neural Network) 時間 $t$ 的 Input 除了 $x_t$ 以外還包含上一次的資訊 $h_{t-1}$ ![](https://i.imgur.com/kt3Dziu.png) ### 公式 $h_t = f_w(h_{t-1}, x_t)$ $h_t = tanh(W_{hh}h_{t-1}+W_{xh}x_t)$ $o_t = W_{hy}h_t$ ### 缺點 一般的 RNN 會梯度消失或梯度爆炸,所以普通 RNN 無法回憶起久遠的記憶 $$ \prod^{t} tanh'(W) $$ 1. 梯度消失:$t \rightarrow 0$ 2. 梯度爆炸:$W \rightarrow \infty$ ### 補充 ### Gradient clipping 根據參數的 gradient 的值進行裁剪(壓縮到一定的範圍裡面) - 優點:防止梯度過大或是消失 - 缺點:此步裁剪是依靠遠距離的資訊所影響,但近距離的資訊就被忽略了 ### Truncated Backpropagation Through Time(TBTT) TBTT(k1, k2):每次處理一個時間步,每前向傳播 k1 步,後向傳播 k2 步。 - k1:影響模型訓練的快慢,即權重更新的頻率。 - k2:需要較大的數字,這樣網路能更好的學習序列訊息。但是這個太大的話可能會導致梯度消失。 >> 可以考慮採用 k1 < k2 < n 這種方式。 ## LSTM(Long-Short Term Memory) ![](https://i.imgur.com/trBw525.png) ### 公式 - Forget Gate $$ f_t = \sigma(W_f\cdot[h_{t-1}, x_t]) $$ - Input Gate $$ i_t = \sigma(W_i\cdot[h_{t-1}, x_t]) $$ - Output Gate $$ o_t = \sigma(W_o\cdot[h_{t-1}, x_t])) $$ sigmoid層 $\sigma$ 輸出0到1之間的數字,描述了每個成分應該通過門限的程度 $\tilde{C_t} = tanh(W_c\cdot[h_{t-1}, x_t])$ $C_t = f_t\odot C_{t-1}+i_t\odot\tilde{C_t}$ $h_t = o_t\odot tanh(C_t)$ $$ \prod^{t} tanh'(\sigma(W)) $$ >> 以加法取代激活函數 所以可以緩解RNN梯度消失爆炸的問題 ## GRU(Gated Recurrent Unit) 合併 Forget Gate 以及 Input Gate 可以視為 LSTM 的簡化版 ![](https://i.imgur.com/stpWlVm.png) ### 公式 $z_t=\sigma(W_z\cdot[h_{t-1}, x_t])$ $r_t=\sigma(W_r\cdot[h_{t-1}, x_t])$ $\tilde{h}_t = tanh(W_h\cdot[r_t\odot h_{t-1}, x_t])$ $h_t = (1-z_t)\odot h_{t-1}+z_t\odot \tilde{h}_t$ ### 與 LSTM 的比較 1. GRU參數較少,訓練速度比LSTM快一點 2. 少一個 $tanh$ 3. 據說performance差距往往並不大 ## Image Captioning 看圖說故事 ![](https://i.imgur.com/bLGtwTt.png) 看圖回答問題 ![](https://i.imgur.com/6OVesCp.png) ### With Attention 可以幫助模型對輸入每個部分賦予不同的權重,抽取出更加關鍵及重要的信息,使模型做出更加準確的判斷。 ![](https://i.imgur.com/uc5gzDL.png) >> attention要實現的是在解碼的不同時刻可以關注不同的圖像區域,進而可以生成更合理的詞。 - 模型使用CNN來提取 L 個 D 維的特徵向量,與之前的全連接層提取圖像特徵不同 ### 簡易版敘述 每個 step 所輸入的 input 進去的圖片不相同 ![](https://i.imgur.com/lmuCQS7.png) ## 問題 | 組別 |<center> 問題 </center>| |:-------------------:|----------------------| | 第一組 |1. 為什麼 truncated backpropagation 可以取代 backpropagation 的功能?<br> 2.![](https://i.imgur.com/EnDXwKD.png)第三個權重是指CNN OUTPUT的圖像的類別?!<br>3. gradient clipping 怎麼解決 gradient 爆炸?比如說 threshold要怎麼設定?(影片55:33,ppt 94頁)![](https://i.imgur.com/4YCK5zT.png) | | 第二組 |1. element wise multiplication 相較於 matrix multiplication,為何會比較容易計算 gradient?為何 backpropagation from ct > ct-1 就不會有 gradient (vanish / explode) 的問題?<br> 2. p. 84 Image Captioning with Attention 這頁不懂,可以解釋 attention model 嗎?| | 第三組 |1. LSTM 和 GRU(Gated Recurrent Unit) 兩個各適合什麼狀況?還是直接下去train?<br> 2.為什麼RNN容易有gradient飆升?<br>3.老師說的沙士比亞放進RNN有點不懂怎麼實作(概念) [連結](https://youtu.be/6niqTuYFZLQ?t=1915)<br>4.所以學了RNN可以教讓機器自己寫code囉(是否有實作python的範例)<br>5.Image captioning要怎麼做得精準呢?| | 第四組 |<center>報告組</center> |