NLP——機器翻譯中的Transformer

框架

在這裏插入圖片描述

簡介

Transformer就是一個升級版的Seq2Seq,也是由Encoder和Decoder組成。Transformer拋棄了以往深度學習任 務使用的CNN和RNN,整個網絡結構完全是由Attention機制組成,更準確地說是由Self-Attention和Feed Forward Neural Network組成。由於Transformer的Attention(Self-Attention機制)將序列中的任意兩個位置之間的距離縮小爲一個常量,所以和RNN順序結構相比具有更好的並行性,更符合現有的GPU框架,和CNN相比,具有直接的長距離依賴。Transformer模型被廣泛應用於NLP領域,例如機器翻譯,問答系統,文本摘要以及語音識別等。
在這裏插入圖片描述

Transformer結構

和經典的Seq2Seq模型一樣,Transformer模型也採用了Encoder-Decoder結構。框架圖的左半邊用Nx框出來 的,就代表一層Encoder,Transformer一共有6層這樣的結構。右半邊用Nx框出來的則代表一層Decoder,同樣也有6層。輸入序列首先會轉換爲詞嵌入向量,再與位置編碼向量相加後可作爲Multi-Head Attention模塊的輸入, 該模塊的輸出再與輸入相加後將投入層級歸一化函數,得出的輸出再饋送到全連接層後可得出編碼器模塊的輸出。這樣相同的6個編碼器模塊可構成整個編碼器架構。解碼模塊首先同樣構建一個自注意力模塊,然後再結合編碼器的輸出實現Multi-Head Attention,最後送入全連接網絡並輸出預測詞概率。

Encoder

Transformer的Encoder由6層相同的層組成,每一層分別由兩部分組成:
• 第一部分是multi-head self-attention
• 第二部分是position-wise feed-forward network,是一個全連接層 兩個部分,都有一個殘差連接(residual connection),然後接一個Layer Normalization
在這裏插入圖片描述

Decoder

Transformer的Decoder也是由6層相同的層組成,每一層分別由三部分組成:
• 第一部分是multi-head self-attention
• 第二部分是multi-head context-attention
• 第三部分是position-wise feed-forward network,是一個全連接層
和Encoder一樣,上面三個部分,都有一個殘差連接(residual connection),然後接一個Layer Normalization。 和self-attention不同的context-attention,其實就是普通的attention(Encoder和Decoder之間)。
在這裏插入圖片描述
Scaled Dot-Product Attention的結構圖如下所示。 首先說下Q、K、V分別代表什麼:
1)在Encoder的Self-Attention中,Q、K、V都來自同一個地方,它們是上一層Encoder的輸 出。對於第一層Encoder,它們就是word embedding和positional encoding相加得到的輸入。
2)在Decoder的Self-Attention中,Q、K、V也是來自於同一地方,它們是上一層Decoder的 輸出。對於第一層Decoder,同樣也是word embedding和positional encoding相加得到的輸 入。但是對於decoder,我們不希望它能獲得下一個time step(即將來的信息,不想讓它 看到它要預測的信息),因此我們需要進行sequence masking。
3)在Encoder-Decoder attention中,Q來自於Decoder的上一層的輸出,K和V來自於Encoder 的輸出,K和V是一樣的。
4)Q、K、V的維度都是一樣的,分別用dQ、dK、dV來表示。
在這裏插入圖片描述

Scaled Dot-Product Attention

Step1:輸入X,通過3個線性轉換把X轉換爲Q、K、V。如下圖,兩個單詞Thinking,Machines通過嵌入變換會得到兩個[1x4]的向量X1,X2。分別與Wq,Wk,Wv三個[4x3]矩陣做點乘得到6個[1x3]向量{q1,q2},{k1,k2},{v1,v2}
在這裏插入圖片描述
Step2:向量{q1,k1}做點乘得到得分Score 112,{q1,k2}做點乘得到得分Score 96
在這裏插入圖片描述
Step3:對該得分就行規範,除以8.這樣做的目的是爲了使得梯度更穩定。之後對得分[14,12]做softmax得到比例[0.88,0.12]
在這裏插入圖片描述
Step4:用得分比例[0.88,0.12]乘以[v1,v2]值(Values)得到一個加權後的值。將這些值加起來得到z1。
Ps.用Q,K去計算一個thinking與thinking,machines的權重,用權重乘以thinking,machines的V得到加權後的thinking,machines的V,最後求和得到針對各個單詞的輸入Z。
在這裏插入圖片描述

Multi-Head Attention

理解了Scaled Dot-Product Attention,Multi-Head Attention也很容易理解。Transformer論 文提到將Q、K、V通過一個線性映射之後,分成h份,對每一份進行Scaled Dot-Product Attention效果更好。然後,把各個部分的結果合併起來,再次經過線性映射,得到最終的 輸出。這就是所謂的Multi-Head Attention。這裏的超參數h就是heads的數量,默認是8。 上面說的分成h份是在dQ、dK和dV的維度上進行切分。因此進入到Scaled Dot-Product Attention的dK實際上等於DK/h。 Multi-head attention的公式如下:
在這裏插入圖片描述
其中,
在這裏插入圖片描述
dmodel=512,h=8,所以在Scaled Dot-Product Attention裏面的
在這裏插入圖片描述
所謂Multi-Head,就是多做幾次同樣的事情,同時參數不共享,然後把結果拼接(類似於 卷積神經網絡中用不同的卷積核來提取特徵)。
在這裏插入圖片描述

