Transformer初識

??首先需要明確的是,Transformer是一個翻譯模型凛剥。與之前主流的翻譯模型相比,transformer的依然是一個encoder-decoder結(jié)構(gòu),改變的主要是encoder和decoder內(nèi)部的組成客们,改變結(jié)構(gòu)帶來的優(yōu)勢是使得模型可以并行化訓(xùn)練。Transformer的結(jié)構(gòu)如下:

transformer結(jié)構(gòu).png
圖中左邊就是encoder部分材诽,右邊就是decoder部分底挫。
下面來具體看下兩個部分的組成。首先看encoder部分脸侥,如下圖:
transformer中encoder的主要組成.png
encoder主要結(jié)構(gòu)組成包括一個self-attention模塊和一個FFN模塊建邓。之所以是self-attention,是因為輸入的Q睁枕、K官边、V都是輸入句子對應(yīng)的embedding矩陣。此外還加上了resnet中的殘差結(jié)構(gòu)外遇,減少了梯度消失的風(fēng)險注簿,使得模型更好訓(xùn)練。
再來看看decoder部分跳仿,如下圖:
transformer中decoder的主要組成.png
decoder主要結(jié)構(gòu)組成包括一個self-attention模塊诡渴,一個encoder-decoder-attention模塊和一個FFN模塊。其中self-attention模塊和FFN模塊和encoder部分中的相同菲语,而encoder-decoder-attention模塊在結(jié)構(gòu)上也和self-attention模塊一樣妄辩,不同點在于encoder-decoder-attention模塊中的K和V是encoder部分的輸出,Q是自身self-attention模塊的輸出山上。
前文已經(jīng)提到眼耀,transformer的主要改進(jìn)在于可以并行化訓(xùn)練。之前主流的翻譯模型中encoder和decoder組成都是RNN佩憾,但是RNN是不能并行化訓(xùn)練的畔塔,只有前一時刻訓(xùn)練結(jié)束才能進(jìn)行當(dāng)前時刻的訓(xùn)練(就像GBDT一樣,每棵樹的訓(xùn)練是依賴前一棵樹的)鸯屿。但是transformer中attention結(jié)構(gòu)不一樣澈吨,它是將每個時刻的輸入信息之間的距離視為1,任意兩個時刻的輸入信息是可以直接交互運算的寄摆。attention中信息之間的交互計算是通過矩陣運算實現(xiàn)的谅辣,而矩陣運算是可以很好的進(jìn)行并行計算的。RNN和attention中信息的處理如下圖:
RNN和attention的對比.png
RNN中t時刻信息與t-2時刻信息的交互必須要先經(jīng)過t-1時刻婶恼,但是attention中t時刻和t-2時刻之間可以直接交互桑阶。沒有了時序上的限制柏副,attention結(jié)構(gòu)就可以進(jìn)行并行化計算了。同時attention結(jié)構(gòu)另外一個優(yōu)勢在于長期依賴問題得到緩解蚣录,比如RNN中t+2時刻信息與t-2時刻的信息依賴關(guān)系之間相差4步割择,但是attention中兩者可以直接計算,因此可以認(rèn)為兩者相距為1萎河。不過盡管attention中長期依賴問題得到緩解荔泳,但是也帶來另外一個問題,就是對位置信息的忽略虐杯。時序數(shù)據(jù)中數(shù)據(jù)的先后關(guān)系是很重要的玛歌,比如一句話中兩個單詞的顛倒可能就會導(dǎo)致完全不同的含義。Transformer的補(bǔ)救措施是給輸入信息加上了位置編碼擎椰,如下圖:
transformer中的位置編碼.png
也就是對每個單詞對應(yīng)的embedding向量再加上位置編碼向量支子。位置編碼公式如下:其中,是信息在序列中的位置达舒,而是位置編碼的維度序號值朋,且。為什么要用這個函數(shù)呢巩搏?文中給的解釋是:

We chose this function because we hypothesized it would allow th emodel to easily learn to attend by relative positions, since for any fixed offset k, PE_{pos+k} can be represented as a linear function of PE_{pos}

