[自然語(yǔ)言處理-進(jìn)階]一、Transformer

學(xué)習(xí)路線參考:

https://blog.51cto.com/u_15298598/3121189

https://github.com/Ailln/nlp-roadmap

https://juejin.cn/post/7113066539053482021

https://zhuanlan.zhihu.com/p/100567371

https://cloud.tencent.com/developer/article/1884740

本節(jié)學(xué)習(xí)使用工具&閱讀文章:

https://arxiv.org/pdf/1706.03762.pdf

http://jalammar.github.io/illustrated-transformer/

https://zhuanlan.zhihu.com/p/46990010

https://www.cnblogs.com/baobaotql/p/11662720.html

https://zhuanlan.zhihu.com/p/80377698

https://zhuanlan.zhihu.com/p/372279569

https://blog.csdn.net/guofei_fly/article/details/105601979

  1. Transformer概述

    2017 年,Google 機(jī)器翻譯團(tuán)隊(duì)發(fā)表的《Attention is All You Need》中提出了Transformer模型,完全拋棄了RNN和CNN等網(wǎng)絡(luò)結(jié)構(gòu),僅僅采用Attention機(jī)制來進(jìn)行機(jī)器翻譯任務(wù),取得了很好的效果。

  1. 模型結(jié)構(gòu)總覽

    Transformer結(jié)構(gòu)

