【P5】Attention Is All You Need
Attention Is All You Need
1 模型
Transformer 是基於經典的Encoder-Decoder架構:
-
Encoder 的輸入由 Input Embedding 和 Positional Embedding 求和組成。
-
Decoder 的初始輸入由 Output Embedding 和 Positional Embedding 求和得到。
上圖中 Nx 框出來的部分是 Encoder/Decoder 的一層,Transformer 中 Encoder 和 Decoder 各有6層。
2 Attention機制
2.1 Scaled Dot-Product Attention
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(dkQKT)V
具體計算步驟見:NLP中的Attention機制,這裡打分採用縮放點積模型。
公式 Q K T Q K^{T} QKT, 其實就會組成一個word2word的attention map(加了softmax之後就是一個合為1的權重了)。比如說你的輸入是一句話 “i have a dream” 總共4個單詞,這裡就會形成一張4x4的注意力機制的圖:
注意:encoder裡面是叫self-attention,decoder裡面是叫masked self-attention。
masked就是要在做language modelling(或者像翻譯)的時候,不給模型看到未來的資訊(沿著對角線把灰色的區域用0覆蓋掉):
詳細來說,i作為第一個單詞,只能有和i自己的attention。have作為第二個單詞,有和i, have 兩個attention。 a 作為第三個單詞,有和i,have,a 前面三個單詞的attention。到了最後一個單詞dream的時候,才有對整個句子4個單詞的attention。
做完softmax後就像這樣,橫軸合為1
2.2 Multi-Head Attention
Multi-Head Attention就是把Scaled Dot-Product Attention的過程做H次,然後把輸出Z合起來,結構如下:
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
因為模型不包括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選擇前述的位置向量公式的一個重要原因是,由於我們有:
這表明位置p+k的向量可以表示成位置p的向量的線性變換,這提供了表達相對位置資訊的可能性。
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
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。
3.4 Decoder
和 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中的相同
Transformer的Decoder的輸入輸出:Transformer的Decoder的輸入輸出都是什麼
3.5 The Final Linear and Softmax Layer
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編碼:
損失函式
例如我們正在訓練模型——把“merci”翻譯為“thanks”。即我們想要一個表示單詞“thanks”概率分佈的輸出。
(untrained)模型產生的概率分佈在每個單元格/單詞裡都賦予了隨機的數值。我們可以用真實的輸出(correct and desired output)來比較它,然後用反向傳播演算法來略微調整所有模型的權重,生成更接近結果的輸出:
我們的目標輸出:
在一個足夠大的資料集上訓練模型足夠長的時間後,我們希望生成的概率分佈看起來像這樣:
Reference
相關文章
- 理解BERT Transformer:Attention is not all you need!ORM
- 經典譯文:Transformer--Attention Is All You NeedORM
- 【論文閱讀筆記】Transformer——《Attention Is All You Need》筆記ORM
- Attention isn’t all you need!BERT的力量之源遠不止注意力
- 目標檢測:Segmentation is All You Need ?Segmentation
- Transformer網路-Self-attention is all your needORM
- 馬斯克開源的 grok-1 底層 Transformer 模型論文 《Attention is All You Need》馬斯克ORM模型
- Attention isn’t all you need!Mamba混合大模型開源:三倍Transformer吞吐量大模型ORM
- [Paper Reading] KOSMOS: Language Is Not All You Need: Aligning Perception with Language Models
- You Probably Dont Need Derived State
- [譯] You Might Not Need ES6
- Everything you need to know about mobile app architectureAPP
- You need tcl 8.5 or newer in order to run the Redis testRedis
- Unknown host ‘XXXX: nodename nor servname provided, or not known‘. You may need to adjust the proxyIDE
- 黑猴子的家:Redis 之 You need tcl 8.5 or newer in order to run the Redis testRedis
- Server-side activities have been updated. You need to restart SharePoint Designer to use the updated version of activities.ServerIDEREST
- 好用到爆的Kotlin擴充套件庫AndroidKTX,如果你也用Kotlin開發Android,You Need It !Kotlin套件Android
- Attention
- 閒話:IMO 2024 P5
- CC P5 Be the real owner of yourself
- Need to set ‘serverTimezone‘ propertyServer
- Are you sure you understand the responsive layout?
- 機器閱讀理解Attention-over-Attention模型模型
- IMO 2024 (P1, P5)
- Attention與SelfAttention
- Vegetables need more practice.
- [Javascript] Why need arrow function?JavaScriptFunction
- Self-Attention GAN 中的 self-attention 機制
- sparse_cross_attentionROS
- E. We Need More Bosses
- Matters Needing Attention as A SAP Freelancer
- docker in allDocker
- why you can be in netherland
- Best Wishes「兔」You!
- No need to add that my being happy in Forks is an impossibility.APP
- BiLSTM-Attention文字分類文字分類
- Useless SAP PA certificate, do we still need to get it?
- cannot convert (type interface {}) to type int: need type assertion