transformer

  • 最近transformer的結(jié)構(gòu)改進(jìn)論文挺多的略板,總結(jié)一下亭螟。
  • transformer是一個(gè)seq2seq模型小渊。

從RNN談起

  • 缺點(diǎn):不能處理過(guò)長(zhǎng)的句子起暮。


  • LSTM可以一定程度上緩解這個(gè)問(wèn)題,因?yàn)樗杏洃泦卧σ桑约翱梢赃x擇什么時(shí)候進(jìn)行遺忘的門控機(jī)制危融,但是還是不能處理過(guò)長(zhǎng)句子中的依賴問(wèn)題(大約能記住30-40個(gè)詞之間的依賴關(guān)系,普通的RNN只能記住5-6個(gè)詞的依賴關(guān)系)雷袋。
  • RNN-based model還有一個(gè)問(wèn)題就是encoder的時(shí)候不能并行吉殃,可以從上面的圖中看到,只有當(dāng)單詞x0處理完成了以后楷怒,才能處理單詞x1蛋勺。

attention 機(jī)制

  • 為了解決長(zhǎng)時(shí)間長(zhǎng)序列之間的單詞依賴問(wèn)題,引入了attention機(jī)制鸠删,就是在處理句子的時(shí)候抱完,不再是一個(gè)句子處理完成以后只取最后一個(gè)hidden state當(dāng)做句子的表示丟給decoder,而是每個(gè)時(shí)刻的hidden state刃泡,decoder都可以按其所需對(duì)hidden state進(jìn)行加權(quán)訪問(wèn)巧娱。
  • 可以看到之前的seq2seq模型decoder的時(shí)候只獲取了encoder的最后一個(gè)狀態(tài),加入了attention機(jī)制以后就可以獲取每一個(gè)時(shí)間步的信息了烘贴。

CNN-based model

  • 可以想到CNN還是可以解決RNN的不足的禁添,因?yàn)槭紫?code>CNN本來(lái)就是并行做卷積的因此速度encode速度比RNN快的多,其次CNN可以通過(guò)卷積核捕獲短期依賴桨踪,然后通過(guò)疊加層數(shù)捕獲長(zhǎng)期依賴老翘。比如下面的wavenet的處理方式。
  • 既然CNNAttention機(jī)制這么好锻离,那么把兩者結(jié)合起來(lái)豈不是天下無(wú)敵铺峭?是的這就是Transfomer

Transformers

  • Transformers中用的是self-attention

  • 首先我們看一下transfomer的整體架構(gòu),也是seq2seq模型汽纠,普通的transfomer疊了6層卫键,而big transfomer疊了12層。

  • 每一個(gè)encoder都是由兩部分組成的虱朵,self-attention 幫助句子中的每個(gè)單詞建立依賴關(guān)系莉炉,而且僅僅是使用self-attention來(lái)建立聯(lián)系的啤呼,而feed-forward層是每一個(gè)token都是單獨(dú)向前的(就是一個(gè)非線性層),因此不捕獲token之間的依賴關(guān)系呢袱,同時(shí)不同tokenfeed forward可以并行。

  • decoder 還有一個(gè)多于的attention層翅敌,幫助decoder集中于輸入句子中的特定的部分羞福。

self-attention

  • 根據(jù)三個(gè)不同的矩陣得到,q,k,v蚯涮。(當(dāng)然有一種self-attention是不乘矩陣的直接對(duì)embedding的矩陣進(jìn)行操作治专,self-attention得到的是embedding * embedding轉(zhuǎn)置* embedding,這樣的好處是效果不錯(cuò)也沒(méi)有額外的參數(shù) )
  • self-attention的實(shí)現(xiàn)方式遭顶。

multi-head attention

  • linear層其實(shí)就是一個(gè)大矩陣张峰,embedding matrix的維度是seqLen*embedding dim ,而K棒旗,Q喘批,V對(duì)應(yīng)的W矩陣(Wk,Wq铣揉,Wv)size都是embedding dim * hidden size那么 KQV矩陣的sizeseqLen * hidden size饶深。multi-head attention和原始的attention的區(qū)別是,原始的attention只有一組W矩陣逛拱,現(xiàn)在的multi-head attention是有多組敌厘,常用的設(shè)置是將hidden size 設(shè)置為原來(lái)的1/n,比如原來(lái)的hidden size512維朽合,有8個(gè)head那么現(xiàn)在就有8W矩陣各自的hiddensize64俱两,這樣QKV矩陣的維度是64* 512(原來(lái)是512*512)但是得到的Z尺寸還是一樣的依然是seqLen*512,然后將8個(gè)Z concat起來(lái)過(guò)一個(gè)linear(就是乘以一個(gè)4096*512的矩陣)得到seqlen*512的最終的state曹步。(那個(gè) hidden state變成1/n也不一定是效果最好的宪彩,你可以設(shè)置成其他值)
  • 這個(gè)操作和CNN里面使用多個(gè)卷積核是一樣一樣的。

  • 可以看到不同的head注意到不同的位置箭窜,相當(dāng)于不同卷積核捕獲不同的特征毯焕。