Layer Normalization

Normalization有很多種,但是它們都有一個共同的目的,那就是把輸入轉化成均值爲0 方差爲1的數據。在把數據送入激活函數之前進行Normalization,可以避免輸入數據落在激 活函數的飽和區。Layer Normalization和Batch Normalization的區別如下圖:
在這裏插入圖片描述
Batch Normalization的具體做法就是對每一小批數據,在批這個方向上做歸一化,公式如下:
在這裏插入圖片描述
Layer Normalization是在每一個樣本上計算均值和方差,而不是Batch Normalization那種在批方向計算均值和方差,公式如下:
在這裏插入圖片描述

Mask

Mask表示掩碼,它對某些值進行掩蓋,使其在參數更新時不產生效果。Transformer模型裏 面涉及兩種Mask,分別是padding mask和sequence mask,其中padding mask在所有的Scaled Dot- Product Attention裏面都需要用到,而sequence mask只有在Decoder的Self-Attention裏面用到。 Padding Mask:因爲每個批次輸入序列長度是不一樣的,所以我們需要對輸入序列進行補齊。具 體來說,就是在給較短的序列後面填充0。由於這些填充的位置其實是沒什麼意義的,所以 Attention機制不應該把注意力放在這些位置上,需要進行一些處理。具體做法就是把這些位置 的值加上一個非常大的負數(負無窮),這樣的話,經過softmax,這些位置的概率就會接近0。 Sequence Mask:爲了使得Decoder不能看到未來的信息,也就是對於一個序列,在t時刻,解碼 器輸出應該只能依賴於t時刻之前的輸出,而不能依賴t之後的輸出,因此就需要通過Sequence Mask把t之後的信息給隱藏起來。具體做法是產生一個上三角矩陣,上三角的值全爲0,下三角 的值全爲1,對角線也是1。把這個矩陣作用在每一個序列上,就可以達到目的。

Positional Embedding

到目前爲止,Transformer結構還沒有提取序列順序的信息,這個信息對於序列而言非常重要,如果缺失 了這個信息,可能我們的結果就是:所有的詞語都對了,但是無法組成有意義的語句(此時的Transformer就 相當於一個詞袋模型)。爲了解決這個問題,Transformer的作者使用了Positional Embedding:對序列中的詞 語出現的位置進行編碼。 在實現的時候使用正餘弦函數。公式如下:
在這裏插入圖片描述
其中,pos是指詞語在序列中的位置。可以看出,在偶數位置,使用正弦編碼,在奇數位置,使用餘弦 編碼。從編碼公式中可以看出,給定詞語的pos,我們可以把它編碼成一個dmodel的向量。也就是說,位置 編碼的每一個維度對應正弦曲線,波長構成了從2π到10000X2π的等比數列。

上面的位置編碼是絕對位置編碼。但是詞語的相對位置也非常重要。這就是論文爲什麼使用三角函數的 原因。正弦函數能夠表達相對位置信息,主要數據依據是以下兩個公式:
在這裏插入圖片描述
上面的公式說明,對於詞彙之間的位置偏移k,PE(pos+k)可以表示成PE(pos)和PE(k)組合的形式, 相當於有了可以表達相對位置的能力。

Position-wise Feed-Forward Network

這是一個全連接網絡,包含兩個線性變換和一個非線性函數(實際上就是ReLU)。公式如下:
在這裏插入圖片描述
這個線性變換在不同的位置都表現地一樣,並且在不同的層之間使用不同的參數。具體實現上用到了兩 個一維卷積。其實FFN很簡單,就是對一個輸入序列(x0,x1,x2,……,xT),對每個xi都進行一次channel的 重組:512——>2048——>512,可以理解爲對每個xi進行兩次線性映射,也可以理解爲對整個序列做一個 1*1的卷積。

Transformer優點

1.並行計算,提高訓練速度
Transformer用attention代替了原本的RNN;而RNN在訓練的時候,當前step的計算要依賴於上一 個step的hidden state的,也就是說這是一個sequential procedure,每次計算都要等之前的計算完成才能展開。而Transformer不用RNN,所有的計算都可以並行進行,從而提高訓練速度。
2.建立直接的長距離依賴
原本的RNN,如果第一幀要和第十幀建立依賴,那麼第一幀的數據要依次經過第二三四五…九幀傳給第十幀,進而產生二者的計算。而在這個傳遞的過程中,可能第一幀的數據已經產生了 biased,因此這個交互的速度和準確性都沒有保障。而在Transformer中,由於有self attention的存在,任意兩幀之間都有直接的交互,從而建立了直接的依賴,無論二者距離多遠。
3.捕捉層級化信息
構建多層神經網絡
4.引入指代信息等豐富上下文信息
Self-attention,Multi-head attention

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章