預(yù)備知識(shí)RNN浇坐、LSTM
之前花了一些時(shí)間讀了seq2seq+attention诅诱,發(fā)現(xiàn)沒做筆記過(guò)一陣子真的很容易忘壹置,特地重新再讀過(guò)一遍做了下筆記孕似。
seq2seq
seq2seq有個(gè)明顯的缺點(diǎn)踩娘,不容易並行化,所以難以運(yùn)用GPU的運(yùn)算能力,因?yàn)槲覀兪褂梅嵌ㄩL(zhǎng)的sequence养渴。
decoder的訊息只有經(jīng)過(guò)sequence後的hidden state容易遺忘前面sequence的訊息的問(wèn)題雷绢,且在decoder sequence傳遞中也會(huì)遺忘訊息,所以我們將經(jīng)過(guò)sequence後的hidden state作為每個(gè)sequence的input理卑,重複複習(xí)翘紊。
teacher forcing就是將原先decoder的當(dāng)前sequence的input為上一個(gè)sequence的output,改為上一個(gè)sequence的正解而不是預(yù)測(cè)的word藐唠。
- attention架構(gòu)可以自行調(diào)整帆疟,主要精隨就是改進(jìn)原先seq2seq的encoder輸入給decoder的訊息只有經(jīng)過(guò)sequence後的hidden state容易遺忘前面sequence的訊息的問(wèn)題,且在decoder sequence傳遞中也會(huì)遺忘訊息宇立,而如果直接以所有的encoder sequence的hidden state作為輸入包含太多不重要的訊息踪宠,造成模型不好訓(xùn)練。
- 所以我們就有一個(gè)想法妈嘹,如果能有一組能夠?qū)?yīng)每個(gè)encoder word(ex.[I,am,a,student]這組input)的hidden state對(duì)當(dāng)前decoder word(ex.Je這個(gè)input)的重要程度的vector我們稱柳琢。
然後我們將它與每個(gè)對(duì)應(yīng)的encoder word的hidden state相乘後做疊加後我們稱為,c相當(dāng)於從前面的記憶個(gè)各取一點(diǎn)出來(lái)做融合(重要的部分取多润脸,不重要的部分取少)柬脸。
我們以這個(gè)c作為當(dāng)前decoder word的輸入或以c在與decoder word(ex.Je這個(gè)input)一起作為輸入,這邊c如何做輸入可以自行調(diào)整架構(gòu)津函。
數(shù)學(xué)表達(dá)式為:
參數(shù)說(shuō)明:
每個(gè)encoder word的hidden state我們標(biāo)記為涩馆,當(dāng)前時(shí)刻的hidden state為
每個(gè)decoder word的hidden state我們標(biāo)記為允坚,當(dāng)前時(shí)刻的hidden state為
encoder word為魂那,當(dāng)前時(shí)刻為
decoder word為,當(dāng)前時(shí)刻為
- 而這組是由model學(xué)出來(lái)的稠项,怎麼學(xué)架構(gòu)也是可以自行調(diào)整的涯雅,例如我們將[]與[的flatten]串接在一起得經(jīng)過(guò)1層affine(linear layer)+softmax得到一組長(zhǎng)度為的vector作為,也可以用[]與[的flatten]展运。
參考:
詳細(xì)圖解RNN及其他變形
attention可以參考李宏毅老師的課程
Attention機(jī)制詳解(一)
Attention機(jī)制詳解(二)