Transformer——實現(xiàn)“序列to序列”的轉(zhuǎn)換

1 Transformer 概述

在機器學(xué)習(xí)中钳降,我們有很多任務(wù)都是 “序列to序列” 的形式漾根,比如語音識別泰涂、機器翻譯、文本標注等等辐怕。而且在這些任務(wù)中逼蒙,輸入序列和輸出序列的長度都是不定的寄疏,如么如何實現(xiàn)這種序列的轉(zhuǎn)換呢是牢?這就要用到一個很常見的網(wǎng)絡(luò)架構(gòu)— transformer 。transformer的一般結(jié)構(gòu)如下圖所示陕截,包括編碼(Encoder)和解碼(Decoder)兩個部分驳棱。Encoder對輸入序列進行編碼輸出一個序列,轉(zhuǎn)交給Decoder,Decoder對這個序列進行解碼农曲,輸出我們需要的序列社搅。

tansformer一般結(jié)構(gòu)

2 Transformer的Encoder

首先,我們來看一下transformer的Encoder架構(gòu)是怎樣的。transformer對輸入序列進行編碼生成另一個長度相等的序列罚渐,如下圖所示却汉,這里假設(shè)輸入序列是向量x_1、x_2荷并、x_3、x_4青扔,對應(yīng)的輸出是向量h_1源织、h_2、h_3微猖、h_4谈息。編碼的目的實際上就要考慮序列的全局并聚焦重點,所以Encoder的核心就是自注意力機制凛剥,但不僅僅只有自注意力機制侠仇。

編碼器

Encoder由多個Block組成,每個Block又由自注意力(self-attention)網(wǎng)絡(luò)和全連接(full-connected)組成犁珠。向量x_1逻炊、x_2、x_3犁享、x_4通過自注意力網(wǎng)絡(luò)后生成四個向量余素,這些向量是考慮了序列全局的,然后每個向量再通過一個全連接網(wǎng)絡(luò)進行一次變換得到四個向量炊昆,通過幾次Block后才輸出向量h_1桨吊、h_2、h_3凤巨、h_4视乐。
編碼器由多個block組成

