机器学习笔记: attention
1 回顧: 使用RNN的Seq2Seq
????????encoder最后的輸出,我們生成兩個(gè)向量,初始的decoder狀態(tài)s0和文本向量c。然后進(jìn)行decoder操作?????????
? ? ? ? 但是問題在于,如果輸入的sequence很長(zhǎng)的話,可能我們fixed的文本向量c不夠靈活。畢竟輸出不用看所有輸入,只需要看相關(guān)的輸入即可
2 seq2seq 使用RNN和attention模塊
于是我們?cè)趕eq2seq模型中添加attention模塊
首先,對(duì)于encoder的輸出,我們將其與之前的隱狀態(tài)h一起送入MLP,得到對(duì)齊值e
?然后我們使用softmax模塊,將e歸一化為[0,1],且和為1的注意力權(quán)重a
?之后我們將h與相對(duì)應(yīng)的權(quán)重a相乘,再求和,得到此時(shí)的文本向量c1
然后使用上一輪的s,本輪的c,以及本輪decoder的輸入y,生成本輪的狀態(tài)s‘
?下一輪,使用s1進(jìn)行計(jì)算,然后得到c2.....以此類推
?2.1 舉例:RNN & attention 用于圖片注明
首先,圖片經(jīng)過(guò)CNN得到一個(gè)矩陣,然后矩陣通過(guò)某些神經(jīng)網(wǎng)絡(luò),得到一個(gè)狀態(tài)s0
?
然后,用s0和h的每個(gè)條目, 分別計(jì)算一個(gè)e
?
?之后經(jīng)過(guò)attention,得到權(quán)重值
h和對(duì)應(yīng)的a乘積求和,得到c
?s0,c1,y0計(jì)算,得到s1
?再將s1送進(jìn)去,以此循環(huán):
?3 attention 層
這是我們上一小節(jié)的attention,我們對(duì)其做一個(gè)改動(dòng)
| attention in Seq2seq | attention layer | |
| query | s | Query vector: q (Shape: ) |
| input | h矩陣 | Input vectors: X (Shape: ) |
| 相似度方法 (e的求法) | q和X的點(diǎn)積 | |
| 計(jì)算流程 |
?說(shuō)一下這里除以根號(hào)D的原因:比較大的相似度會(huì)使得softmax層飽和,這會(huì)導(dǎo)致梯度消失,除以根號(hào)D的作用就是在一定程度上約束相似度,緩解梯度消失的問題。(q和x維度越大,內(nèi)積的結(jié)果也應(yīng)該越大,所以需要除以一個(gè)和維度正相關(guān)的參數(shù)。)
當(dāng)然,我們也可以這么表示 attention layer
?
?這里的Q是外部的矩陣
?
?4 self-attention
像比于attention layer,self-attention layer 沒有外來(lái)的Q,Q得自己求得
?它可以代替bi-direction RNN,而且相比于RNN,self-attention layer可以并行
4.1 attention 步驟
->1,對(duì)于一個(gè)input xi,我們先經(jīng)過(guò)一個(gè)embedding(乘以一個(gè)矩陣),使xi變成ai
->2,然后ai分別乘上三個(gè)不同的變化矩陣(transformation matrix),變成qi,ki,vi。
->3?得到Q,K,V之后,就和前面的一致了
->4?將上一部算出來(lái)的結(jié)果進(jìn)行softmax(使得和為1,每個(gè)值都在0~1之間)
-> 5??將第4步算出來(lái)的權(quán)重,和v1進(jìn)行加權(quán)求和,得到的就是x1經(jīng)過(guò)self-attention后對(duì)應(yīng)的embedding結(jié)果
-> 6 同理,我們有b2~b4
4.2??self-attention的優(yōu)點(diǎn)
self-attention的好處是,每一個(gè)bi的輸出,不僅綜合考慮了所有input的情況;而且這個(gè)操作是可以并行運(yùn)算的。
4.3 self-attention 可視化結(jié)果
4.4 self-attention 矩陣表述
4.4.1?計(jì)算query、key、value?
4.4.2 計(jì)算 a1i
為了簡(jiǎn)化,我們把所有的除以根號(hào)d都省略了
4.4.3 計(jì)算整個(gè)的a
然后對(duì)每一列進(jìn)行softmax操作
4.4.4 計(jì)算 b
4.4.5 總覽
?
4.5 multi-head self-attention
4.5.1?multi-head self-attention 原理
?大體思路和self-attention是一樣的。不同之處在于,我們得到q,k,v后,我們用不同的方法再生成一組q,k,v。
?進(jìn)行self-attention的時(shí)候,每一種辦法生成的qki之和自己這種辦法生成的qki進(jìn)行操作
然后這兩個(gè)bi再通過(guò)某種方式merge成一個(gè)b?
4.5.2 multi-head self-attention可視化
越粗表示之間的權(quán)重越大,關(guān)系越近。
我們可以發(fā)現(xiàn),不同的head側(cè)重點(diǎn)是不一樣的:一個(gè)注重距離上的遠(yuǎn)近,一個(gè)關(guān)注語(yǔ)義上的遠(yuǎn)近
4.6 排列不變性與位置編碼
????????假設(shè)我們改變輸入X的排列順序,最終的輸出只是也改變了排列的順序,但是內(nèi)容不會(huì)因?yàn)榕帕械淖兓l(fā)生改變。我們稱這個(gè)為排列不變性
?
?倘若我們不需要排列不變性的話,我們可以對(duì)每一個(gè)輸入疊加一段位置編碼,這樣排列不變性就被破壞了
4.7 masked self-attention
中心思想就是,我們只考慮過(guò)去的內(nèi)容對(duì)我的attention權(quán)重
?4.8 CNN+self-attention
?
總結(jié)
以上是生活随笔為你收集整理的机器学习笔记: attention的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习笔记:线性判别分析(Fisher
- 下一篇: mas714 笔记:undecidabi