RNN、LSTM === ###### tags: `李宏毅` ## 教材 * [pdf](https://drive.google.com/file/d/1QRJ_zbyRZpCdRujUiVvWejaGXrlofPfp/view?usp=sharing) * [youtube part1](https://www.youtube.com/watch?v=xCGidAeyS4M&ab_channel=Hung-yiLee) * [youtube part2](https://www.youtube.com/watch?v=rTqmWlnwz_0&ab_channel=Hung-yiLee) ## RNN Hidden Layer 的輸出會被存到 Memory,如下圖藍色,Neuron 除了考慮輸入之外,還會考慮存在 Memory 中的值。除了 Memory,輸入的順序也會很大的影響輸出的結果。  舉例來說,要把字串 `arrive Taipei on November 2nd` 訓練模型可以找到地點與時間。一開始 `arrive` 被輸入之後,Hidden Layer 的輸出備存到 $a^1$,下一個輸入 `Taipei` 就會考慮到 $a^1$。  也可以是 Deep 的。  上圖把 Hidden Layer 的 Output 存在 Memory 的方式叫做 Elman Network,如果是存最後的 Outpu 在 Memory,則稱作 Jordan Network,用 Jordan Network 可以取得較好的結果,因為離 Target 比較近,所以比較能知道那個值代表什麼。  ## Bidirectional RNN 把兩個方向的 RNN 的 Hidden Layer 的 Output 再一起接到 Output Layer,意義上是可以看前後文的結果產生輸出,所以可以比只看一邊還要準確。  ## Long Short-term Memory(LSTM) LSTM 有個特別的 Neuron,可以控制 Input Gate、Forget Gate、Output Gate,分別決定要不要讓輸入進來這個 Neuron;要不要洗掉 Memory;要不要有 Output。而這些 Gate 是否打開也是學習來的。  這些 Gate 的值會先經過 Sigmoid 產生 0~1 之間的值。Input Gate 會跟輸入 z 相乘,取得 $g(z)f(z_i)$,中間的 Memory 和 Forget Gate 則會變成 $cf(z_f)$,所以 Memory 會變成 $c'=g(z)f(z_i)+cf(z_f)$,最後在 Output Layer 計算 $a=h(c')f(z_o)$。  舉個例子計算 LSTM,下圖黃色方塊有三維,分別是給 Input Gate、Forget Gate、Output Gate。  ## Multiple-Layer LSTM h 是前一個輸入的輸出;c 是 peephole,也就是存在 Memory Cell 中的值。  ## RNN 訓練方式 ### Learning Target 計算實際的值與輸出的 Cross Entropy 就是 Model 的 Loss Function。  ### Learning Gradient Descent,Memory 的 Weight 也是用 Backpropagation 計算,只是因為要考慮時間,所以是用 Backpropagation through time(BPTT)。  ### RNN 的 Loss 變化 RNN 的 Loss 曲線可能會跳很多,所以會使用 Clipping 的方式,也就是設一個 Threshold,每次的調整不能大於 Threshold。  一次跳很多是因為同一個 Memory 會根據 Weight 持續放大或縮小,所以不是因為 Activation Function,而是來自於它有 Time Sequence 會在不同時間點被反覆使用。  解決方法其中一個是 LSTM,它可以解決 Gradient Vanishing 的問題,所以能把 Learning Rate 設小一點。  除了 LSTM 外,也可以用 Clockwise RNN 或 Structurally Constrained Recurrent Network(SCRN) 解決。  ## RNN 應用 ### Many to one 除了前面舉例的把每個詞歸類不同 Slot 外,也可以用 Sentiment Analysis,判斷語意是正面或負面的。  ### Many to Many 做語音辨識,因為很可能多個 Vector 才會對應到一個字,然後用 Trimming 把重複的拿掉。  不過如果現在說的是 `好棒棒`,Trimming 後就會變成 `好棒`,所以可以用 Connectionist Temporal Classification(CTC),也就是使用 null 插在字跟字之間。  ### Sequence-to-sequence Auto-encoder Speech 把聲音訊號直接拿去訓練,辨識詞,RNN 分別訓練 Encoder 和 Decoder,同時訓練來回的,讓它們越接近越好。  ### Attention-based Model ### RNN、LSTM + Structured Learning Deep Learning 和 Structured Learning 各有優缺點。  所以可以先做 Deep Learning 再接 Structured Learning。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up