這里我給下個人解釋昨登,位置編碼后會得到一個矩陣,行數(shù)就是序列的長度塔猾,列數(shù)就是embedding維度篙骡。每一列上的值都是從同一個頻率的正弦函數(shù)上取出的,每一行就是一個單詞的位置編碼向量丈甸,這個向量是由多個不同頻率的正弦函數(shù)組成糯俗。由于相同列都是從同一頻率的正弦函數(shù)上取的值,所以不同行向量之間可以線性表示睦擂。不過為什么滿足這樣特性的編碼函數(shù)就是好的函數(shù)我還是不太明白得湘,這里挖個坑,以后弄懂了再來寫顿仇。
PyTorch實現(xiàn)代碼中實現(xiàn)位置編碼時并不是直接實現(xiàn)上述公式淘正,而是做了點改變。改變在于將公式中10000^{\frac{2i}{d_{model}}}改為e^{\frac{2i}{d_{model}}ln10000}臼闻。個人猜測這樣改變可能會節(jié)約時間吧鸿吆。
有一點需要注意:transformer中的并行化計算只在encoder中進(jìn)行,在decoder中是不可以并行化計算的述呐。(經(jīng)評論指正惩淳,在訓(xùn)練階段decoder中也是可以進(jìn)行并行化計算的,只是在預(yù)測階段不可以進(jìn)行并行化計算)decoder中attention結(jié)構(gòu)的K和V是不變的乓搬,但是output embedding是變化的思犁,依賴于上一時刻decoder的輸出代虾。
接下來再來講下transformer中的attention結(jié)構(gòu)。Transformer中最基本的attention結(jié)構(gòu)是Scaled Dot-Product Attention激蹲,結(jié)構(gòu)如下:

Scaled Dot-Product Attention結(jié)構(gòu).png
其中棉磨,Q和K的列數(shù)是一樣的,而K和V的行數(shù)是一樣的学辱。Attention函數(shù)可以理解為將一個query和一個(key, value)對映射成一個輸出乘瓤,query和key進(jìn)行矩陣相乘得到相應(yīng)的weight,然后再將weight和value進(jìn)行矩陣相乘得到最終的輸出项郊。Transformer中用的是Multi-Head Attention馅扣,其實也是Scaled Dot-Product Attention組成的斟赚,Multi-Head Attention結(jié)構(gòu)圖如下:
Multi-Head Attention結(jié)構(gòu).png
其實Multi-Head Attention就是由多組Scaled Dot-Product Attention組成着降,transformer中先將高維的Q、K拗军、V映射到多個低維空間中任洞,在每個低維空間中進(jìn)行attention操作得到一個低維的輸出,然后再將這些低維輸出拼接起來得到和原始維度一樣的輸出发侵。這樣做的好處在于不增加計算量的情況下使得attention的效果更好了交掏。下面是Multi-Head Attention的PyTorch實現(xiàn)代碼
Multi-Head Attention實現(xiàn)代碼.png
其中self.linears的作用就是將原始的Q、K刃鳄、V映射到不同的低維空間中盅弛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叔锐,隨后出現(xiàn)的幾起案子挪鹏,更是在濱河造成了極大的恐慌,老刑警劉巖愉烙,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讨盒,死亡現(xiàn)場離奇詭異,居然都是意外死亡步责,警方通過查閱死者的電腦和手機(jī)返顺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓肯,“玉大人遂鹊,你說我怎么就攤上這事≌岚” “怎么了秉扑?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長气忠。 經(jīng)常有香客問我邻储,道長赋咽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任吨娜,我火速辦了婚禮脓匿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宦赠。我一直安慰自己陪毡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布勾扭。 她就那樣靜靜地躺著毡琉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妙色。 梳的紋絲不亂的頭發(fā)上桅滋,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音身辨,去河邊找鬼丐谋。 笑死,一個胖子當(dāng)著我的面吹牛煌珊,可吹牛的內(nèi)容都是我干的号俐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼定庵,長吁一口氣:“原來是場噩夢啊……” “哼吏饿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔬浙,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤猪落,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后敛滋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體许布,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年绎晃,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜜唾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡庶艾,死狀恐怖袁余,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咱揍,我是刑警寧澤颖榜,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響掩完,放射性物質(zhì)發(fā)生泄漏噪漾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一且蓬、第九天 我趴在偏房一處隱蔽的房頂上張望欣硼。 院中可真熱鬧,春花似錦恶阴、人聲如沸诈胜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焦匈。三九已至,卻和暖如春昵仅,著一層夾襖步出監(jiān)牢的瞬間缓熟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工岩饼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荚虚,地道東北人薛夜。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓籍茧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梯澜。 傳聞我的和親對象是個殘疾皇子寞冯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容