表示序列的位置信息使用Positional Encoding

  • 因?yàn)閮H僅使用self-attention的話就相當(dāng)于是一個(gè)詞袋模型,所以我們需要引入表示位置信息的編碼磺樱。
  • 看到源代碼里面positional encoding實(shí)現(xiàn)方式纳猫,是一個(gè)比較復(fù)雜的三角函數(shù),naacl18上有一篇文章論文使用了相對(duì)位置的positional encoding效果提升了0.6個(gè)bleu竹捉,總之這個(gè)positional encoding是一個(gè)比較ugly的東西芜辕,大家都想改進(jìn)他,但是卻苦于沒(méi)有好的方法块差。

Transformer中的殘差連接

  • encoder的每個(gè)sub layer之間(一個(gè)self-attention或者一個(gè)feed forward算一個(gè)sublayer)是有殘差連接的侵续,他們大概長(zhǎng)這樣
  • 所謂的殘差連接實(shí)現(xiàn)的時(shí)候只不過(guò)是把原來(lái)的x1保存下來(lái)倔丈,然后做layernorm的時(shí)候和下面模塊中傳遞進(jìn)來(lái)的z加起來(lái)即可。
  • decoder中同樣也有殘差連接

decoder部分

  • encoder的輸入是單詞的embedding状蜗,輸出是一組attentionK 矩陣和V矩陣需五,這樣decoder可以用到這個(gè)attention矩陣就可以更好的獲取輸入句子信息。(embedding matrix 各自乘以一個(gè)矩陣得到KV
  • 可以看到decoder的時(shí)候轧坎,也是一個(gè)時(shí)間步一個(gè)時(shí)間步運(yùn)行的宏邮,因此decoder的時(shí)候沒(méi)有加速的(還是自回歸模型,現(xiàn)在比較活的非自回歸模型就是解決這個(gè)問(wèn)題的缸血,但是效果還是不能比)蜜氨,而encoder的時(shí)候是并行的,KV矩陣是最終6層以后得到的embedding各自乘以一個(gè)矩陣KV
  • 值得注意的是decoder中的self-attention機(jī)制和是不同的捎泻,因?yàn)樯尚碌膯卧~的時(shí)候只能看到前面已經(jīng)生成過(guò)單詞的信息飒炎,因此需要用mask擋住后面的位置(設(shè)置為-inf
  • encoder-decoder attention 層的work方式和multihead self-attention方式是很像的,只不過(guò)使用的Queries矩陣來(lái)自下面層的輸入笆豁,而KeysValues Matrix用的是的encoder產(chǎn)生的郎汪。
  • 最后的softmax層:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闯狱,隨后出現(xiàn)的幾起案子怒竿,更是在濱河造成了極大的恐慌,老刑警劉巖扩氢,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕驰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡录豺,警方通過(guò)查閱死者的電腦和手機(jī)朦肘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)双饥,“玉大人媒抠,你說(shuō)我怎么就攤上這事∮交ǎ” “怎么了趴生?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)昏翰。 經(jīng)常有香客問(wèn)我苍匆,道長(zhǎng),這世上最難降的妖魔是什么棚菊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任浸踩,我火速辦了婚禮,結(jié)果婚禮上统求,老公的妹妹穿的比我還像新娘检碗。我一直安慰自己据块,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布折剃。 她就那樣靜靜地躺著另假,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怕犁。 梳的紋絲不亂的頭發(fā)上浪谴,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音因苹,去河邊找鬼。 笑死篇恒,一個(gè)胖子當(dāng)著我的面吹牛扶檐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胁艰,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼款筑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腾么?” 一聲冷哼從身側(cè)響起奈梳,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎解虱,沒(méi)想到半個(gè)月后攘须,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殴泰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年于宙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悍汛。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捞魁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出离咐,到底是詐尸還是另有隱情谱俭,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布宵蛀,位于F島的核電站昆著,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏术陶。R本人自食惡果不足惜宣吱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞳别。 院中可真熱鬧征候,春花似錦杭攻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至跑揉,卻和暖如春锅睛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背历谍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工现拒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人望侈。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓印蔬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脱衙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侥猬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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