Transformer 是第一個完全依賴于自注意力機制來計算其輸入和輸出的表示的轉(zhuǎn)換模型。
主流的序列到序列模型是基于編碼器-解碼器的循環(huán)或卷積神經(jīng)網(wǎng)絡(luò),注意力機制的提出,優(yōu)化了編解碼器的性能,從而使得網(wǎng)絡(luò)性能達到最優(yōu)。利用注意力機制構(gòu)建出新的網(wǎng)絡(luò)架構(gòu)Transformer, 完勝了循環(huán)或卷積神經(jīng)網(wǎng)絡(luò)。Transformer 是第一個完全依賴于自注意力機制來計算其輸入和輸出的表示的轉(zhuǎn)換模型。Transformer可以并行訓(xùn)練,訓(xùn)練時間更短。
1 Transformer的模型架構(gòu)
序列到序列模型采用的是編碼器-解碼器結(jié)構(gòu),編碼器將輸入序列(,,……,映射成符號表示z=(,,……,,根據(jù)給定的Z ,解碼器生成輸出序列(,,……,,在每一個步長里,模型利用前一個步長中生成的向量和該步長的輸入,生成輸出符號。
Transformer模型架構(gòu)如圖1-1所示,編碼器-解碼器結(jié)構(gòu)采用堆疊的多頭注意力機制加全連接層,圖中左邊的是編碼器結(jié)構(gòu),右邊的是解碼器結(jié)構(gòu):
圖 1-1 堆疊的編碼器-解碼器結(jié)構(gòu)(來源:網(wǎng)絡(luò))
編碼器:編碼器由6個相同的塊結(jié)構(gòu)堆疊而成 N=6,每個塊結(jié)構(gòu)進一步分成兩個子層:即一個多頭的自注意力機制和一個前饋網(wǎng)絡(luò)全連接層,在塊中的每一個子層之后,增加一個歸一化層(Add&Norm),每個子層的輸出均為歸一化的LayerNorm(x + Sublayer(x)),包括詞嵌入層,模塊中所有子層的輸出的維數(shù)均為512,即 = 512。
解碼器:同理,解碼器也由6個相同的塊結(jié)構(gòu)堆疊而成 N=6,每個塊結(jié)構(gòu)在編碼器兩個子層的基礎(chǔ)之上,增加了第三個子層,即增加了一個多頭自注意力子層。與編碼器類似,在塊中的每一個子層之后,增加一個歸一化層(Add&Norm)。在解碼器端,對解碼器堆棧中的自注意力子層進行了修改,以防止位置編碼和后續(xù)位置編碼相關(guān),通過這種掩蔽,確保了對位置i的預(yù)測只能依賴于小于i的位置的已知輸出。
2 Self-attention 自注意力機制
Attention 函數(shù)將三元組Q(Query)、K(Key)、V(Value) 映射成輸出,其中三元組Q(Query)、K(Key)、V(Value)和輸出均為向量,輸出是V(Value)的加權(quán)和,其中的權(quán)重是Q(Query)和K(Key)對應(yīng)的組合計算出來的數(shù)值。
1)帶縮放的點積注意力機制Scaled dot-product attention
帶縮放的點積注意力機制(Scaled dot-product attention )的公式如下:
在上面公式中Q和K中的向量維度都是,V的向量維度是
,計算所有K向量和Q向量的點積,分別除以
,并應(yīng)用一個Softmax函數(shù)來獲得這些值的權(quán)重。實際上在self-Attention中,
,為了方便將Attention的計算轉(zhuǎn)化為矩陣運算,論文中采用了點積的形式求相似度。常見的計算方法除了點積還有MLP網(wǎng)絡(luò),但是點積能轉(zhuǎn)化為矩陣運算,計算速度更快。
兩個最常用的注意力函數(shù)是:加注意力函數(shù)(Additive Attention)和點積注意力函數(shù)(Dot-product Attention)。除了
的縮放因子外,帶縮放的點積注意力機制采用的是點積注意力函數(shù),加注意力函數(shù)使用具有單個隱含層的前饋網(wǎng)絡(luò)來計算兼容性函數(shù)。雖然這兩者在理論復(fù)雜度上相似,但點積注意力函數(shù)更快,更節(jié)省空間,因為它可以使用高度優(yōu)化的矩陣乘法碼來實現(xiàn)。而對于
較小的值,這兩種機制的性能相似,但在不加大更大
的值的情況下,加注意力函數(shù)優(yōu)于點積注意力函數(shù)。對于較大的
值,點積相應(yīng)變大,將Softmax函數(shù)推到梯度極小的區(qū)域。為了抵消這種影響,我們通過
來縮放點積。
Transformer模型在三處采用了多頭注意力機制:
- 在編碼器-解碼器注意力層,Q值來自上一個解碼器層,K值和V值來自編碼器的輸出,從而使得解碼器的每一個位置信息均和輸入序列的位置信息相關(guān),這種架構(gòu)模仿了序列到序列模型編解碼器注意力機制。
- 編碼器中包括自注意力層,在自注意力層中,Q 值、K值和V值均來自編碼器上一層的輸出,編碼器中的位置信息參與到前一層的位置編碼中去。
- 同理,解碼器中的自注意力機制使得解碼器中的位置信息均參與到所有位置信息的解碼中去。
2)全連接前饋網(wǎng)絡(luò)
在Transfomer編碼器-解碼器架構(gòu)的每一塊中,除了包含多頭注意力機制外,還包含一個全連接前饋網(wǎng)絡(luò),全連接前饋網(wǎng)絡(luò)層包含兩次ReLU激活函數(shù)的線性變換。
不同層之間的全連接前饋網(wǎng)絡(luò)的參數(shù)各不相同,模型輸入輸出的維度是512 = 512, 層內(nèi)部的維度是2048 ,即= 2048。
3)嵌入和Softmax
和其它序列到序列的模型相類似,Transformer模型利用詞嵌入技術(shù)將輸入標(biāo)記和輸出標(biāo)記轉(zhuǎn)化為維度為的向量,采用可訓(xùn)練的線性變換和Softmax函數(shù),將解碼器的輸出變換成待預(yù)測的下一個標(biāo)記的概率。在Transformer模型中,兩個嵌入層和Softmax層之間共享權(quán)重矩陣。
3 位置編碼Positional Encoding
由于Transformer模型中既沒有遞歸,也沒有卷積,需要獲得輸入序列精準(zhǔn)的位置信息的話,必須插入位置編碼。位置編碼精準(zhǔn)地描述了輸入序列中各個單詞的絕對和相對位置信息,即在編碼器-解碼器的底部輸入嵌入中注入“位置編碼”,位置編碼和輸入嵌入有相同的維度,所以二者可以實現(xiàn)相加運算,位置編碼方式可以有多種,在Transformer模型中采用的是頻率不同的三角函數(shù):
其中pos 是位置,i是維數(shù),也就是說,位置編碼的每個維數(shù)都對應(yīng)于一個正弦曲線。波長從2π到10000·2π的幾何變化。之所以選擇這個函數(shù)是因為假設(shè)它使得模型很容易地學(xué)習(xí)相對位置,對于任何固定偏移量k,
可以表示為
的線性函數(shù)。
首先,將自注意力機制和循環(huán)卷積網(wǎng)絡(luò)(RNN )和卷積神經(jīng)網(wǎng)絡(luò)(CNN)進行對比,比較它們在變長序列
從三個因素來考量采用自注意力機制:首先是每一層計算的復(fù)雜程度;其次,是可以并行計算的計算量,用對序列操作的最小數(shù)目表示;第三,是網(wǎng)絡(luò)中最長相關(guān)路徑的長度。在序列學(xué)習(xí)任務(wù)中,對長序列相關(guān)性的學(xué)習(xí)是關(guān)鍵性的難點問題,前向和后向信號路徑的長度往往是影響學(xué)習(xí)效率的關(guān)鍵因素,輸入和輸出序列之間的位置越短,前向和后向信號路徑則越短,更容易學(xué)習(xí)到長序列的依賴關(guān)系,通過對比網(wǎng)絡(luò)中輸入輸出序列位置的最長通路路徑,來回答為什么采用自注意力機制來搭建Transformer模型。
表 3-1 不同層序列操作的的最大路徑長度、每層的復(fù)雜性和最小操作數(shù)
如表3-1所示 :不同層序列操作的的最大路徑長度、每層的復(fù)雜性和最小操作數(shù)。n是序列長度,d是表示維數(shù),k是卷積的核大小,r是受限自注意力中的鄰域的大小。在表3-1中,自注意力機制通過
操作將序列的位置信息關(guān)聯(lián)起來,而RNN則需要對序列進行
次操作。從計算的復(fù)雜程度來看,當(dāng)序列長度n小于表示向量的維度d 時,在機器翻譯任務(wù)中性能能達到最優(yōu)。為了提高超長輸入序列的計算性能,限制自注意力中的鄰域r的大小,從而會使得最長相關(guān)路徑的長度變?yōu)?/p>
。
卷積核維度為k 的單卷積層無法實現(xiàn)所有輸入和輸出位置信息的連接,所以要求有
層卷積層堆疊,使得最長相關(guān)路徑的長度變長。通常,CNN的訓(xùn)練成本比RNN的訓(xùn)練成本要高。
從表3-1中的對比還可以看出,自注意力機制在復(fù)雜程度、并行計算的計算量和網(wǎng)絡(luò)中最長相關(guān)路徑的長度三方面均占有優(yōu)勢。
4 Transformer 模型的訓(xùn)練
4.1訓(xùn)練數(shù)據(jù)和批次大小
在標(biāo)準(zhǔn)的WMT2014英語-德語數(shù)據(jù)集上進行訓(xùn)練,這個數(shù)據(jù)集包括大約450萬個句子數(shù)據(jù)對。句子采用字節(jié)對編碼進行編碼,源-目標(biāo)詞匯表中共享大約37000個標(biāo)記。對于英語-法語,使用了更大的WMT2014英語-法語數(shù)據(jù)集,由3600萬個句子組成,并將標(biāo)記分割為32000詞匯。句子對按近似的序列長度排列在一起。每個訓(xùn)練批都包含一組句子對,其中包含大約25000個源標(biāo)記和25000個目標(biāo)標(biāo)記。
4.2 硬件配置
使用8 NVIDIAP100 GPU上訓(xùn)練了Transfomer模型,使用超參數(shù)的基本模型,每個訓(xùn)練步長大約需要花費0.4秒的時間,對基本模型總共訓(xùn)練了10萬步或12個小時。對于大模型,步長時間為1.0秒,大模型訓(xùn)練了30萬步(3.5天)。
4.3 優(yōu)化器
采用Adam 優(yōu)化器,參數(shù)設(shè)置為h β1 = 0.9, β2 = 0.98,并依據(jù)下述公式調(diào)整學(xué)習(xí)率:
對應(yīng)于第一個warmup_steps訓(xùn)練步長,學(xué)習(xí)率線性增加,在后續(xù)步長中,學(xué)習(xí)率隨著步長的平方根成正比例下降,其中,warmup_steps =4000。
4.4 正則化
在訓(xùn)練過程中采用了三種正則化方法:
殘差Dropout:在添加子層的輸入和歸一化之前,將Dropout機制應(yīng)用于每個子層的輸出,同時在編碼器-解碼器堆疊的嵌入過程和位置編碼過程中加入Dropout機制,
= 0.1。
4.5 訓(xùn)練結(jié)果
機器翻譯
在WMT2014英德翻譯任務(wù)中,Transformer (big)比之前報告的最佳模型(包括集成)高出2.0多個BLEU,獲得BLEU分數(shù)為28.4。該模型的配置列于表5-2的底部。在8個P100 GPU 上進行訓(xùn)練需要3.5天。甚至基本模型也超過了所有之前發(fā)布的模型和集合,訓(xùn)練成本也大幅度縮減。
在WMT2014年英法翻譯任務(wù)中Transformer (big)獲得了BLEU分值為 41.0分,優(yōu)于之前發(fā)布的所有其它模型,訓(xùn)練成本降低 1/4。
表4.5-1 在英德和英法翻譯任務(wù)中Transformer模型的BLUE 分值和其它模型BLUE 分值的對比(來源:網(wǎng)絡(luò))
表4.5-1同時將翻譯質(zhì)量和訓(xùn)練成本與其他模型架構(gòu)的翻譯質(zhì)量和訓(xùn)練成本進行了比較。通過比較訓(xùn)練時間、所使用的GPU的數(shù)量以及對每個GPU5的持續(xù)單精度浮點容量的估計來估計用于訓(xùn)練模型的浮點操作的數(shù)量。
為了評估Transformer模型是否可以推廣到其他任務(wù),在英語選區(qū)解析上進行了實驗。這個任務(wù)提出了具體的挑戰(zhàn):輸出受到強大的結(jié)構(gòu)約束,且長度遠遠長于輸入。此外,RNN序列對序列模型還無法在小數(shù)據(jù)體系中獲得最為先進的結(jié)果。
通過在賓夕法尼亞州《華爾街日報》的數(shù)據(jù)集上訓(xùn)練了大約40K句子,數(shù)據(jù)模型為
的4層Transformer。此外,還在半監(jiān)督設(shè)置下訓(xùn)練它,使用更大的高置信度和伯克利解析器語料庫,大約1700萬語句。對《華爾街日報》的設(shè)置使用了16K標(biāo)記詞匯,對半監(jiān)督的設(shè)置使用了32K標(biāo)記詞匯。
結(jié)論:Transformer是采用自注意力機制的序列到序列模型,在編碼器-解碼器架構(gòu)的神經(jīng)網(wǎng)絡(luò)中,用多頭自注意力機制取代了RNN 層。對于翻譯任務(wù),Transformer的訓(xùn)練速度可以比基于循環(huán)層或卷積層的體系架構(gòu)要快得多。關(guān)于2014WMT英德語和WMT2014英法翻譯任務(wù),實現(xiàn)了不錯的性能。在前一項任務(wù)中,Transformer模型的性能甚至優(yōu)于之前報告的所有其它模型。
作者簡介
陳之炎,北京交通大學(xué)通信與控制工程專業(yè)畢業(yè),獲得工學(xué)碩士學(xué)位,歷任長城計算機軟件與系統(tǒng)公司工程師,大唐微電子公司工程師。目前從事智能化翻譯教學(xué)系統(tǒng)的運營和維護,在人工智能深度學(xué)習(xí)和自然語言處理(NLP)方面積累有一定的經(jīng)驗。