實際上,Block的計算還有一些細節(jié)敢茁,如下圖所示佑淀。具體包括兩個方面:

  • x_1、x_2卷要、x_3渣聚、x_4通過自注意力網(wǎng)絡(luò)后并不是直接輸入到全連接層。首先僧叉,自注意力網(wǎng)絡(luò)的輸出向量與它的輸入向量進行了求和奕枝。這種操作在深度網(wǎng)絡(luò)中很常見,有一個專門的名字叫做殘差(residual)瓶堕,殘差操作的目的是為了防止梯度消失和網(wǎng)絡(luò)退化隘道。其次,經(jīng)過殘差操作后,進行了一次Layer normalization谭梗,把向量轉(zhuǎn)化成均值為0方差為1的向量忘晤,即歸一化。計算過程如下圖所示(下面這個圖有點錯誤激捏,公式應(yīng)當是x'_i=\frac{x_i-m}{\sigma })设塔。Layer normalization是為了防止向量落在激活函數(shù)的飽和區(qū)。經(jīng)過上述兩個過程的計算后远舅,才得到全連接層的輸入闰蛔。
  • 全連接層的輸出也不是直接輸出到下一層Block,同樣經(jīng)過了殘差和Layer normalization的操作图柏。
    Block中的殘差和Layer normalization操作

    總結(jié)起來序六,Encoder的全部計算過程如下圖所示,在一個Block中蚤吹,首先經(jīng)過一個Multi-Head Attention層例诀,然后進行一次殘差(residual)Layer normalization操作,然后輸入到一個全連接層(即Feed Forward)裁着,重復(fù)多個Block最后輸出一個序列繁涂。
    下面這個圖值得注意的一個地方是輸入向量并不是直接輸入到Encoder,而是疊加了一個位置編碼(Positional Encoding)跨算。所謂位置編碼是指將序列中某個向量所處的位置進行編碼爆土,生成一個與向量長度一樣的向量,這對于自然語言處理是很重要的诸蚕。例如進行此行標注的時候步势,句首的詞是動詞的可能性很小。位置編碼的方式有很多背犯,現(xiàn)在也有很多文章在研究一些新的方法坏瘩,感興趣的可以去研究一下。
    Encoder的全貌

3 Transformer的Decoder

Encoder對輸入進行編碼后輸出一個序列漠魏,Decoder則要根據(jù)這個序列輸出我們最后想要的一個序列倔矾。以語音識別為例,我們對著機器說柱锹,“機器學(xué)習(xí)”哪自。Encoder對我們的語音進行編碼生成一個序列,Decoder就是要根據(jù)這個序列輸出“機器學(xué)習(xí)”幾個字禁熏,那么是如何實現(xiàn)的呢壤巷?

3.1 Decoder的自回歸(Autoregressive)機制。

首先瞧毙,我們要設(shè)置一個特殊的符號“Begin”作為輸入胧华,Decoder結(jié)合Encoder輸出的序列和“Begin"這個輸入產(chǎn)生一個向量寄症。這個向量的長度非常長,長到和字典的大小相同矩动。假如我們的字典是中文常用詞3500字有巧,那么這個向量的長度就是3500。這個向量再經(jīng)過一個softmax操作悲没,輸出一個概率分布篮迎,概率最大的那個字就是“Begin”的輸出。比如上面這個例子“機”字的概率最大檀训,那么就輸出“機”柑潦。


image.png

輸出“機”之后,再將“機”作為Decoder新的輸入峻凫。這樣,Decoder的輸入除了“Begin”之外览露,又多了一個“機”荧琼。通過Decoder和softmax之后,又輸出一個“器”差牛,然后又將“器”作為新的輸入命锄。重復(fù)上述過程,周而復(fù)始的將新的輸出作為新的輸入偏化,又輸出新的輸出脐恩。


image.png

但是還有一個重要的問題,機器不能這么一直操作下去吧侦讨?在何時停止這個循環(huán)呢驶冒?這就需要在字典中再添加一個特殊的符號“End”。當輸出一個“End”時韵卤,就停止上述循環(huán)骗污,輸出完整的序列。這樣一個過程就是Decoder的自回歸工作機制沈条。那么Decoder的內(nèi)部結(jié)構(gòu)到底是怎樣的呢需忿?
image.png

3.2 Decoder的結(jié)構(gòu)

Decoder的內(nèi)部結(jié)構(gòu)如下圖所示,可以看出Decoder和Encoder的結(jié)構(gòu)非常相似蜡歹,但是有些許不同:首先在第一個自注意力層中多了一個"Masked"的字樣屋厘,其次多了一個自注意力層

image.png

首先月而,我們來看看第一個自注意力層多出個“Masked"是怎么回事汗洒。 前面講自注意力機制的時候,我們講輸出b^1是考慮了輸入序列全局的景鼠,即考慮了a^1仲翎、a^2痹扇、a^3、a^4所有向量的信息,如下圖所示溯香。
看到序列的全局

但是注意到這里在輸出”機“的時候鲫构,只能看到"Begin"一個向量,后面的向量是看不到的玫坛。對應(yīng)的结笨,如果我們假設(shè)”機“就是b^1,那么b^1只能利用a^1的信息湿镀,沒法利用a^2炕吸、a^3、a^4的信息勉痴。同理赫模,在輸出“器”的時候,只能看到"Begin蒸矛、機"兩個向量瀑罗,后面的向量也看不到,對應(yīng)的b^2就只能利用a^1雏掠、a^2的信息斩祭。以此類推,b^3就只能利用a^1乡话、a^2摧玫、a^3的信息,b^4能利用a^1、a^2绑青、a^3诬像、a^4的信息。
只能看到序列的部分信息

因此时迫,Decoder的第一層自注意力網(wǎng)絡(luò)多了一個“masked”颅停。所謂“masked”就是蓋起來的意思。比如在輸出b^2時掠拳,是要把a^3癞揉、a^4蓋起來的,也就是將\alpha^{'}_{2,3}溺欧、\alpha^{'}_{2,4}設(shè)為0即可喊熟,如下圖所示,
image.png

現(xiàn)在我們已經(jīng)理解了“masked”是怎么回事姐刁,接下來再看看多出一個自注意力層是怎么回事芥牌。 從下面這個圖可以看出,多出來的自注意力層是連接Encoder和Decoder的橋梁聂使,這一層稱為“Cross attention”壁拉。
image.png

Cross attention的工作機制如下圖所示谬俄,具體過程是:Decoder的輸入通過masked self-attention層之后輸出一個向量,該向量乘以一個轉(zhuǎn)換矩陣得到一個向量q弃理。Encoder的輸出序列乘以轉(zhuǎn)換矩陣分別得到K矩陣和V矩陣溃论,這里的q再與上述K矩陣和V矩陣進行交叉計算得到一個新的向量v。因此痘昌,Cross-Attention是利用Encoder自己的輸入產(chǎn)生query向量q钥勋,然后再去Encoder的輸出序列中抽取信息,以作為輸出辆苔。
image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末算灸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子驻啤,更是在濱河造成了極大的恐慌菲驴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骑冗,死亡現(xiàn)場離奇詭異谢翎,居然都是意外死亡,警方通過查閱死者的電腦和手機沐旨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榨婆,“玉大人磁携,你說我怎么就攤上這事×挤纾” “怎么了谊迄?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烟央。 經(jīng)常有香客問我统诺,道長,這世上最難降的妖魔是什么疑俭? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任粮呢,我火速辦了婚禮,結(jié)果婚禮上钞艇,老公的妹妹穿的比我還像新娘啄寡。我一直安慰自己,他們只是感情好哩照,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布挺物。 她就那樣靜靜地躺著,像睡著了一般飘弧。 火紅的嫁衣襯著肌膚如雪识藤。 梳的紋絲不亂的頭發(fā)上砚著,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音痴昧,去河邊找鬼稽穆。 笑死,一個胖子當著我的面吹牛剪个,可吹牛的內(nèi)容都是我干的秧骑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼扣囊,長吁一口氣:“原來是場噩夢啊……” “哼乎折!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侵歇,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤骂澄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惕虑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坟冲,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年溃蔫,在試婚紗的時候發(fā)現(xiàn)自己被綠了健提。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡伟叛,死狀恐怖私痹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情统刮,我是刑警寧澤紊遵,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站侥蒙,受9級特大地震影響暗膜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鞭衩,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一学搜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧醋旦,春花似錦恒水、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捂人,卻和暖如春御雕,著一層夾襖步出監(jiān)牢的瞬間矢沿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工酸纲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捣鲸,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓闽坡,卻偏偏與公主長得像栽惶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疾嗅,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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