【綜述專欄】十分鐘理解Transformer

2021-12-26 人工智慧前沿講習

收錄於話題 #綜述專欄 171個

在科學研究中,從方法論上來講,都應「先見森林,再見樹木」。當前,人工智慧學術研究方興未艾,技術迅猛發展,可謂萬木爭榮,日新月異。對於AI從業者來說,在廣袤的知識森林中,系統梳理脈絡,才能更好地把握趨勢。為此,我們精選國內外優秀的綜述文章,開闢「綜述專欄」,敬請關注。

地址:https://zhuanlan.zhihu.com/p/82312421Transformer是一個利用注意力機制來提高模型訓練速度的模型。關於注意力機制可以參看這篇文章(https://zhuanlan.zhihu.com/p/52119092),trasnformer可以說是完全基於自注意力機制的一個深度學習模型,因為它適用於並行化計算,和它本身模型的複雜程度導致它在精度和性能上都要高於之前流行的RNN循環神經網絡。你可以簡單理解為它是一個黑盒子,當我們在做文本翻譯任務是,我輸入進去一個中文,經過這個黑盒子之後,輸出來翻譯過後的英文。
裡面主要有兩部分組成:Encoder 和 Decoder
當我輸入一個文本的時候,該文本數據會先經過一個叫Encoders的模塊,對該文本進行編碼,然後將編碼後的數據再傳入一個叫Decoders的模塊進行解碼,解碼後就得到了翻譯後的文本,對應的我們稱Encoders為編碼器,Decoders為解碼器。細心的同學可能已經發現了,上圖中的Decoders後邊加了個s,那就代表有多個編碼器了唄,沒錯,這個編碼模塊裡邊,有很多小的編碼器,一般情況下,Encoders裡邊有6個小編碼器,同樣的,Decoders裡邊有6個小解碼器。
我們看到,在編碼部分,每一個的小編碼器的輸入是前一個小編碼器的輸出,而每一個小解碼器的輸入不光是它的前一個解碼器的輸出,還包括了整個編碼部分的輸出。

那麼你可能又該問了,那每一個小編碼器裡邊又是什麼呢?

我們放大一個encoder,發現裡邊的結構是一個自注意力機制加上一個前饋神經網絡。

我們先來看下self-attention是什麼樣子的。

1、首先,self-attention的輸入就是詞向量,即整個模型的最初的輸入是詞向量的形式。那自注意力機制呢,顧名思義就是自己和自己計算一遍注意力,即對每一個輸入的詞向量,我們需要構建self-attention的輸入。在這裡,transformer首先將詞向量乘上三個矩陣,得到三個新的向量,之所以乘上三個矩陣參數而不是直接用原本的詞向量是因為這樣增加更多的參數,提高模型效果。對於輸入X1(機器),乘上三個矩陣後分別得到Q1,K1,V1,同樣的,對於輸入X2(學習),也乘上三個不同的矩陣得到Q2,K2,V2。2、那接下來就要計算注意力得分了,這個得分是通過計算Q與各個單詞的K向量的點積得到的。我們以X1為例,分別將Q1和K1、K2進行點積運算,假設分別得到得分112和96。3、將得分分別除以一個特定數值8(K向量的維度的平方根,通常K向量的維度是64)這能讓梯度更加穩定,則得到結果如下:4、將上述結果進行softmax運算得到,softmax主要將分數標準化,使他們都是正數並且加起來等於1。5、將V向量乘上softmax的結果,這個思想主要是為了保持我們想要關注的單詞的值不變,而掩蓋掉那些不相關的單詞(例如將他們乘上很小的數字)6、將帶權重的各個V向量加起來,至此,產生在這個位置上(第一個單詞)的self-attention層的輸出,其餘位置的self-attention輸出也是同樣的計算方式。還沒有,論文為了進一步細化自注意力機制層,增加了「多頭注意力機制」的概念,這從兩個方面提高了自注意力層的性能。
第一個方面,他擴展了模型關注不同位置的能力,這對翻譯一下句子特別有用,因為我們想知道「it」是指代的哪個單詞。第二個方面,他給了自注意力層多個「表示子空間」。對於多頭自注意力機制,我們不止有一組Q/K/V權重矩陣,而是有多組(論文中使用8組),所以每個編碼器/解碼器使用8個「頭」(可以理解為8個互不幹擾自的注意力機制運算),每一組的Q/K/V都不相同。然後,得到8個不同的權重矩陣Z,每個權重矩陣被用來將輸入向量投射到不同的表示子空間。經過多頭注意力機制後,就會得到多個權重矩陣Z,我們將多個Z進行拼接就得到了self-attention層的輸出:上述我們經過了self-attention層,我們得到了self-attention的輸出,self-attention的輸出即是前饋神經網絡層的輸入,然後前饋神經網絡的輸入只需要一個矩陣就可以了,不需要八個矩陣,所以我們需要把這8個矩陣壓縮成一個,我們怎麼做呢?只需要把這些矩陣拼接起來然後用一個額外的權重矩陣與之相乘即可。接下來就進入了小編碼器裡邊的前饋神經網模塊了,關於前饋神經網絡,網上已經有很多資料,在這裡就不做過多講解了,只需要知道,前饋神經網絡的輸入是self-attention的輸出,即上圖的Z,是一個矩陣,矩陣的維度是(序列長度×D詞向量),之後前饋神經網絡的輸出也是同樣的維度。以上就是一個小編碼器的內部構造了,一個大的編碼部分就是將這個過程重複了6次,最終得到整個編碼部分的輸出。然後再transformer中使用了6個encoder,為了解決梯度消失的問題,在Encoders和Decoder中都是用了殘差神經網絡的結構,即每一個前饋神經網絡的輸入不光包含上述self-attention的輸出Z,還包含最原始的輸入。上述說到的encoder是對輸入(機器學習)進行編碼,使用的是自注意力機制+前饋神經網絡的結構,同樣的,在decoder中使用的也是同樣的結構。也是首先對輸出(machine learning)計算自注意力得分,不同的地方在於,進行過自注意力機制後,將self-attention的輸出再與Decoders模塊的輸出計算一遍注意力機製得分,之後,再進入前饋神經網絡模塊。以上,就講完了Transformer編碼和解碼兩大模塊,那麼我們回歸最初的問題,將「機器學習」翻譯成「machine learing」,解碼器輸出本來是一個浮點型的向量,怎麼轉化成「machine learing」這兩個詞呢?是個工作是最後的線性層接上一個softmax,其中線性層是一個簡單的全連接神經網絡,它將解碼器產生的向量投影到一個更高維度的向量(logits)上,假設我們模型的詞彙表是10000個詞,那麼logits就有10000個維度,每個維度對應一個惟一的詞的得分。之後的softmax層將這些分數轉換為概率。選擇概率最大的維度,並對應地生成與之關聯的單詞作為此時間步的輸出就是最終的輸出啦!!

