導讀
self-attention機制是transformer的核心.作為CV領域的朋友,由于沒有NLP裡面的一些概念,可能會對self-attention了解起來有些費勁,這裡使用簡單的大白話以及通俗易懂的生活舉例,希望能更好的幫助你了解self-attention機制
1. attention機制
首先用一個例子來展示一下什麼是attention機制(注意力機制). 堆堆星和"廣西大表哥"去參加相親大會.在相親大會上,每個人手裡都有一本小冊子介紹每一位單身嘉賓的基本情況.而每個人心中也有對另一半的擇偶标準.例如堆堆星喜歡工作穩定,性格内向溫柔的妹子.廣西大表哥喜歡長得漂亮且外向的妹子.在翻閱小冊子的時候,堆堆星被1号女嘉賓深深的吸引.而廣西大表哥對2号女嘉賓情有獨鐘.
然後在後面的活動中,堆堆星一直把注意力放在1号妹子身上,她說的話,她參加的遊戲,都非常認真的觀看.而對于2号妹子,說了啥,唱了啥,已經被自動忽略了.同樣的,廣西大表哥也把2号的一舉一動放在心裡,生怕錯過任何細節.其實上面就是一個注意力機制的很好展現.堆堆星與廣西大表哥的擇偶标準就是attention機制中的Q(Query)值,就是我們期望找到(查詢到)的妹子的樣子.而妹子們的簡介就是她們的K(Key)值,可以了解為關鍵的屬性,關鍵的資訊.于是我們拿着我們的Q(Query)值去和妹子們的K(Key)值做相似性判斷.例如堆堆星的Q(Query)值是長相無所謂,但是要求工作穩定,性格内向,該Q(Query)值與1号妹子的K(Key)值的相似性非常高,是以在堆堆星心中占據了100分的位置.而2号妹子的K(Key)值和堆堆星的Q(Query)值相似性較低,是以隻有20分的低分.上面這個拿着Q(Query)值去與K(Key)值求相似性,就是典型的attention機制的核心流程.
2. self-attention機制
實際上self-attention的機制與attention的機制是完全一緻的,用Q(Query)值與K(Key)值做相似性.但是不同的是attention是與别人的K(Key)值做相似性,而self-attention是自己的Q(Query)與自己的K(Key)值做相似性.舉個小例子,在上次相親大會之後,廣西大表哥憑借自己無與倫比的魅力,順利吸引了2号妹子,情投意合,幹柴烈火...(),但是後來妹子嫌棄廣西大表哥太胖了.于是大表哥開始了自己的減肥計劃.一周後,妹子想要檢查大表哥的減肥計劃進展.,當初妹子給大表哥立下的flag是"管住嘴,邁開腿"(Q值),然後大表哥把自己一周的表現進行了複盤:跑步跑了10次,零食隻在周三晚上吃過一包薯片(K值).然後通過flag(Q值)與一周表現(K值)求相似性,就可以得出大表哥一周的減肥表現了.妹子還是比較滿意大表哥的表現的.
是以,self-attention與attention一樣,都是通過Q(Query)值與K(Key)值求相似性,進而得到不同元素之間的相關性,隻是他們的作用對象不一樣.attention通常是用在target對source的注意力;而self-attention通常用在source與source自身的注意力.下圖展示了在文本翻譯過程中的attention與self-attention的差別,結果一目了然.
3. self-attention計算
下面講解一下self-attention的計算過程,有了上面的了解,相信你會很容易了解self-attention的計算過程的。假設有三個向量X1,X2,X3,他們之間需要使用self-attention,重新組合出一組新的向量。
3.1 提取向量的Q值
就像是堆堆星和廣西大表哥總結自己的擇偶标準一樣,需要對向量提取Q值。一般使用可學習參數矩陣來提取向量的Q值
3.2 提取向量的K值
就像妹子總結出自己的簡介一樣,向量需要提取自己的K值,一般使用可學習參數矩陣來提取向量的K值
3.3 使用Q值和K值計算各個向量之間的注意力得分(相似性)
就像堆堆星和大表哥通過自己的擇偶标準與各個妹子的簡介進行對比,進而得到最佳比對一樣,一般使用點乘,cos餘弦距離等多種方法求取相似性
3.4 求取向量的V值
實際上有了相似性之後,可以直接對向量進行權重,得出新的向量。但是一般會将向量X進行一次轉換,得到向量V,然後将向量V根據相似性進行權重。如果沒有提取V的過程,那麼每次注意力機制都在對向量X自身做權重和,使得神經網絡的拟合能力大大減弱。
3.5 權重得出新的向量
對V向量進行權重,得出新的向量
4. 總結
實際上transformer就是上述注意力機制的反複堆疊。就像是傳統CNN網絡是很多卷積層的堆疊,Transformer本質上就是這些self-attention的堆疊。當然會有一些歸一化,多頭注意力(其實就是并行的進行多次self-attention)等其他操作。在CV中的Transformer裡面,向量X實際上就是圖檔的一部分,叫做Patch。這些Path之間反複的進行注意力機制的計算,組合,使得Path具有非常強的全局視野,因為它能夠擷取到任何一個Path的注意力資訊。這可能就是Transformer的一個天然優勢吧。
6. 參考資料
- [NLP]Attention機制與self-Attention機制
- Attention注意力機制與self-attention自注意力機制
- 什麼是注意力?