本文以QA形式對自然語言處理中注意力機制(Attention)進行總結,並對Transformer進行深入解析。
目錄
一、Attention機制剖析1、為什麼要引入Attention機制?
根據通用近似定理,前饋網絡和循環網絡都有很強的能力。但為什麼還要引入注意力機制呢?
可以藉助人腦處理信息過載的方式,例如Attention機制可以提高神經網絡處理信息的能力。
2、Attention機制有哪些?(怎麼分類?)
當用神經網絡來處理大量的輸入信息時,也可以借鑑人腦的注意力機制,只 選擇一些關鍵的信息輸入進行處理,來提高神經網絡的效率。按照認知神經學中的注意力,可以總體上分為兩類:
在人工神經網絡中,注意力機制一般就特指聚焦式注意力。
3、Attention機制的計算流程是怎樣的?
Attention機制的實質:尋址(addressing)Attention機制的實質其實就是一個尋址(addressing)的過程,如上圖所示:給定一個和任務相關的查詢Query向量 q,通過計算與Key的注意力分布並附加在Value上,從而計算Attention Value,這個過程實際上是Attention機制緩解神經網絡模型複雜度的體現:不需要將所有的N個輸入信息都輸入到神經網絡進行計算,只需要從X中選擇一些和任務相關的信息輸入給神經網絡。
注意力機制可以分為三步:一是信息輸入;二是計算注意力分布α;三是根據注意力分布α 來計算輸入信息的加權平均。step1-信息輸入:用X = [x1, · · · , xN ]表示N 個輸入信息;
step2-注意力分布計算:令Key=Value=X,則可以給出注意力分布
我們將 稱之為注意力分布(概率分布), 為注意力打分機制,有幾種打分機制:
step3-信息加權平均:注意力分布 可以解釋為在上下文查詢q時,第i個信息受關注的程度,採用一種「軟性」的信息選擇機制對輸入信息X進行編碼為:
這種編碼方式為軟性注意力機制(soft Attention),軟性注意力機制有兩種:普通模式(Key=Value=X)和鍵值對模式(Key!=Value)。
軟性注意力機制(soft Attention)4、Attention機制的變種有哪些?
與普通的Attention機制(上圖左)相比,Attention機制有哪些變種呢?
硬性注意力的一個缺點是基於最大採樣或隨機採樣的方式來選擇信息。因此最終的損失函數與注意力分布之間的函數關係不可導,因此無法使用在反向傳播算法進行訓練。為了使用反向傳播算法,一般使用軟性注意力來代替硬性注意力。硬性注意力需要通過強化學習來進行訓練。——《神經網絡與深度學習》5、一種強大的Attention機制:為什麼自注意力模型(self-Attention model)在長距離序列中如此強大?
(1)卷積或循環神經網絡難道不能處理長距離序列嗎?
當使用神經網絡來處理一個變長的向量序列時,我們通常可以使用卷積網絡或循環網絡進行編碼來得到一個相同長度的輸出向量序列,如圖所示:
基於卷積網絡和循環網絡的變長序列編碼從上圖可以看出,無論卷積還是循環神經網絡其實都是對變長序列的一種「局部編碼」:卷積神經網絡顯然是基於N-gram的局部編碼;而對於循環神經網絡,由於梯度消失等問題也只能建立短距離依賴。
(2)要解決這種短距離依賴的「局部編碼」問題,從而對輸入序列建立長距離依賴關係,有哪些辦法呢?
如果要建立輸入序列之間的長距離依賴關係,可以使用以下兩種方法:一 種方法是增加網絡的層數,通過一個深層網絡來獲取遠距離的信息交互,另一種方法是使用全連接網絡。——《神經網絡與深度學習》全連接模型和自注意力模型:實線表示為可學習的權重,虛線表示動態生成的權重。由上圖可以看出,全連接網絡雖然是一種非常直接的建模遠距離依賴的模型, 但是無法處理變長的輸入序列。不同的輸入長度,其連接權重的大小也是不同的。
這時我們就可以利用注意力機制來「動態」地生成不同連接的權重,這就是自注意力模型(self-attention model)。由於自注意力模型的權重是動態生成的,因此可以處理變長的信息序列。
總體來說,為什麼自注意力模型(self-Attention model)如此強大:利用注意力機制來「動態」地生成不同連接的權重,從而處理變長的信息序列。
(3)自注意力模型(self-Attention model)具體的計算流程是怎樣的呢?
同樣,給出信息輸入:用X = [x1, · · · , xN ]表示N 個輸入信息;通過線性變換得到為查詢向量序列,鍵向量序列和值向量序列:
上面的公式可以看出,self-Attention中的Q是對自身(self)輸入的變換,而在傳統的Attention中,Q來自於外部。
self-Attention計算過程剖解(來自《細講 | Attention Is All You Need 》)注意力計算公式為:
自注意力模型(self-Attention model)中,通常使用縮放點積來作為注意力打分函數,輸出向量序列可以寫為:
二、Transformer(Attention Is All You Need)詳解從Transformer這篇論文的題目可以看出,Transformer的核心就是Attention,這也就是為什麼本文會在剖析玩Attention機制之後會引出Transformer,如果對上面的Attention機制特別是自注意力模型(self-Attention model)理解後,Transformer就很容易理解了。
1、Transformer的整體架構是怎樣的?由哪些部分組成?
Transformer模型架構Transformer其實這就是一個Seq2Seq模型,左邊一個encoder把輸入讀進去,右邊一個decoder得到輸出:
Seq2Seq模型Transformer=Transformer Encoder+Transformer Decoder
(1)Transformer Encoder(N=6層,每層包括2個sub-layers):
Transformer Encoder每個sub-layer都使用了殘差網絡:
(2)Transformer Decoder(N=6層,每層包括3個sub-layers):
Transformer Decodersub-layer-1:Masked multi-head self-attention mechanism,用來進行self-attention,與Encoder不同:由於是序列生成過程,所以在時刻 i 的時候,大於 i 的時刻都沒有結果,只有小於 i 的時刻有結果,因此需要做Mask。
sub-layer-2:Position-wise Feed-forward Networks,同Encoder。
sub-layer-3:Encoder-Decoder attention計算。
2、Transformer Encoder 與 Transformer Decoder 有哪些不同?
(1)multi-head self-attention mechanism不同,Encoder中不需要使用Masked,而Decoder中需要使用Masked;
(2)Decoder中多了一層Encoder-Decoder attention,這與 self-attention mechanism不同。
3、Encoder-Decoder attention 與self-attention mechanism有哪些不同?
它們都是用了 multi-head計算,不過Encoder-Decoder attention採用傳統的attention機制,其中的Query是self-attention mechanism已經計算出的上一時間i處的編碼值,Key和Value都是Encoder的輸出,這與self-attention mechanism不同。代碼中具體體現:
## Multihead Attention ( self-attention)
self.dec = multihead_attention(queries=self.dec,
keys=self.dec,
num_units=hp.hidden_units,
num_heads=hp.num_heads,
dropout_rate=hp.dropout_rate,
is_training=is_training,
causality=True,
scope="self_attention")
## Multihead Attention ( Encoder-Decoder attention)
self.dec = multihead_attention(queries=self.dec,
keys=self.enc,
num_units=hp.hidden_units,
num_heads=hp.num_heads,
dropout_rate=hp.dropout_rate,
is_training=is_training,
causality=False,
scope="vanilla_attention")
4、multi-head self-attention mechanism具體的計算過程是怎樣的?
multi-head self-attention mechanism計算過程Transformer中的Attention機制由Scaled Dot-Product Attention和Multi-Head Attention組成,上圖給出了整體流程。下面具體介紹各個環節:
Expand:實際上是經過線性變換,生成Q、K、V三個向量;
Split heads: 進行分頭操作,在原文中將原來每個位置512維度分成8個head,每個head維度變為64;
Self Attention:對每個head進行Self Attention,具體過程和第一部分介紹的一致;
Concat heads:對進行完Self Attention每個head進行拼接;
上述過程公式為:
5、Transformer在GPT和Bert等詞向量預訓練模型中具體是怎麼應用的?有什麼變化?
BERT Transformer 使用雙向self-attention,而GPT Transformer 使用受限制的self-attention,其中每個token只能處理其左側的上下文。雙向 Transformer 通常被稱為「Transformer encoder」,而左側上下文被稱為「Transformer decoder」,decoder是不能獲要預測的信息的。
Reference
《神經網絡與深度學習》
Attention Is All You Need
谷歌BERT解析----2小時上手最強NLP訓練模型
細講 | Attention Is All You Need
深度學習中的注意力模型(2017版)
進技術交流群請添加AINLP小助手微信(id: ainlper)關於AINLP
AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。
閱讀至此了,分享、點讚、在看三選一吧🙏