模型分為兩大部分:Encoder與Decoder。

  1. 自編碼器

    這個(gè)結(jié)構(gòu)最早在自編碼器中出現(xiàn)。自編碼器的原理很簡(jiǎn)單,可以理解為一個(gè)試圖去還原其原始輸入的系統(tǒng)。在深度學(xué)習(xí)中,自動(dòng)編碼器是一種無監(jiān)督的神經(jīng)網(wǎng)絡(luò)模型,它可以學(xué)習(xí)到輸入數(shù)據(jù)的隱含特征,這稱為編碼(coding),同時(shí)用學(xué)習(xí)到的新特征可以重構(gòu)出原始輸入數(shù)據(jù),稱之為解碼(decoding)。

    從直觀上來看,自動(dòng)編碼器可以用于特征降維,類似主成分分析PCA,但是其相比PCA其性能更強(qiáng),這是由于神經(jīng)網(wǎng)絡(luò)模型可以提取更有效的新特征。除了進(jìn)行特征降維,自動(dòng)編碼器學(xué)習(xí)到的新特征可以送入有監(jiān)督學(xué)習(xí)模型中,所以自動(dòng)編碼器可以起到特征提取器的作用。

    自動(dòng)編碼器原理

    如圖所示,將手寫數(shù)字圖片進(jìn)行編碼,編碼后生成的 ?1, ?2, ?3, ?4, ?5, ?6 較完整的保留了原始圖像的典型特征,因此可較容易地通過解碼恢復(fù)出原始圖像。

    自編碼器三大特點(diǎn):

    • 自動(dòng)編碼器是數(shù)據(jù)相關(guān)的(data-specific 或 data-dependent),這意味著自動(dòng)編碼器只能壓縮那些與訓(xùn)練數(shù)據(jù)類似的數(shù)據(jù)。比如,使用人臉訓(xùn)練出來的自動(dòng)編碼器在壓縮別的圖片,比如樹木時(shí)性能很差,因?yàn)樗鼘W(xué)習(xí)到的特征是與人臉相關(guān)的。
    • 自動(dòng)編碼器是有損的,意思是解壓縮的輸出與原來的輸入相比是退化的,MP3,JPEG等壓縮算法也是如此。這與無損壓縮算法不同。
    • 自動(dòng)編碼器是從數(shù)據(jù)樣本中自動(dòng)學(xué)習(xí)的,這意味著很容易對(duì)指定類的輸入訓(xùn)練出一種特定的編碼器,而不需要完成任何新工作。
  2. Transformer的編碼器-解碼器結(jié)構(gòu)

    在Transformer中,Encoder將輸入讀進(jìn)去,Decoder進(jìn)行輸出。二者的結(jié)合方式如下:

    編碼器和解碼器的結(jié)合方式

    在論文中,編碼組件由六個(gè)Encoder組成,解碼組件由六個(gè)Decoder組成。Encoder的輸出會(huì)和每一層的Decoder進(jìn)行結(jié)合。

  3. 輸入前的處理

    • Input Embedding

      隨機(jī)初始化詞向量,

    • 位置編碼

      經(jīng)過 word embedding,我們獲得了詞與詞之間關(guān)系的表達(dá)形式,但是詞在句子中的位置關(guān)系還無法體現(xiàn)。由于 Transformer 是并行地處理句子中的所有詞,因此需要加入詞在句子中的位置信息。

      Transformer使用了位置編碼,利用一定的公式計(jì)算詞的位置信息,隨后與詞向量相加就得到了輸入。位置編碼計(jì)算方法如下:

      位置編碼計(jì)算方法
  1. Transformer的編碼器

    Transformer的編碼器
    • Self-Attention

      Self-attention是一種attention機(jī)制,用來計(jì)算一個(gè)句子(中的token)的represetation,其包含了這個(gè)句子中token不同位置的關(guān)系。

      第一步:從每個(gè)編碼器的輸入向量(在本例中是每個(gè)詞的嵌入)創(chuàng)建三個(gè)向量。因此,對(duì)于每個(gè)單詞,我們創(chuàng)建一個(gè)Q向量、一個(gè)K向量和一個(gè)V向量。這些向量是通過將嵌入向量乘以我們?cè)?img class="math-inline" src="https://math.jianshu.com/math?formula=W%5EQ%2C%20W%5EK%2CW%5EV" alt="W^Q, W^K,W^V" mathimg="1">三個(gè)矩陣而創(chuàng)建的。這三個(gè)矩陣是可學(xué)習(xí)的。

      計(jì)算Q、K、V向量

      第二步:計(jì)算一個(gè)score。假設(shè)我們正在計(jì)算本例中第一個(gè)詞“Thinking”的自注意力。我們需要根據(jù)這個(gè)詞對(duì)輸入句子的每個(gè)詞進(jìn)行評(píng)分。當(dāng)我們?cè)谔囟ㄎ恢脤?duì)單詞進(jìn)行編碼時(shí),分?jǐn)?shù)決定了將多少注意力放在輸入句子的其他部分。分?jǐn)?shù)是通過Q與我們正在評(píng)分的相應(yīng)單詞的K的點(diǎn)積計(jì)算得出的。如圖所示:

      計(jì)算得分

      第三步:將分?jǐn)?shù)除以 8(目的是讓梯度更穩(wěn)定),然后通過 softmax 操作傳遞結(jié)果。Softmax 對(duì)分?jǐn)?shù)進(jìn)行歸一化處理,使它們都為正且加起來為 1。

      self-attention中的Softmax.png

      第四步:每個(gè)V乘以 softmax 分?jǐn)?shù)(準(zhǔn)備將它們相加)。這里的想法是保持我們想要關(guān)注的單詞的值不變,并忽略不相關(guān)的單詞。隨后對(duì)加權(quán)值向量求和,產(chǎn)生自注意層的輸出。

      完整流程

      自注意力計(jì)算到此結(jié)束,生成的向量是我們可以發(fā)送到前饋神經(jīng)網(wǎng)絡(luò)的向量。

      • 多頭自注意力

        一組attention的權(quán)重參數(shù)只能夠表達(dá)一種詞與詞之間的關(guān)系,在nlp任務(wù)中,一種關(guān)系可能不足以表達(dá)。所以通過配置多組attention權(quán)重矩陣,最后通過線性組合,來綜合表達(dá)。

        多頭自注意力

        對(duì)于多頭注意力,我們?yōu)槊總€(gè)頭維護(hù)單獨(dú)的 Q/K/V 權(quán)重矩陣,從而產(chǎn)生不同的 Q/K/V 矩陣。我們最終會(huì)得到八個(gè)不同的 Z 矩陣,隨后連接這些矩陣,然后將它們乘以一個(gè)額外的權(quán)重矩陣 W^O,得到最終的Z矩陣。

      整個(gè)Multi headed Self-Attention層可以描述為下圖:

      Multi headed Self-Attention
    • Feed Forward Neural Network

      在進(jìn)行了Attention操作之后,對(duì)向量先使用一個(gè)線性變換,再針對(duì)該線性變換的輸出使用RELU函數(shù),最后再針對(duì)RELU函數(shù)的輸出使用一個(gè)線性變換。其效果與加上一層卷積核大小為1*1的CNN是一樣的。

  2. Add&Normalize

    每個(gè)編碼器中的每個(gè)子層周圍都有一個(gè)殘差連接,然后是LayerNormalize步驟。

    Add&Normalize

