和seq2seq模型相似理逊,Transformer同樣基于編碼器-解碼器架構(gòu),其區(qū)別主要在于以下三點(diǎn):
Transformer blocks:將seq2seq模型重的循環(huán)網(wǎng)絡(luò)替換為了Transformer Blocks,該模塊包含一個(gè)多頭注意力層(Multi-head Attention Layers)以及兩個(gè)position-wise feed-forward networks(FFN)。對(duì)于解碼器來說,另一個(gè)多頭注意力層被用于接受編碼器的隱藏狀態(tài)己英。
Add and norm:多頭注意力層和前饋網(wǎng)絡(luò)的輸出被送到兩個(gè)“add and norm”層進(jìn)行處理,該層包含殘差結(jié)構(gòu)以及層歸一化吴旋。
Position encoding:由于自注意力層并沒有區(qū)分元素的順序损肛,所以一個(gè)位置編碼層被用于向序列元素里添加位置信息。
以下分為三個(gè)部分:
- Encoder
- Decoder
- 數(shù)據(jù)預(yù)處理:Positional Encoding
Encoder:
分為三個(gè)部分:
- Multi-Head Attention
- Add & Norm
- Feed Forward
Multi-Head Attention
是多個(gè)self-attention架構(gòu)荣瑟,self-attention是Q, K, V同一個(gè)的attention
Multi-Head Attention是首先將Q, K治拿, V通過線性變換投影到高維
ps:此處Q, K, V相同
將h個(gè)head輸出連接并通過全連接層
其中Attention函數(shù)有很多種,其中一種為
Feed Forward
Z = Multihead
通過Feed Forward以后就輸出encoder的編碼
Decoder
Decoder和Encoder的結(jié)構(gòu)差不多褂傀,但是多了一個(gè)attention的sub-layer忍啤,這里先明確一下decoder的輸入輸出和解碼過程:
輸出:對(duì)應(yīng)i位置的輸出詞的概率分布
輸入:encoder的輸出 & 對(duì)應(yīng)i-1位置decoder的輸出。所以中間的attention不是self-attention仙辟,它的K同波,V來自encoder,Q來自上一位置decoder的輸出
解碼:這里要特別注意一下叠国,編碼可以并行計(jì)算未檩,一次性全部encoding出來,但解碼不是一次把所有序列解出來的粟焊,而是像rnn一樣一個(gè)一個(gè)解出來的冤狡,因?yàn)橐蒙弦粋€(gè)位置的輸入當(dāng)作attention的query
數(shù)據(jù)預(yù)處理
之前都是用rnn一個(gè)一個(gè)處理,是有順序的项棠,現(xiàn)在是一次性并行處理沒有順序悲雳,需要有變量記錄順序,也就是位置信息
最開始通過上述公式香追,可以得到單詞的位置信息合瓢,然后在編碼和解碼之前,和單詞的embedding相加