預備知識RNN、LSTM
之前花了一些時間讀了seq2seq+attention,發現沒做筆記過一陣子真的很容易忘,特地重新再讀過一遍做了下筆記。
seq2seq


seq2seq有個明顯的缺點,不容易並行化,所以難以運用GPU的運算能力,因為我們使用非定長的sequence。
decoder的訊息只有經過sequence後的hidden state容易遺忘前面sequence的訊息的問題,且在decoder sequence傳遞中也會遺忘訊息,所以我們將經過sequence後的hidden state作為每個sequence的input,重複複習。

teacher forcing就是將原先decoder的當前sequence的input為上一個sequence的output,改為上一個sequence的正解而不是預測的word。

- attention架構可以自行調整,主要精隨就是改進原先seq2seq的encoder輸入給decoder的訊息只有經過sequence後的hidden state容易遺忘前面sequence的訊息的問題,且在decoder sequence傳遞中也會遺忘訊息,而如果直接以所有的encoder sequence的hidden state作為輸入包含太多不重要的訊息,造成模型不好訓練。
- 所以我們就有一個想法,如果能有一組能夠對應每個encoder word(ex.[I,am,a,student]這組input)的hidden state對當前decoder word(ex.Je這個input)的重要程度的vector我們稱
。
然後我們將它與每個對應的encoder word的hidden state相乘後做疊加後我們稱為,c相當於從前面的記憶個各取一點出來做融合(重要的部分取多,不重要的部分取少)。
我們以這個c作為當前decoder word的輸入或以c在與decoder word(ex.Je這個input)一起作為輸入,這邊c如何做輸入可以自行調整架構。
數學表達式為:
參數說明:
每個encoder word的hidden state我們標記為,當前時刻的hidden state為
每個decoder word的hidden state我們標記為,當前時刻的hidden state為
encoder word為,當前時刻為
decoder word為,當前時刻為
- 而這組
是由model學出來的,怎麼學架構也是可以自行調整的,例如我們將[
]與[
的flatten]串接在一起得經過1層affine(linear layer)+softmax得到一組長度為
的vector作為
,也可以用[
]與[
的flatten]。
參考:
詳細圖解RNN及其他變形
attention可以參考李宏毅老師的課程
Attention机制详解(一)
Attention机制详解(二)
网友评论