# RNN part2 (李宏毅)
### RNN 訓練方法
1. Somple RNN Learning Target 示意圖

- 1. 對Training Data做embedding,並帶入輸入層
- 2. 將輸出層與真實Target計算所設定的loss function
- 3. 利用Backpropagation進行gradient descent
2. Backpropagation through time(BPTT)

https://en.wikipedia.org/wiki/Backpropagation_through_time
3. RNN並不容易Train


- 1. Loss function有可能會劇烈震盪
- 2. Loss function的等高線圖其實存在一些斷崖,導致當參數剛好落在斷崖上時,gradient就會爆掉而無法training
- 3. 可以用Clipping的方式來給一些限制,使gradient不要太大

- 4. 原因為:Somple RNN memory項的參數會一直被疊加,導致在計算gradient時,參數的一點點小變化就會有很大的差異

- 5. LSTM可以解決gradient vanishing的問題,因為Memory及input是疊加的,且forget gate不常關掉,memory就不容易被洗掉導致gradient消失
### RNN各類應用
#### 多對一
* 需要對一串句子進行分類判斷,所以需要用到RNN的特性來處理句子,最後再將輸出轉為分類模型

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

#### CTC
* 此問題可以用 CTC 解決,其在 output 後面增加 “中” 表示 null
* ctc training 可運用窮舉法,假設全部都是對的,透過 training data 自動把詞彙組合起來


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

#### Many to Many (No Limitation)
* 不做語音辨識,直接把聲音訊號丟進去,model得到辨識的結果
* 不用知道是何種語言(台語)
#### Sequence-to-sequence Auto-encoder -Text
* document to vector
* 可以使用 bag of word 但會忽略掉 word order information
* bag of word 詞彙是一樣的,但順序不同就會有不同意思

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

#### sequence-to-sequence auto-encoder -speech
* audio segments (word-level) to Fixed-length vector
* 把聲音訊號變成vector
