1. 程式人生 > 其它 >Transformer架構記錄(一)

Transformer架構記錄(一)

Transformer架構是2017年由google研究團隊提出的一項全新的自然語言處理模型架構,首次應用於機器翻譯任務中,該模型出自論文《Attention is all you need》。

有別於傳統的CNN、RNN架構,Transformer摒棄以往的序列建模思想,全面採用自注意力機制。

Transformer的提出開啟了自然語言處理研究的一個新階段,隨後的預訓練模型(Bert、GPT等)多以Transformer作為基礎架構,輔以大量預料和預訓練任務(語言模型、NSP等)。

本系列文章記錄了筆者對於Transformer的理解和總結。

整體架構

Transformer整體由兩部分構成,分別為Encoder與Decoder,如下圖所示:

上圖左邊為Encoder-bolck,上圖右邊為Decoder-block;具體應用時是多個Encoder-bolck疊加構成Encoder(注意旁邊的Nx),多個Decoder-bolck疊加構成Decoder(注意旁邊的Nx),如下圖以機器翻譯任務為例所示:

上圖中,Encoder部分由6個Encoder-bolck組成,Decoder部分由6個Decoder-bolck組成。

Encoder輸入

Encoder部分的輸入為一句自然語言,在送入第一個Encoder-bolck之前,需要對自然語言進行數字化處理:

上圖中,對於分詞後的各個Token(中文情況下Token可理解為分詞後的每一個詞語,英文情況下Token可理解為以空格隔開的單詞),分別將每個Token的詞向量(word embedding)與位置向量(position embedding)作按位相加(此處要求每個Token的詞向量與位置向量長度一致),得到語句中的每一個Token的表示向量,並將其逐行排列組織成能夠代表一句話的輸入矩陣 X(藍色所示)。

每個Token的詞向量(word embedding)可有word2vec、elmo等模型得到,也可以自行初始化並在訓練過程中調整;

每個Token的位置向量(position embedding)由下式得到:

上式中,pos表示Token在一句話中的位置,2i表示Token的位置向量中第2i個位置(分奇偶兩種情況計算,即正弦與餘弦),d_model表示詞向量維度(文中為512)

例如:對於輸入“我 有 一隻 貓”,則“有”對應的pos為1(從0開始計數),且“有”的位置編碼中,奇數位置的值按餘弦函式計算,如第7個位置(2i+1=7,此時i=3)代入餘弦公式計算,偶數位置的值按正弦函式計算,如第8個位置(2i=8,此時i=4)代入正弦公式計算(最後一個位置應該是2i=512,此時i=256)。

當然,這種位置編碼方式僅僅是一種權宜之計,後期Bert模型改進了輸入語句的位置編碼辦法。

下期預告:Encoder-block理解

作者: python之家

出處: http://www.cnblogs.com/pythonfl/

本文版權歸作者和部落格園共有,轉載時請標明本文出處;如對本文有疑問,歡迎郵件[email protected]聯絡;如發現文中內容侵犯到您的權利,請聯絡作者予以處理。