【P5】Attention Is All You Need

二叉樹不是樹_ZJY發表於2020-11-13

1 模型

【P5】Attention Is All You Need

Transformer 是基於經典的Encoder-Decoder架構:

  • Encoder 的輸入由 Input Embedding 和 Positional Embedding 求和組成。

  • Decoder 的初始輸入由 Output Embedding 和 Positional Embedding 求和得到。

上圖中 Nx 框出來的部分是 Encoder/Decoder 的一層,Transformer 中 Encoder 和 Decoder 各有6層。

【P5】Attention Is All You Need

2 Attention機制

2.1 Scaled Dot-Product Attention

【P5】Attention Is All You Need

 Attention  ( Q , K , V ) = softmax ⁡ ( Q K T d k ) V \text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V  Attention (Q,K,V)=softmax(dk QKT)V
具體計算步驟見:NLP中的Attention機制,這裡打分採用縮放點積模型。

公式 Q K T Q K^{T} QKT, 其實就會組成一個word2word的attention map(加了softmax之後就是一個合為1的權重了)。比如說你的輸入是一句話 “i have a dream” 總共4個單詞,這裡就會形成一張4x4的注意力機制的圖:

【P5】Attention Is All You Need

注意:encoder裡面是叫self-attention,decoder裡面是叫masked self-attention。

masked就是要在做language modelling(或者像翻譯)的時候,不給模型看到未來的資訊(沿著對角線把灰色的區域用0覆蓋掉):

【P5】Attention Is All You Need

詳細來說,i作為第一個單詞,只能有和i自己的attention。have作為第二個單詞,有和i, have 兩個attention。 a 作為第三個單詞,有和i,have,a 前面三個單詞的attention。到了最後一個單詞dream的時候,才有對整個句子4個單詞的attention。

【P5】Attention Is All You Need

做完softmax後就像這樣,橫軸合為1

2.2 Multi-Head Attention

Multi-Head Attention就是把Scaled Dot-Product Attention的過程做H次,然後把輸出Z合起來,結構如下:

【P5】Attention Is All You Need

 MultiHead  ( Q , K , V ) =  Concat  (  head  1 , … ,  head  h ) W O  where head  i =  Attention  ( Q W i Q , K W i K , V W i V ) \begin{aligned} \text { MultiHead }(Q, K, V) &=\text { Concat }\left(\text { head }_{1}, \ldots, \text { head }_{\mathrm{h}}\right) W^{O} \\ \text { where head }_{\mathrm{i}} &=\text { Attention }\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right) \end{aligned}  MultiHead (Q,K,V) where head i= Concat ( head 1,, head h)WO= Attention (QWiQ,KWiK,VWiV)

具體計算步驟見:NLP中的Attention機制

3 結構

3.1 Positional Encodings

【P5】Attention Is All You Need

因為模型不包括Recurrence/Convolution,因此是無法捕捉到序列順序資訊的,例如將K、V按行進行打亂,那麼Attention之後的結果是一樣的。但是序列資訊非常重要,代表著全域性的結構,因此必須將序列的分詞相對或者絕對position資訊利用起來。

positional encodings的計算公式如下:
P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d model  ) P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d model  ) \begin{aligned} P E_{(p o s, 2 i)} &=\sin \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \\ P E_{(p o s, 2 i+1)} &=\cos \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \end{aligned} PE(pos,2i)PE(pos,2i+1)=sin(pos/100002i/dmodel )=cos(pos/100002i/dmodel )其中,pos 是 position,i 是 dimension。

Position Embedding本身是一個絕對位置的資訊,但在語言中,相對位置也很重要,Google選擇前述的位置向量公式的一個重要原因是,由於我們有:

【P5】Attention Is All You Need

這表明位置p+k的向量可以表示成位置p的向量的線性變換,這提供了表達相對位置資訊的可能性。

【P5】Attention Is All You Need

3.2 Position-wise Feed-forward Networks

在進行了Attention操作之後,encoder和decoder中的每一層都包含了一個全連線前向網路,對每個position的向量分別進行相同的操作,包括兩個線性變換和一個ReLU啟用輸出:
F F N ( x ) = max ⁡ ( 0 , x W 1 + b 1 ) W 2 + b 2 F F N(x)=\max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2} FFN(x)=max(0,xW1+b1)W2+b2其中每一層的引數都不同。

