一、自注意力機制概述

自注意力機制實際上是注意力機制中的一種,關於注意力機制可以透過我的另一篇筆記進行了解:

自注意力機制實際上也是一種網路的構型,它想要解決的問題是網路接收的輸入是很多向量,並且向量的大小也是不確定的情況,比如機器翻譯(序列到序列的問題,機器自己決定多少個標籤),詞性標註(Pos tagging一個向量對應一個標籤),語義分析(多個向量對應一個標籤)等文字處理問題。

二、文字處理中單詞向量編碼的方式

在文字處理中,我們對單詞進行向量編碼通常有兩種方式:

獨熱編碼(one-hot encoding):用N位的暫存器對N個狀態編碼,通俗來講就是開一個很長很長的向量,向量的長度和世界上存在的詞語的數量是一樣多的,每一項都表示一個詞語,只要把其中的某一項置1,其他的項都置0,那麼就可以表示一個詞語,但這樣的編碼方式沒有考慮詞語之間的相關性,並且記憶體佔用也很大

詞向量編碼(Word Embedding):將詞語對映(嵌入)到另一個數值向量空間,可以透過距離來表徵不同詞語之間的相關性

拿詞性標註舉例,對一個句子來說每一個詞向量對應一個標籤,初始的想法是可以透過全連線神經網路,但全連線神經網路沒有考慮在句子不同位置,單詞可能表示不同含義的問題,並且當輸入的句子很長,比如是一篇文章的時候,模型的效能下降嚴重。

三、自注意力機制如何實現

針對全連線神經網路存在的這個問題,透過自注意力機制來解決,自注意力機制實際上是想讓機器注意到整個輸入中不同部分之間的相關性,它的實現方法如下:

第四周(2)自注意力機制(Self-Attention)

對於每一個輸入向量a,在本例中也就是每一個詞向量,經過self-attention之後都輸出一個向量b,這個向量b是考慮了所有的輸入向量才得到的,這裡有四個詞向量a對應就會輸出四個向量b

那麼向量b是如何產生的呢?

步驟1:對於每一個向量a,分別乘上三個係數

w^{q}

w^{k}

w^{v}

得到q,k,v三個值:

q^{i}=w^{q}\cdot a^{i}

寫成向量形式:

Q=W^{q}\cdot I

k^{i}=w^{k}\cdot a^{i}

寫成向量形式:

K=W^{k}\cdot I

v^{i}=w^{v}\cdot a^{i}

寫成向量形式:

V=W^{v}\cdot I

得到的Q,K,V分別表示query,key和value

第四周(2)自注意力機制(Self-Attention)

三個W就是我們需要學習的引數

步驟2:利用得到的Q和K計算每兩個輸入向量之間的相關性,也就是計算attention的值α,α的計算方法有多種,通常採用點乘的方式

\alpha_{i,j}=q^{i}\cdot k^{j}

寫成向量形式:

A=K^{T}\cdot Q

第四周(2)自注意力機制(Self-Attention)

矩陣A中的每一個值記錄了對應的兩個輸入向量的Attention的大小α

步驟3:對A矩陣進行softmax操作或者relu操作得到A‘

步驟4:利用得到的A’和V計算每個輸入向量a對應的self-attention層的輸出向量b:

b_{i}=\sum_{j=1}^{n}{v_{i}\cdot \alpha

,寫成向量形式

O=V\cdot A’

第四周(2)自注意力機制(Self-Attention)

拿第一個向量a1對應的self-attention輸出向量b1舉例,它的產生過程如下:

第四周(2)自注意力機制(Self-Attention)

先透過三個W矩陣生成q,k,v;然後利用q,k計算attention的值α,再把所有的α經過softmax得到α&;amp;amp;#39;;最後對所有的v進行加權求和,權重是α&;amp;amp;#39;,得到a1對應的self-attention輸出的b1

四、自注意力機制的問題

自注意力機制雖然考慮了所有的輸入向量,但沒有考慮到向量的位置資訊。在實際的文字處理問題中,可能在不同位置詞語具有不同的性質,比如動詞往往較低頻率出現在句首。

有學者提出可以透過位置編碼(Positional Encoding)來解決這個問題:對每一個輸入向量加上一個位置向量e,位置向量的生成方式有多種,透過e來表示位置資訊帶入self-attention層進行計算。

五、自注意力機制&CNN、RNN

1。自注意力機制與CNN:

實際上,在處理影象問題時,每一個畫素點都可以看成一個三維的向量,維度就是影象的通道數,所以影象也可以看成是很多向量輸入到模型,自注意力機制和CNN的概念類似,都是希望網路不僅僅考慮某一個向量,也就是CNN中希望模型不僅僅考慮某一個畫素點,而是讓模型考慮一個正方形或者矩形的感受野(Receptive field),對於自注意力機制來說,相當於模型自己決定receptive field是怎樣的形狀和型別。所以其實CNN卷積神經網路是特殊情況下的一種self-attention,self-attention就是複雜版的CNN。

2。自注意力機制與RNN

RNN和自注意力機制也類似,都是接受一批輸入向量,然後輸出一批向量,但RNN只能接受前面的輸出作為輸入,self-attention可以同時接受所有的向量作為輸入,所以一定程度上說Self-attention比RNN更具效率

第四周(2)自注意力機制(Self-Attention)

第四周(2)自注意力機制(Self-Attention)

Attention in vision