---
tags: cs231
---
# Lecture 10: Recurrent Neural Networks
## RNN各種型態
輸入與輸出皆為序列

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}$

### 公式
$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)

### 公式
- 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 的簡化版

### 公式
$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
看圖說故事

看圖回答問題

### With Attention
可以幫助模型對輸入每個部分賦予不同的權重,抽取出更加關鍵及重要的信息,使模型做出更加準確的判斷。

>> attention要實現的是在解碼的不同時刻可以關注不同的圖像區域,進而可以生成更合理的詞。
- 模型使用CNN來提取 L 個 D 維的特徵向量,與之前的全連接層提取圖像特徵不同
### 簡易版敘述
每個 step 所輸入的 input 進去的圖片不相同

## 問題
| 組別 |<center> 問題 </center>|
|:-------------------:|----------------------|
| 第一組 |1. 為什麼 truncated backpropagation 可以取代 backpropagation 的功能?<br> 2.第三個權重是指CNN OUTPUT的圖像的類別?!<br>3. gradient clipping 怎麼解決 gradient 爆炸?比如說 threshold要怎麼設定?(影片55:33,ppt 94頁)
|
| 第二組 |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> |