3.3 Encoder

【P5】Attention Is All You Need

Encoder 由 6 個相同的層組成,每個層包含 2 個部分:

  • sub-layer1:Multi-Head Self-Attention
  • sub-layer2:Position-Wise Feed-Forward Network,全連線網路

每個sub-layer都模擬了殘差網路,每個sub-layer的輸出都是:
L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x + Sublayer(x)) LayerNorm(x+Sublayer(x))

其中Sublayer(x) 表示Sub-layer對輸入 x 做的對映,為了確保連線,所有的sub-layers和embedding layer輸出的維數都相同,為 d m o d e l d_{model} dmodel

【P5】Attention Is All You Need

3.4 Decoder

【P5】Attention Is All You Need

和 Encoder 相似,Decoder 也是由 6 個相同的層組成,每個層包含 3 個部分:

  • sub-layer1:Masked Multi-Head Self-Attention

mask機制的原理:在 decoder 端, 預測的資訊是基於encoder 與以及已預測出的單詞
mask機制的目的:保證訓練時位置 i i i 的預測僅僅依靠位置 i i i 之前的輸出,即在生成當前詞的時候不會注意到之後的詞
參考:Transformer 原始碼中 Mask 機制的實現

  • sub-layer2:Multi-Head Context-Attention(Encoder-Decoder Attention)

Encoder輸出結果跟Decoder第一部分輸出結果之間做Attention。
Q為decoder中第一部分的輸出,K,V均為encoder的輸出。

  • sub-layer3:Position-Wise Feed-Forward Network,全連線網路,與encoder中的相同
【P5】Attention Is All You Need

Transformer的Decoder的輸入輸出:Transformer的Decoder的輸入輸出都是什麼

3.5 The Final Linear and Softmax Layer

【P5】Attention Is All You Need

decoder元件最後會輸出一個實數向量,但我們需要得到一個單詞:這便是線性變換層(Linear Layer)要做的工作,它之後就是Softmax層。

  • Linear Layer:是一個簡單的全連線神經網路,它可以把解碼元件產生的向量投射到一個比它大得多的、被稱作對數機率(logits)的向量裡。

不妨假設我們的模型從訓練集中學習一萬個不同的英語單詞(我們模型的“輸出詞表”)。因此對數機率向量為一萬個單元格長度的向量——每個單元格對應某一個單詞的分數。

  • Softmax Layer:把那些分數變成概率(均為正數、上限1.0)。概率最高的單元格被選中,並且它對應的單詞被作為這個時間步的輸出。

4 Decode流程演示

decoder從處理輸入序列開始。然後,最頂層encoder的輸出被轉化為一組注意力向量K和V,這些向量要被每個decoder在其 "Encoder-Decoder Attention"層中使用,它幫助decoder將注意力集中在輸入序列中的適當位置:
在這裡插入圖片描述
下面的步驟重複這個過程,直到達到一個特殊的符號(&lend of sentence>),表示decoder已經完成了輸出。每一步的輸出都會在下一個時間步驟中被輸入到最底層的decoder中:
在這裡插入圖片描述

5 訓練過程總結

模型的輸出詞表在訓練之前的預處理流程中就被設定好。假設我們的輸出詞彙僅僅包含六個單詞:“a”, “am”, “i”, “thanks”, “student”以及 “<eof>”(end of sentence的縮寫形式)。例如根據輸出詞表得到"am"的one-hot編碼:

【P5】Attention Is All You Need

損失函式

例如我們正在訓練模型——把“merci”翻譯為“thanks”。即我們想要一個表示單詞“thanks”概率分佈的輸出。

(untrained)模型產生的概率分佈在每個單元格/單詞裡都賦予了隨機的數值。我們可以用真實的輸出(correct and desired output)來比較它,然後用反向傳播演算法來略微調整所有模型的權重,生成更接近結果的輸出:

【P5】Attention Is All You Need

我們的目標輸出:

【P5】Attention Is All You Need

在一個足夠大的資料集上訓練模型足夠長的時間後,我們希望生成的概率分佈看起來像這樣:

【P5】Attention Is All You Need

Reference

  1. 細講 | Attention Is All You Need
  2. The Illustrated Transformer

相關文章