背景
Encoder-Decoder是個(gè)非常通用的計(jì)算框架胃夏,至于Encoder和Decoder具體使用什么模型都是由研究者自己定的掺喻,常見的比如 CNN / RNN / BiRNN / GRU / LSTM / Deep LSTM 等勒叠,這里的變化組合非常多懦胞。
seq2seq(14年)
- seq2seq 是一個(gè) Encoder–Decoder 結(jié)構(gòu)的網(wǎng)絡(luò)瘟仿,它的輸入是一個(gè)序列,輸出也是一個(gè)序列研铆。
- Encoder 中將一個(gè)可變長(zhǎng)度的信號(hào)序列變?yōu)楣潭ㄩL(zhǎng)度的向量表達(dá)埋同,Decoder 將這個(gè)固定長(zhǎng)度的向量變成可變長(zhǎng)度的目標(biāo)的信號(hào)序列。
- 這個(gè)結(jié)構(gòu)最重要的地方在于輸入序列和輸出序列的長(zhǎng)度是可變的棵红,可以用于翻譯凶赁,聊天機(jī)器人,句法分析逆甜,文本摘要等哟冬。
Encoder 對(duì)輸入語句 X 進(jìn)行編碼,經(jīng)過函數(shù)變換為中間語義向量 C忆绰,得到中間語義向量 C 后浩峡,使用 Decoder 進(jìn)行解碼。Decoder根據(jù)中間狀態(tài)向量 C 和已經(jīng)生成的歷史信息 yi-1 去生成 t 時(shí)刻的單詞 yi
兩種模型
如果將 c 直接輸入到Decoder中错敢,則是 Seq2Seq 模型的第二種模型:
c直接作為Decoder階段RNN的初始化state翰灾,而不是在每次decode時(shí)都作為RNN cell的輸入。
如果將 c 當(dāng)作 Decoder 的每一時(shí)刻輸入稚茅,則是 Seq2Seq 模型的第一種模型:
tip:g函數(shù)往往是一個(gè)softmax函數(shù)
Seq-to-Seq with Attention(14年)
Encoder-Decoder 模型的局限性:
- 中間語義向量無法完全表達(dá)整個(gè)輸入序列的信息纸淮。Encoder 和 Decoder 的唯一聯(lián)系只有語義編碼 C ,即將整個(gè)輸入序列的信息編碼成一個(gè)固定大小的狀態(tài)向量再解碼亚享,相當(dāng)于將信息”有損壓縮”咽块。
- 句子X中任意單詞對(duì)生成某個(gè)目標(biāo)單詞yi來說影響力都是相同的,沒有任何區(qū)別
- RNN難以處理長(zhǎng)序列的句子欺税。隨著輸入信息長(zhǎng)度的增加侈沪,由于向量長(zhǎng)度固定,先前編碼好的信息會(huì)被后來的信息覆蓋晚凿,丟失很多信息亭罪。
- 每個(gè)時(shí)間步的輸出需要依賴于前面時(shí)間步的輸出,這使得模型沒有辦法并行歼秽,效率低应役;
- 并且面臨對(duì)齊問題。
引入Attention機(jī)制優(yōu)點(diǎn):
- 打破了只能利用encoder最終單一向量結(jié)果的限制燥筷,從而使模型可以集中在所有對(duì)于下一個(gè)目標(biāo)單詞重要的輸入信息上箩祥,使模型效果得到極大的改善。
- 可解釋性肆氓。我們通過觀察attention 權(quán)重矩陣的變化袍祖,可以更好地知道哪部分翻譯對(duì)應(yīng)哪部分源文字。
Attention 模型的特點(diǎn)是 Decoder 不再將整個(gè)輸入序列編碼為固定長(zhǎng)度的中間語義向量 C 做院,而是根據(jù)當(dāng)前生成的新單詞計(jì)算新的 盲泛,使得每個(gè)時(shí)刻輸入不同的 C濒持,這樣就解決了單詞信息丟失的問題。引入了 Attention 的 Encoder-Decoder 模型如下圖:
原來:
現(xiàn)在:
attention 權(quán)重矩陣的計(jì)算
這里關(guān)鍵的操作是計(jì)算encoder與decoder state之間的關(guān)聯(lián)性的權(quán)重寺滚,得到Attention分布柑营,從而對(duì)于當(dāng)前輸出位置得到比較重要的輸入位置的權(quán)重,在預(yù)測(cè)輸出時(shí)相應(yīng)的會(huì)占較大的比重村视。
Attention(17年)
背景:attention mechanism通常和RNN結(jié)合使用官套,每個(gè)時(shí)間步的輸出需要依賴于前面時(shí)間步的輸出,這使得模型沒有辦法并行蚁孔,效率低奶赔;
應(yīng)用:機(jī)器翻譯,圖片描述杠氢,語音轉(zhuǎn)文字
注意力模型優(yōu)勢(shì):
- 提高任務(wù)性能
- 提高模型的可解釋性
- 并行計(jì)算減少模型訓(xùn)練時(shí)間站刑。Attention機(jī)制每一步計(jì)算不依賴于上一步的計(jì)算結(jié)果,因此可以和CNN一樣并行處理鼻百。但是CNN也只是每次捕捉局部信息绞旅,通過層疊來獲取全局的聯(lián)系增強(qiáng)視野。
- 可以靈活的捕捉長(zhǎng)期和local依賴温艇,而且是一步到位的因悲。AM解決了RNN模型的很多問題,例如在面對(duì)長(zhǎng)文本時(shí)的性能衰減勺爱,以及計(jì)算序列數(shù)據(jù)對(duì)任務(wù)的權(quán)重影響等晃琳。
可以從兩個(gè)角度來分類Attention:
- Spatial Attention 空間注意力和Temporal Attention 時(shí)間注意力。
- Soft Attention和Hard Attention琐鲁。Soft Attention是所有的數(shù)據(jù)都會(huì)注意卫旱,都會(huì)計(jì)算出相應(yīng)的注意力權(quán)值,不會(huì)設(shè)置篩選條件绣否。Hard Attention會(huì)在生成注意力權(quán)重后篩選掉一部分不符合條件的注意力誊涯,讓它的注意力權(quán)值為0,即可以理解為不再注意這些不符合條件的部分蒜撮。
通用理解
Attention is all you need
本文的創(chuàng)新點(diǎn)在于拋棄了之前傳統(tǒng)的encoder-decoder模型必須結(jié)合cnn或者rnn的固有模式,只用attention跪呈。文章的主要目的是在減少計(jì)算量和提高并行效率的同時(shí)不損害最終的實(shí)驗(yàn)結(jié)果段磨,創(chuàng)新之處在于提出了兩個(gè)新的Attention機(jī)制,分別叫做 Scaled Dot-Product Attention 和 Multi-Head Attention耗绿。提出了transformer苹支。
將Source中的構(gòu)成元素想象成是由一系列的<Key,Value>數(shù)據(jù)對(duì)構(gòu)成,此時(shí)給定Target中的某個(gè)元素Query误阻,通過計(jì)算Query和各個(gè)Key的相似性或者相關(guān)性债蜜,得到每個(gè)Key對(duì)應(yīng)Value的權(quán)重系數(shù)晴埂,然后對(duì)Value進(jìn)行加權(quán)求和,即得到了最終的Attention數(shù)值寻定。本質(zhì)上Attention機(jī)制是對(duì)Source中元素的Value值進(jìn)行加權(quán)求和儒洛,而Query和Key用來計(jì)算對(duì)應(yīng)Value的權(quán)重系數(shù)。其實(shí)就是一個(gè)查詢(query)到一系列鍵值(key-value)對(duì)的映射狼速。
從概念上理解琅锻,把Attention仍然理解為從大量信息中有選擇地篩選出少量重要信息并聚焦到這些重要信息上,忽略大多不重要的信息向胡,這種思路仍然成立恼蓬。聚焦的過程體現(xiàn)在權(quán)重系數(shù)的計(jì)算上,權(quán)重越大越聚焦于其對(duì)應(yīng)的Value值上僵芹,即權(quán)重代表了信息的重要性处硬,而Value是其對(duì)應(yīng)的信息。
scaled dot-product attention
?
attention函數(shù)共有三步完成得到attention value拇派。
- Q與K進(jìn)行相似度計(jì)算得到權(quán)值
計(jì)算Query和每個(gè)Key之間的相似性或相關(guān)性一般有三種方式:
- dot:
- General:
- Concat:
- Preceptron:
-
對(duì)上部權(quán)值歸一化
-
用歸一化的權(quán)值與V加權(quán)求和
其意義為:為了用 value求出 query的結(jié)果, 根據(jù) query和 key 來決定注意力應(yīng)該放在value的哪部分荷辕。以前的 attention是用 LSTM 做 encoder,也就是用它來生成key 和 value攀痊,然后由 decoder來生成 query桐腌。(論文 Neural machine translation by jointly learning to align and translate,key 和 value是一樣的苟径,都是文中的h 案站,而 query是文中的 s。)
有兩種常用的注意力函數(shù)棘街,一種是加法注意力(additive attention)蟆盐,另外一種是點(diǎn)乘注意力(dot-productattention),論文所采用的就是點(diǎn)乘注意力遭殉,這種注意力機(jī)制對(duì)于加法注意力而言石挂,更快,同時(shí)更節(jié)省空間险污。
為什么scaling:
如果?太大痹愚,點(diǎn)乘的值太大,如果不做scaling蛔糯,結(jié)果就沒有加法注意力好拯腮。(d_k是key和query的維度)
點(diǎn)乘的結(jié)果過大,這使得經(jīng)過softmax之后的梯度很小蚁飒,不利于反向傳播的進(jìn)行动壤,所以我們通過對(duì)點(diǎn)乘的結(jié)果進(jìn)行尺度化。
Multi-head Attention
這里面Multi-head Attention其實(shí)就是多個(gè)Self-Attention結(jié)構(gòu)的結(jié)合淮逻,每個(gè)head學(xué)習(xí)到在不同表示空間中的特征琼懊,如下圖所示阁簸,兩個(gè)head學(xué)習(xí)到的Attention側(cè)重點(diǎn)可能略有不同,這樣給了模型更大的容量哼丈。
self attention
Google最新的機(jī)器翻譯模型內(nèi)部大量采用了Self Attention模型启妹。
在一般任務(wù)的Encoder-Decoder框架中,輸入Source和輸出Target內(nèi)容是不一樣的削祈,比如對(duì)于英-中機(jī)器翻譯來說翅溺,Source是英文句子,Target是對(duì)應(yīng)的翻譯出的中文句子髓抑,Attention機(jī)制發(fā)生在Target的元素和Source中的所有元素之間咙崎。而Self Attention顧名思義,可以理解為Target=Source這種特殊情況下的注意力計(jì)算機(jī)制吨拍,指的不是Target和Source之間的Attention機(jī)制褪猛。
優(yōu)點(diǎn):
- 引入Self Attention后會(huì)更容易捕獲句子中長(zhǎng)距離的相互依賴的特征,因?yàn)槿绻荝NN或者LSTM羹饰,需要依次序序列計(jì)算伊滋,對(duì)于遠(yuǎn)距離的相互依賴的特征,要經(jīng)過若干時(shí)間步步驟的信息累積才能將兩者聯(lián)系起來队秩,而距離越遠(yuǎn)笑旺,有效捕獲的可能性越小。
- Self Attention對(duì)于增加計(jì)算的并行性也有直接幫助作用馍资。
Transformer
Encoder: encoder由6個(gè)相同的層堆疊而成筒主,每個(gè)層有兩個(gè)子層。第一個(gè)子層是多頭自我注意力機(jī)制(multi-head self-attention mechanism)鸟蟹,第二層是簡(jiǎn)單的位置的全連接前饋網(wǎng)絡(luò)(position-wise fully connected feed-forward network)乌妙。在兩個(gè)子層中會(huì)使用一個(gè)殘差連接,接著進(jìn)行層標(biāo)準(zhǔn)化(layer normalization)建钥。也就是說每一個(gè)子層的輸出都是LayerNorm(x + sublayer(x))藤韵。網(wǎng)絡(luò)輸入是三個(gè)相同的向量q, k和v,是word embedding和position embedding相加得到的結(jié)果熊经。為了方便進(jìn)行殘差連接泽艘,我們需要子層的輸出和輸入都是相同的維度。
Decoder: decoder也是由N(N=6)個(gè)完全相同的Layer組成镐依,decoder中的Layer由encoder的Layer中插入一個(gè)Multi-Head Attention + Add&Norm組成悉盆。輸出的embedding與輸出的position embedding求和做為decoder的輸入,經(jīng)過一個(gè)Multi-HeadAttention + Add&Norm((MA-1)層馋吗,MA-1層的輸出做為下一Multi-Head Attention + Add&Norm(MA-2)的query(Q)輸入。MA-2層的輸出輸入到一個(gè)前饋層(FF)秋秤,經(jīng)過AN操作后宏粤,經(jīng)過一個(gè)線性+softmax變換得到最后目標(biāo)輸出的概率脚翘。對(duì)于decoder中的第一個(gè)多頭注意力子層,需要添加masking绍哎,確保預(yù)測(cè)位置i的時(shí)候僅僅依賴于位置小于i的輸出来农。層與層之間使用的Position-wise feed forward network。
key, query, value
- 對(duì)于encoder來說崇堰,其中key, query, value均來自前一層encoder的輸出沃于,即encoder的每個(gè)位置都可以注意到之前一層encoder的所有位置。
- 對(duì)于decoder來講海诲,有兩個(gè)與encoder不同的地方:
- 一個(gè)是第一級(jí)的Masked Multi-head繁莹。key, query, value均來自前一層decoder的輸出,但加入了Mask操作特幔,即我們只能attend到前面已經(jīng)翻譯過的輸出的詞語咨演,因?yàn)榉g過程我們當(dāng)前還并不知道下一個(gè)輸出詞語,這是我們之后才會(huì)推測(cè)到的蚯斯。
- 另一個(gè)是第二級(jí)的Multi-Head Attention不僅接受來自前一級(jí)decoder的輸出薄风,還要接收encoder的輸出。第二級(jí)decoder也被稱作encoder-decoder attention layer拍嵌,即它的query來自于之前一級(jí)的decoder層的輸出遭赂,但其key和value來自于encoder的輸出,這使得decoder的每一個(gè)位置都可以attend到輸入序列的每一個(gè)位置横辆。
- 總結(jié)一下撇他,k和v的來源總是相同的,q在encoder及第一級(jí)decoder中與k,v來源相同龄糊,在encoder-decoder attention layer中與k,v來源不同逆粹。
因此,Transformer會(huì)在三個(gè)不同的方面使用multi-head attention:
- encoder-decoder attention:使用multi-head attention炫惩,輸入為encoder的輸出和decoder的self-attention輸出僻弹,其中encoder的self-attention作為 key and value,decoder的self-attention作為query
- encoder self-attention:使用 multi-head attention他嚷,輸入的Q蹋绽、K、V都是一樣的(input embedding and positional embedding)
- decoder self-attention:在decoder的self-attention層中筋蓖,deocder 都能夠訪問當(dāng)前位置前面的位置
position encoding
注意由于該模型沒有recurrence或convolution操作卸耘,所以沒有明確的關(guān)于單詞在源句子中位置的相對(duì)或絕對(duì)的信息,為了更好的讓模型學(xué)習(xí)位置信息粘咖,所以添加了position encoding并將其疊加在word embedding上蚣抗。該論文中選取了三角函數(shù)的encoding方式,其他方式也可以瓮下。
Add+Norm
其中Add代表了Residual Connection翰铡,是為了解決多層神經(jīng)網(wǎng)絡(luò)訓(xùn)練困難的問題钝域,通過將前一層的信息無差的傳遞到下一層,可以有效的僅關(guān)注差異部分锭魔,這一方法之前在圖像處理結(jié)構(gòu)如ResNet等中常常用到例证。
而Norm則代表了Layer Normalization,通過對(duì)層的激活值的歸一化迷捧,可以加速模型的訓(xùn)練過程织咧,使其更快的收斂,
參考文獻(xiàn):
- 詳解從 Seq2Seq模型漠秋、RNN結(jié)構(gòu)笙蒙、Encoder-Decoder模型 到 Attention模型
- 【NLP】Attention Model(注意力模型)學(xué)習(xí)總結(jié)(https://www.cnblogs.com/guoyaohua/p/9429924.html)
- 深度學(xué)習(xí)對(duì)話系統(tǒng)理論篇--seq2seq+Attention機(jī)制模型詳解
- 論文筆記:Attention is all you need
- Attention機(jī)制詳解(二)——Self-Attention與Transformer
- Attention 機(jī)制學(xué)習(xí)小結(jié)