---
# System prepended metadata

title: RNN part2 (李宏毅)

---

# RNN part2 (李宏毅)
### RNN 訓練方法
1. Somple RNN Learning Target 示意圖
![](https://i.imgur.com/b9G3zpi.png)
    - 1. 對Training Data做embedding，並帶入輸入層
    - 2. 將輸出層與真實Target計算所設定的loss function
    - 3. 利用Backpropagation進行gradient descent
    
2. Backpropagation through time(BPTT)
![](https://i.imgur.com/xgaVge6.png)
https://en.wikipedia.org/wiki/Backpropagation_through_time

3. RNN並不容易Train
![](https://i.imgur.com/VICspzB.png)
![](https://i.imgur.com/VcknZ6M.png)
    - 1. Loss function有可能會劇烈震盪
    - 2. Loss function的等高線圖其實存在一些斷崖，導致當參數剛好落在斷崖上時，gradient就會爆掉而無法training
    - 3. 可以用Clipping的方式來給一些限制，使gradient不要太大
![](https://i.imgur.com/0iBTJ36.png)
    - 4. 原因為：Somple RNN memory項的參數會一直被疊加，導致在計算gradient時，參數的一點點小變化就會有很大的差異
![](https://i.imgur.com/6ajgqWJ.png)
    - 5. LSTM可以解決gradient vanishing的問題，因為Memory及input是疊加的，且forget gate不常關掉，memory就不容易被洗掉導致gradient消失

### RNN各類應用
#### 多對一
* 需要對一串句子進行分類判斷，所以需要用到RNN的特性來處理句子，最後再將輸出轉為分類模型
![](https://i.imgur.com/FakHy6V.png)


#### 多對多
* 輸入音訊，每個一小段時間就用 vector 表示，可以做到每一個 vector 對應到一個 character
* input, output 皆為 sequence, 但 output 比較短是 character sequence
* 因為取的時間過短，output 可能會有同樣的 character 發生
* 解法：可用 trimming 把重複的 output 拿掉，但會有誤拿的狀況發生
![](https://i.imgur.com/FxZkAew.jpg)


#### CTC
* 此問題可以用 CTC 解決，其在 output 後面增加 “中” 表示 null
* ctc training 可運用窮舉法，假設全部都是對的，透過 training data 自動把詞彙組合起來
![](https://i.imgur.com/Z767PMk.jpg)
![](https://i.imgur.com/NRtjb2G.png)


#### sequence to sequence learning
* input output 都是 sequence, 不知道哪個長哪個短
* 最後的時點，memory存了所有input information
* 會不斷的跑下去，要如何阻止他？ 加入symbol ===(斷)


![](https://i.imgur.com/umG8AJO.png)



#### Many to Many (No Limitation)
* 不做語音辨識，直接把聲音訊號丟進去，model得到辨識的結果
* 不用知道是何種語言（台語）

#### Sequence-to-sequence Auto-encoder -Text
* document to vector
* 可以使用 bag of word 但會忽略掉 word order information
* bag of word 詞彙是一樣的，但順序不同就會有不同意思
![](https://i.imgur.com/m2Wbu2J.png)

* word sequence 透過 RNN 變成invalid vector，當作encode輸入，長回一樣的句子
* invalid vector 當作input，長回原來的句子，代表 encode 資訊是重要的

 ![](https://i.imgur.com/MrN1NW1.png)
 
#### sequence-to-sequence auto-encoder -speech
* audio segments (word-level)  to  Fixed-length vector
* 把聲音訊號變成vector
![](https://i.imgur.com/QkDcNfA.png)










