transformer模型簡介

Transformer模型由《Attention is All You Need》提出,有一個完整的Encoder-Decoder框架,其主要由attention(注意力)機制構成。論文地址:。

其整體結構如圖所示:

 

模型分為編碼器(Encoder)和解碼器(Decoder)兩部分,包含內部結構的總體結構如下圖所示:

 

                                                      圖二

在論文中編碼器部分由6個相同編碼器疊在一起,解碼器部分也是由6個相同解碼器疊在一起,編碼器之間不共享參數。(這裏不一定要是6個)

在將詞向量表示送入編碼器、解碼器之前,先做positional encoding,下面依次對positional encoding、encoding、decoding進行介紹:

1、positional encoding

 

 

如圖所示,由於attention機制不包含位置信息,因此句子首先進行embedding得到詞向量表示,同時為了增加位置信息,根據句子中詞的位置信息給詞嵌入添加位置編碼向量,論文中添加位置編碼的方法是:構造一個跟輸入embedding維度一樣的矩陣,然後跟輸入embedding相加得到multi-head attention 的輸入。

作者希望引入絕對位置的編碼公式,讓模型能夠學習到相對位置信息,作者使用的positional encoding生成固定位置表示如下:

已知三角函數公式如下:

 

 

 作者希望通過絕對位置的編碼公式,讓模型可以學習到相對位置信息。雖然如此獲得的 position embeddings,兩者之間的點積能夠反應相對距離,但它缺乏方向性,並且這種特性(相對距離)會被原始 Transformer 的注意力機制破壞。

基於公式 (1),位置t的位置嵌入可以表示為:

 

 

 

 

 

 

2、encoding

如圖二左邊結構所示,編碼器主要由前饋神經網絡層與多頭自注意力層構成,值得注意的是,在每個編碼器中的每個子層(自注意力、前饋網絡)的周圍都有一個殘差連接,並且都跟隨着一個“層-歸一化”步驟。這裏先介紹attention機制,還是舉個栗子:

假設我們想要翻譯這個句子:

“The animal didn’t cross the street because it was too tired”

那麼it在這句話中是是指animal還是street,人類好理解這句話,但是對機器來說就很困難了。當模型處理這個單詞“it”的時候,自注意力機制會允許“it”與“animal”建立聯繫。隨着模型處理輸入序列的每個單詞,自注意力會關注整個輸入序列的所有單詞,幫助模型對本單詞更好地進行編碼。如下圖。

 

當我們在編碼器#5(棧中最上層編碼器)中編碼“it”這個單詞的時,注意力機制的部分會去關注“The Animal”,將它的表示的一部分編入“it”的編碼中。

接下來介紹attention實現的思想。

計算自注意力的第一步就是從每個編碼器的輸入向量(每個單詞的詞向量)中生成三個向量。也就是說對於每個單詞,我們創造一個查詢向量、一個鍵向量和一個值向量。這三個向量是通過詞嵌入與三個權重矩陣后相乘創建的。在論文中這三個向量的維度比詞嵌入向量要低,實際中維度更低不是必須的,只是架構上的選擇,可以使多頭注意力的大部分計算保持不變。

計算自注意力的第二步是計算得分。假設我們需要對第一個詞’Thinking’計算自注意力向量那麼需要拿輸入句子中的每個單詞對“Thinking”打分。這些分數決定了在編碼單詞“Thinking”的過程中有多重視句子的其它部分。

這些分數是通過打分單詞(所有輸入句子的單詞)的鍵向量與“Thinking”的查詢向量相點積來計算的。所以如果我們是處理位置最靠前的詞的自注意力的話,第一個分數是q1和k1的點積,第二個分數是q1和k2的點積。

 

第三步和第四步是將分數除以8(8是論文中使用的鍵向量的維數64的平方根,這會讓梯度更穩定。這裏也可以使用其它值,8隻是默認值),然後通過softmax傳遞結果。softmax的作用是使所有單詞的分數歸一化,得到的分數都是正值且和為1。

 

這個softmax分數決定了每個單詞對編碼當下位置(“Thinking”)的貢獻。顯然,已經在這個位置上的單詞將獲得最高的softmax分數,但有時關注另一個與當前單詞相關的單詞也會有幫助。

第五步是將每個值向量乘以softmax分數(這是為了準備之後將它們求和)。這裏的直覺是希望關注語義上相關的單詞,並弱化不相關的單詞。

第六步是對加權值向量求和,然後即得到自注意力層在該位置的輸出。

 

這樣自注意力的計算就完成了。得到的向量就可以傳給前饋神經網絡。

在現實中自注意力機制是通過矩陣來實現的,與上面思路一樣:

第一步是計算查詢矩陣、鍵矩陣和值矩陣,如下圖所示:

 

將前面的計算步驟可以合併成:

 

介紹完自注意力機制后,介紹在論文中使用的多頭自注意力機制“multi-headed” attention。

 

每個頭都是獨立的查詢/鍵/值權重矩陣,從而產生不同的查詢/鍵/值矩陣。在論文中採用的是8頭,那麼經過8次不同權重矩陣運算,我們會得到8個不同的Z矩陣。

 

然後我們將這8個矩陣壓縮成一個矩陣,實現原理是將這8個矩陣拼接在一起,然後再用一個權重矩陣與之相乘,得到一個融合所有注意力頭信息的矩陣Z,再將其求和與歸一化後傳給前饋層。

 

Decoding(解碼器):

解碼器內部組件與編碼器大同小異,需要注意的是,解碼器的第一個注意力層被稱作MaskedMulti-Head Attention,通過加入了MASK操作,使得我們只被允許處理輸出序列中更靠前的那些位置,即我們只能attend到前面已經處理過的語句。第二個注意力層被稱作encoder-decoder attention layer,由圖二可知,它的query來自前一級的decoder層的輸出,key、value來自encoder的輸出,encoder的輸出可以幫助解碼器關注輸入序列哪些位置合適。接下來送入前饋層,然後重複這些步驟,直到到達一個特殊的終止符號,它表示transformer的解碼器已經完成了它的輸出。每個步驟的輸出在下一個時間步被提供給底端解碼器,並且就像編碼器之前做的那樣,這些解碼器會輸出它們的解碼結果 。另外,就像我們對編碼器的輸入所做的那樣,我們會嵌入並添加位置編碼給那些解碼器,來表示每個單詞的位置。

 

在解碼完成後會輸出一個實數向量,經過一個簡單的全連接神經網絡(線性變換層)映射到一個被稱作對數幾率(logits)的向量里,假設從訓練集中學習一萬個單詞,那麼對數幾率向量為一萬個單元格長度的向量——每個單元格對應某一個單詞的分數。接下來的Softmax 層便會把那些分數變成概率(都為正數、上限1.0)。概率最高的單元格被選中,並且它對應的單詞被作為這個時間步的輸出。

 

 

 參考:

   

           

         

 

 

(完)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

您可能也會喜歡…