對於RNN(迴圈神經網路)的課堂筆記總結
首先看下面兩句話,裡面都有Taipei這個地名,可是從語用的角度來說,意思大不相同,一個是目的地,一個是出發地。所以這就是為什麼我們希望模型對Taipei前面的詞有一個記憶。
RNN的網路圖具體用影象來表示如下:
每一個詞輸入後得到的隱藏層a都會被當作下一次的輸入;每一次迴圈的引數是一樣的(用相同的顏色表示)。
上面所說的是把隱藏層a都會被當作下一次的輸入,另外也可以把上一次的輸出層當作下一次的輸出:
除此之外,還有bi-RNN,也就是說對詞周圍的兩個詞都有記憶:
也就是訓練兩個RNN,結合兩個輸出作為最後的輸出。
下面來看一看LSTM:
這是一個比RNN更加複雜的結構,設定了三個門,輸出門,輸入門以及遺忘門,每個門都有signal control。所以LSTM網路有4個輸入,1個輸出。
下面用實際的資料對以上流程作一簡單的計算:
假設這裡的g, h都是linear function,f 為sigmoid function。
但事實上每個輸入都是不一樣的,由c,h,x共同變化而得:
在實驗中,人們發現RNN訓練時loss上下浮動很大:
因為gradient descent有時會突然很大,所以會導致引數的變化突然很大。原作者用了一個小技巧:clipping, 即假如gradient descent大於某個值,就權當作等行這個值。
那為什麼會出現這種情況呢?
原因很簡單,在於引數的複用。假設我的輸入是10000….,我們設定不同的w,雖然w變動很小,可是在經過累乘之後,最後一次輸出的結果卻變化很大。
而LSTM可以改善這種情況:
下面展示幾種常見的應用:
比如一個多分類問題,取最後一次迴圈的輸出,再經過處理,便可得到分類結果。
再比如一個抽取關鍵詞的問題,將最後一次迴圈的輸出作為attention,再和embedding層一起作一些後續處理,即得到最後的結果。
語言生成的例子。
這次的筆記主要講了RNN的大概流程,比較抽像,下次再結合程式碼的形式具體地總結一遍。