前言
本篇內容來自李宏毅老師於Youtube的上傳的ML相關課程。(Link1) (Link2)
Example Application

課程說明時,使用一個Slot Filling的例子。比如上圖中system中有兩個slot: Destination & time of arrival,system需要能將用戶的語句中相應的部分填入Slot中。
解法
Naive: Feedforward network

直接將word轉為vector後丟到簡單的神經網路內,轉換的方法比如可以簡單的用 1-of-N encoding。

但簡單的Feedforward network無法區分上邊“Taipei”一次是出發地還是目的地的含義,這個時候希望神經網路可以參考到“Taipei”前面的詞彙,如這邊的“arrive”&“leave”,即希望有記憶。這種有記憶的神經網路稱為 Recurrent Neural Network(RNN)

LSTM(Long Short-term Memory)

如上用三個Gate(input/forget/output)來控制memory cell。例子見視頻。
LSTM的一個Memory Cell即對應普通Network中的一個神經元。

LSTM的簡單形態如上,對於輸入

其實完整的LSTM形態中,在輸入端還會參考上一次Memory cell的輸出
RNN如何進行Learning
同樣是定義loss function,將其最小化。這邊我們將輸入
同樣使用gradient descent進行訓練,即用Backpropagation,在RNN中用Backpropagation through time(BPTT)。

但其實RNN的training是比較困難的,其Learning Curve常會發生波動。

這其實是因為RNN的error surface會非常平坦或非常陡峭,可以使用Clipping來解決,即把Gradient限制在某個threshold之下。其實用LSTM可以解決gradient vanishing的問題(即error surface上過於平坦的部分),但不能處理gradient explode(即太崎嶇的部分)。