假設詞彙表維度是6,那麼輸出最大概率詞彙的過程如下:

以上就是Transformer的框架了,但是還有最後一個問題,我們都是到RNN中的每個輸入是時序的,是又先後順序的,但是Transformer整個框架下來並沒有考慮順序信息,這就需要提到另一個概念了:「位置編碼」。Transformer中確實沒有考慮順序信息,那怎麼辦呢,我們可以在輸入中做手腳,把輸入變得有位置信息不就行了,那怎麼把詞向量輸入變成攜帶位置信息的輸入呢?我們可以給每個詞向量加上一個有順序特徵的向量,發現sin和cos函數能夠很好的表達這種特徵,所以通常位置向量用以下公式來表示:最後祭出這張經典的圖,最初看這張圖的時候可能難以理解,希望大家在深入理解Transformer後再看這張圖能夠有更深刻的認識。Transformer就介紹到這裡了,後來的很多經典的模型比如BERT、GPT-2都是基於Transformer的思想。我們有機會再詳細介紹這兩個刷新很多記錄的經典模型。

本文目的在於學術交流,並不代表本公眾號贊同其觀點或對其內容真實性負責,版權歸原作者所有,如有侵權請告知刪除。

分享、點讚、在看,給個三連擊唄!

相關焦點

  • 十分鐘理解Transformer
    你可以簡單理解為它是一個黑盒子,當我們在做文本翻譯任務是,我輸入進去一個中文,經過這個黑盒子之後,輸出來翻譯過後的英文。在這裡,transformer首先將詞向量乘上三個矩陣,得到三個新的向量,之所以乘上三個矩陣參數而不是直接用原本的詞向量是因為這樣增加更多的參數,提高模型效果。對於輸入X1(機器),乘上三個矩陣後分別得到Q1,K1,V1,同樣的,對於輸入X2(學習),也乘上三個不同的矩陣得到Q2,K2,V2。
  • 【綜述專欄】損失函數理解匯總,結合PyTorch和TensorFlow2
    收錄於話題 #綜述專欄
  • 搞懂 Vision Transformer 原理和代碼,看這篇技術綜述就夠了(五)
    我們可以從下圖3來理解,圖3是WMT'14 En-De任務的BLEU score 以及所測量得到的延遲。可以發現針對GPU設計的 HAT (GPU) 在ARM CPU上面就不夠高效,反之亦然。我們先從另一個角度理解Transformer的結構,如下圖20所示。圖20上面這個圖代表Transformer的1個block,現在我們換個角度,用下面這個圖的劃分方式來理解。每個block先通過FFN降低維度,再經過Self-attention處理,再通過FFN升高維度。我們把這種設計成為bottleneck design。
  • Transformer模型細節理解及Tensorflow實現
    >第一部分:Masked Multi-Head Attention 經Sequence Mask處理的多頭注意力層第二部分:Multi-Head Attention第三部分:Feed Forward全連接層以上兩部分都包含Residual Connection殘差連接、Add&Norm數據歸一化二、Transformer模型細節理解
  • 復旦大學邱錫鵬教授:NLP預訓練模型綜述
    近日,復旦大學的邱錫鵬老師等人發布了預訓練模型綜述 Pre-trained Models for Natural Language Processing: A Survey,從背景、分類到應用與前景對 PTMs 做了詳細而全面的調研。
  • 解析Transformer模型
    Softmax後的結果與Value向量相乘,得到最終結果MultiHead-Attention理解了自注意力機制後,我們可以很好的理解多頭注意力機制。簡單來說,多頭注意力其實就是合併了多個自注意力機制的結果
  • NLP集大成之預訓練模型綜述
    image論文標題:Pre-trained Models for Natural Language Processing: A Survey論文連結:https://arxiv.org/pdf/2003.08271.pdf集大成系列會分享各個領域(方面
  • 搞懂 Vision Transformer 原理和代碼,看這篇技術綜述就夠了(十九)
    4) 如果 self.fork_feat==True,即進行檢測,分割實驗,則 forward() 函數隻輸出4個 stage 結束的特徵,並方便 mmdetection 或者 mmsegmentation 調用這個輸出特徵。
  • 用Transformer實現OCR字符識別!
    在CV領域中,transformer除了分類還能做什麼?本文將採用一個單詞識別任務數據集,講解如何使用transformer實現一個簡單的OCR文字識別任務,並從中體會transformer是如何應用到除分類以外更複雜的CV任務中的。
  • Transformer及其變種
    ACT可以調整計算步數,加入ACT機制的Universal transformer被稱為Adaptive universal transformer。以下圖為例,可以看出,引入ACT機制後,模型對於文本中更重要的token會進行更多次數的循環,而對於相對不重要的單詞會減少計算資源的投入。
  • AM綜述:能源納米器件的掃描力探針研究綜述
    近日,受邀在Advanced Materials上撰寫題為「Functional Scanning Force Microscopy for Energy Nanodevices」的綜述文章(DOI:10.1002/adma.201802490)。
  • Transformer 在計算機視覺領域瘋狂「內卷」
    用一種新的注意力近似算法進一步解決它對輸入大小的二次依賴問題,大大降低了內存要求,而內存是 transformer 模型的最大瓶頸。由此,在多個基準數據集上獲得新的 SOTA。方案:將跨解析度 homography estimation(單應性估計)視為一個多模態問題,提出一個嵌入多尺度結構的 local transformer 網絡,明確學習多模態輸入之間的對應關係,即不同解析度的輸入圖像。local transformer 專門針對特徵中的每個位置採用了局部注意圖。
  • Transformer 模型的 PyTorch 實現
    這個東西其實也不複雜,理解了multi-head self-attention你就可以理解multi-head context-attention。這個我們後面會講解。Attention機制在講清楚各種attention之前,我們得先把attention機制說清楚。
  • 搞懂視覺Transformer原理和代碼,看這篇技術綜述就夠了!
    圖23:Decoder過程注意這裡transformer模型訓練和測試的方法不同:測試時: 這裡提供一種個人的理解:這一步在第2節講解transformer的時候已經提到過,因為在self-attention中需要有表示位置的信息,否則你的sequence = "A打了B" 還是sequence = "B打了A"的效果是一樣的。但是transformer encoder這個結構本身卻無法體現出位置信息。
  • 布爾迪厄場域理論研究綜述
    布爾迪厄場域理論研究綜述一、場域場域的概念源自物理學,是為描述重力電磁力等物體相互作用時的場現象而提出的。在布爾迪厄的場域概念中,場域被定義為位置客觀關係的一個網絡或一個形構。布爾迪厄的場域不同於一般的領域,而是由內含力、有生氣的存在。
  • 深入解讀首個萬億級語言模型Switch Transformer
    (1)問題:模型編譯是靜態確定的,計算是動態的,如何確定每一個expert維度;(2)方法:使用capacity factor擴展,太多的容量導致計算和內存消耗增加,太小的容量導致token被放棄計算傳到下一層,結論是經驗性的根據「model quality and speed」的權衡來選擇較低比例「dropped tokens」。
  • 深度解讀Transformer模型
    我相信通過我抽絲剝繭的分析,大家會對Transformer每個部分的作用有一個更加深入的認識,從而對這個模型架構整體的認知上升到一個新的臺階,並且能夠深刻理解Transformer及其延伸工作的動機。本文將按照下面的思路展開0. Transformer整體架構Attention的背景溯源(為什麼要有attention?)
  • Transformer (DETR) 對象檢測實操!
    這留給我們的是C個二維特徵,由於我們將把這些特徵傳遞給一個transformer,每個特徵必須允許編碼器將每個特徵處理為一個序列的方式重新格式化。這是通過將特徵矩陣扁平化為H⋅W向量,然後將每個向量連接起來來實現的。
  • 【要聞轉發】延邊州掃黑除惡專項鬥爭工作綜述
    【要聞轉發】延邊州掃黑除惡專項鬥爭工作綜述 2020-12-21 17:21 來源:澎湃新聞·澎湃號·政務
  • 如何理解 inductive learning 與 transductive learning?
    如何理解這二者呢?我們先看下其關於Inductive的定義:Induction is reasoning from obeserved training cases to gerneral rules, which are then applied to the test cases.