[監督式]seq2seq

2019-05-12  本文已影响0人  RJ阿杰

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

seq2seq

seq2seq架構
seq2seq一些變形

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

teacher forcing

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

attention
  1. attention架構可以自行調整,主要精隨就是改進原先seq2seq的encoder輸入給decoder的訊息只有經過sequence後的hidden state容易遺忘前面sequence的訊息的問題,且在decoder sequence傳遞中也會遺忘訊息,而如果直接以所有的encoder sequence的hidden state作為輸入包含太多不重要的訊息,造成模型不好訓練。
  2. 所以我們就有一個想法,如果能有一組能夠對應每個encoder word(ex.[I,am,a,student]這組input)的hidden state對當前decoder word(ex.Je這個input)的重要程度的vector我們稱\alpha
    然後我們將它與每個對應的encoder word的hidden state相乘後做疊加後我們稱為c,c相當於從前面的記憶個各取一點出來做融合(重要的部分取多,不重要的部分取少)。
    我們以這個c作為當前decoder word的輸入或以c在與decoder word(ex.Je這個input)一起作為輸入,這邊c如何做輸入可以自行調整架構。
    數學表達式為:c = \Sigma_{i=1}^{n1} \alpha_{i} h_{i} = H \alpha
    \alpha \ shape=(RNN \_ layer \_ num,n1) ,H \ shape = (n1,RNN \_ layer \_ num,hidden \_ size)

參數說明:
n1為encoder的sequence長度、n2為decoder的sequence長度
每個encoder word的hidden state我們標記為H=(h_1、h_2....h_{n1}),當前時刻的hidden state為h_t
每個decoder word的hidden state我們標記為S=(s_1、s_2....s_{n2}),當前時刻的hidden state為s_t
encoder word為(e_1,e_2,e_3...e_{n1}),當前時刻為e_t
decoder word為(d_1,d_2,d_3...d_{n2}),當前時刻為d_t

  1. 而這組\alpha是由model學出來的,怎麼學架構也是可以自行調整的,例如我們將[d_t]與[H的flatten]串接在一起得經過1層affine(linear layer)+softmax得到一組長度為n1的vector作為\alpha,也可以用[s_{t-1}]與[H的flatten]。

參考:
詳細圖解RNN及其他變形
attention可以參考李宏毅老師的課程
Attention机制详解(一)
Attention机制详解(二)

上一篇下一篇

猜你喜欢

热点阅读