Layer Normalization是作用于每個(gè)時(shí)序樣本的歸一化方法,其作用主要體現(xiàn)在:

  • 作用于非線性激活函數(shù)前,能夠?qū)⑤斎肜x激活函數(shù)非飽(防止梯度消失)和非線性區(qū)域(保證非線性);
  • 保證樣本輸入的同分布。

在CNN類模型中,常用的歸一化方法是Batch Normalization,即統(tǒng)計(jì)和學(xué)習(xí)跨樣本各通道內(nèi)的歸一化方法;RNN類模型中,或者更一般的講,在序列問題中,由于序列的天然時(shí)序性以及序列長(zhǎng)度的不一致性,采用Layer Normalization更為合理。

Transformer在各層的MultiHead-Attention和FFN中均采用了Layer Normalization的技術(shù),同時(shí)配以skip-connection,以提高信息的流通通道,提高模型的可訓(xùn)練性。

  1. Transformer的解碼器

    編碼器與解碼器

    解碼器的組件與編碼器基本完全相同,但有一定的區(qū)別:

    • Self-Attention:也是計(jì)算輸入的Self-Attention,但是因?yàn)槭巧蛇^程,因此在時(shí)刻 i 的時(shí)候,大于 i 的時(shí)刻都沒有結(jié)果,只有小于 i 的時(shí)刻有結(jié)果,因此需要做Mask。因此這里實(shí)際上是Masked multi-head Self-Attention。
    • 增加了一個(gè)Encoder-Decoder Attention。該層同樣因?yàn)橹荒塬@取到當(dāng)前時(shí)刻之前的輸入,因此只對(duì)時(shí)刻 t 之前的時(shí)刻輸入進(jìn)行Attention計(jì)算,需要做Mask。同時(shí)該層的K和V是由Encoder提供的,而非點(diǎn)積得來的。
    Transformer工作流程1
    Transformer工作流程2
  1. Linear + Softmax

    線性變換層是一個(gè)簡(jiǎn)單的全連接神經(jīng)網(wǎng)絡(luò),它可以把解碼組件產(chǎn)生的向量投射到一個(gè)比它大得多的、被稱作對(duì)數(shù)幾率(logits)的向量里。不妨假設(shè)我們的模型從訓(xùn)練集中學(xué)習(xí)一萬個(gè)不同的英語(yǔ)單詞(我們模型的“輸出詞表”)。因此對(duì)數(shù)幾率向量為一萬個(gè)單元格長(zhǎng)度的向量——每個(gè)單元格對(duì)應(yīng)某一個(gè)單詞的分?jǐn)?shù)。

    接下來的Softmax 層便會(huì)把那些分?jǐn)?shù)變成概率(都為正數(shù)、上限1.0)。概率最高的單元格被選中,并且它對(duì)應(yīng)的單詞被作為這個(gè)時(shí)間步的輸出,同時(shí)將Decoder的堆棧輸出作為輸入,從底部開始,最終進(jìn)行單詞預(yù)測(cè)。

  2. Transformer的優(yōu)勢(shì)

    • 長(zhǎng)距離的信息捕捉。雖然RNN通過gate的引入,能在一定上改善長(zhǎng)距離依賴,但自回歸模型的梯度消失/爆炸仍限制了RNN模型的使用。而CNN模型的專場(chǎng)在于捕捉local特征,雖然可以通過空洞卷積和層次化的結(jié)構(gòu)擴(kuò)大感受野,但對(duì)于長(zhǎng)距離的信息捕捉仍然較弱。而self-attention直接擺脫了距離的限制,能夠很好的捕捉遠(yuǎn)距離的文本信息關(guān)系。
    • 計(jì)算上的優(yōu)勢(shì)。RNN的另外一大缺點(diǎn)在于自回歸模型無法實(shí)現(xiàn)并行計(jì)算,而self-attention的自交互式計(jì)算則沒有這個(gè)問題,可以非常方便的進(jìn)行并行計(jì)算。此外,一般embedding的維度是大于文本長(zhǎng)度的,所以transformre的計(jì)算量更小。
    • 性能上的優(yōu)勢(shì)。由于Transformer的self-attention對(duì)每?jī)蓚€(gè)token間的信息進(jìn)行了交互,同時(shí)multi-head的方式也能夠從各sub-space捕獲更多的特征細(xì)節(jié),所以用Transformer作為特征抽取器的模型在各種下游任務(wù)上的表現(xiàn)均明顯優(yōu)于傳統(tǒng)的CNN和RNN模型。所以,Transformer在后續(xù)GPT、Bert、XLNet等預(yù)訓(xùn)練模型上的大火也就不難理解了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容