nlp中的Attention注意力機制+Transformer詳解

2022-01-01 AINLP

本文以QA形式對自然語言處理中注意力機制(Attention)進行總結,並對Transformer進行深入解析。

目錄

一、Attention機制剖析
1、為什麼要引入Attention機制?
2、Attention機制有哪些?(怎麼分類?)
3、Attention機制的計算流程是怎樣的?
4、Attention機制的變種有哪些?
5、一種強大的Attention機制:為什麼自注意力模型(self-Attention model)在長距離序列中如此強大?
(1)卷積或循環神經網絡難道不能處理長距離序列嗎?
(2)要解決這種短距離依賴的「局部編碼」問題,從而對輸入序列建立長距離依賴關係,有哪些辦法呢?
(3)自注意力模型(self-Attention model)具體的計算流程是怎樣的呢?
二、Transformer(Attention Is All You Need)詳解
1、Transformer的整體架構是怎樣的?由哪些部分組成?
2、Transformer Encoder 與 Transformer Decoder 有哪些不同?
3、Encoder-Decoder attention 與self-attention mechanism有哪些不同?
4、multi-head self-attention mechanism具體的計算過程是怎樣的?
5、Transformer在GPT和Bert等詞向量預訓練模型中具體是怎麼應用的?有什麼變化?一、Attention機制剖析

1、為什麼要引入Attention機制?

根據通用近似定理,前饋網絡和循環網絡都有很強的能力。但為什麼還要引入注意力機制呢?

可以藉助人腦處理信息過載的方式,例如Attention機制可以提高神經網絡處理信息的能力。

2、Attention機制有哪些?(怎麼分類?)

當用神經網絡來處理大量的輸入信息時,也可以借鑑人腦的注意力機制,只 選擇一些關鍵的信息輸入進行處理,來提高神經網絡的效率。按照認知神經學中的注意力,可以總體上分為兩類:

在人工神經網絡中,注意力機制一般就特指聚焦式注意力。

3、Attention機制的計算流程是怎樣的?

Attention機制的實質:尋址(addressing)

Attention機制的實質其實就是一個尋址(addressing)的過程,如上圖所示:給定一個和任務相關的查詢Query向量 q,通過計算與Key的注意力分布並附加在Value上,從而計算Attention Value,這個過程實際上是Attention機制緩解神經網絡模型複雜度的體現:不需要將所有的N個輸入信息都輸入到神經網絡進行計算,只需要從X中選擇一些和任務相關的信息輸入給神經網絡。

注意力機制可以分為三步:一是信息輸入;二是計算注意力分布α;三是根據注意力分布α 來計算輸入信息的加權平均。

step1-信息輸入:用X = [x1, · · · , xN ]表示N 個輸入信息;

step2-注意力分布計算:令Key=Value=X,則可以給出注意力分布

我們將  稱之為注意力分布(概率分布),  為注意力打分機制,有幾種打分機制:

step3-信息加權平均:注意力分布  可以解釋為在上下文查詢q時,第i個信息受關注的程度,採用一種「軟性」的信息選擇機制對輸入信息X進行編碼為:

這種編碼方式為軟性注意力機制(soft Attention),軟性注意力機制有兩種:普通模式(Key=Value=X)和鍵值對模式(Key!=Value)。

軟性注意力機制(soft Attention)

4、Attention機制的變種有哪些?

與普通的Attention機制(上圖左)相比,Attention機制有哪些變種呢?

硬性注意力的一個缺點是基於最大採樣或隨機採樣的方式來選擇信息。因此最終的損失函數與注意力分布之間的函數關係不可導,因此無法使用在反向傳播算法進行訓練。為了使用反向傳播算法,一般使用軟性注意力來代替硬性注意力。硬性注意力需要通過強化學習來進行訓練。——《神經網絡與深度學習》

5、一種強大的Attention機制:為什麼自注意力模型(self-Attention model)在長距離序列中如此強大?

(1)卷積或循環神經網絡難道不能處理長距離序列嗎?

當使用神經網絡來處理一個變長的向量序列時,我們通常可以使用卷積網絡或循環網絡進行編碼來得到一個相同長度的輸出向量序列,如圖所示:

基於卷積網絡和循環網絡的變長序列編碼

從上圖可以看出,無論卷積還是循環神經網絡其實都是對變長序列的一種「局部編碼」:卷積神經網絡顯然是基於N-gram的局部編碼;而對於循環神經網絡,由於梯度消失等問題也只能建立短距離依賴。

(2)要解決這種短距離依賴的「局部編碼」問題,從而對輸入序列建立長距離依賴關係,有哪些辦法呢?

如果要建立輸入序列之間的長距離依賴關係,可以使用以下兩種方法:一 種方法是增加網絡的層數,通過一個深層網絡來獲取遠距離的信息交互,另一種方法是使用全連接網絡。——《神經網絡與深度學習》全連接模型和自注意力模型:實線表示為可學習的權重,虛線表示動態生成的權重。

由上圖可以看出,全連接網絡雖然是一種非常直接的建模遠距離依賴的模型, 但是無法處理變長的輸入序列。不同的輸入長度,其連接權重的大小也是不同的。

這時我們就可以利用注意力機制來「動態」地生成不同連接的權重,這就是自注意力模型(self-attention model)。由於自注意力模型的權重是動態生成的,因此可以處理變長的信息序列。

總體來說,為什麼自注意力模型(self-Attention model)如此強大:利用注意力機制來「動態」地生成不同連接的權重,從而處理變長的信息序列。

(3)自注意力模型(self-Attention model)具體的計算流程是怎樣的呢?

同樣,給出信息輸入:用X = [x1, · · · , xN ]表示N 個輸入信息;通過線性變換得到為查詢向量序列,鍵向量序列和值向量序列:

上面的公式可以看出,self-Attention中的Q是對自身(self)輸入的變換,而在傳統的Attention中,Q來自於外部。

self-Attention計算過程剖解(來自《細講 | Attention Is All You Need 》)

注意力計算公式為:

自注意力模型(self-Attention model)中,通常使用縮放點積來作為注意力打分函數,輸出向量序列可以寫為:

二、Transformer(Attention Is All You Need)詳解

從Transformer這篇論文的題目可以看出,Transformer的核心就是Attention,這也就是為什麼本文會在剖析玩Attention機制之後會引出Transformer,如果對上面的Attention機制特別是自注意力模型(self-Attention model)理解後,Transformer就很容易理解了。

1、Transformer的整體架構是怎樣的?由哪些部分組成?

Transformer模型架構

Transformer其實這就是一個Seq2Seq模型,左邊一個encoder把輸入讀進去,右邊一個decoder得到輸出:

Seq2Seq模型

Transformer=Transformer Encoder+Transformer Decoder

(1)Transformer Encoder(N=6層,每層包括2個sub-layers):

Transformer Encoder

每個sub-layer都使用了殘差網絡: 

(2)Transformer Decoder(N=6層,每層包括3個sub-layers):

Transformer Decoder

sub-layer-1:Masked multi-head self-attention mechanism,用來進行self-attention,與Encoder不同:由於是序列生成過程,所以在時刻 i 的時候,大於 i 的時刻都沒有結果,只有小於 i 的時刻有結果,因此需要做Mask。

sub-layer-2:Position-wise Feed-forward Networks,同Encoder。

sub-layer-3:Encoder-Decoder attention計算。

2、Transformer Encoder 與 Transformer Decoder 有哪些不同?

(1)multi-head self-attention mechanism不同,Encoder中不需要使用Masked,而Decoder中需要使用Masked;

(2)Decoder中多了一層Encoder-Decoder attention,這與 self-attention mechanism不同。

3、Encoder-Decoder attention 與self-attention mechanism有哪些不同?

它們都是用了 multi-head計算,不過Encoder-Decoder attention採用傳統的attention機制,其中的Query是self-attention mechanism已經計算出的上一時間i處的編碼值,Key和Value都是Encoder的輸出,這與self-attention mechanism不同。代碼中具體體現:

## Multihead Attention ( self-attention)
self.dec = multihead_attention(queries=self.dec,
keys=self.dec,
num_units=hp.hidden_units,
num_heads=hp.num_heads,
dropout_rate=hp.dropout_rate,
is_training=is_training,
causality=True,
scope="self_attention")

## Multihead Attention ( Encoder-Decoder attention)
self.dec = multihead_attention(queries=self.dec,
keys=self.enc,
num_units=hp.hidden_units,
num_heads=hp.num_heads,
dropout_rate=hp.dropout_rate,
is_training=is_training,
causality=False,
scope="vanilla_attention")

4、multi-head self-attention mechanism具體的計算過程是怎樣的?

multi-head self-attention mechanism計算過程

Transformer中的Attention機制由Scaled Dot-Product Attention和Multi-Head Attention組成,上圖給出了整體流程。下面具體介紹各個環節:

Expand:實際上是經過線性變換,生成Q、K、V三個向量;

Split heads: 進行分頭操作,在原文中將原來每個位置512維度分成8個head,每個head維度變為64;

Self Attention:對每個head進行Self Attention,具體過程和第一部分介紹的一致;

Concat heads:對進行完Self Attention每個head進行拼接;

上述過程公式為:

5、Transformer在GPT和Bert等詞向量預訓練模型中具體是怎麼應用的?有什麼變化?

BERT Transformer 使用雙向self-attention,而GPT Transformer 使用受限制的self-attention,其中每個token只能處理其左側的上下文。雙向 Transformer 通常被稱為「Transformer encoder」,而左側上下文被稱為「Transformer decoder」,decoder是不能獲要預測的信息的。

Reference

《神經網絡與深度學習》

Attention Is All You Need

谷歌BERT解析----2小時上手最強NLP訓練模型

細講 | Attention Is All You Need

深度學習中的注意力模型(2017版)

進技術交流群請添加AINLP小助手微信(id: ainlper)

關於AINLP

AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。

閱讀至此了,分享、點讚、在看三選一吧🙏

相關焦點

  • nlp領域發生了新的技術突破,用attention機制研究nlp領域
    近期,nlp領域發生了一系列的技術突破。包括:attention機制,cnn,adaptive attention network(an),兩層cnn相比較,an表現優於一層的cn。lstm,已經有了兩種不同的,看似性能和效率差異不大的attention機制:rnnattention,lstmattention。今天我們將從這兩種attention機制開始研究nlp領域突破性技術!
  • 乾貨 | NLP中的self-attention【自-注意力】機制
    本人就這篇論文中的self-attention以及一些相關工作進行了學習總結(其中也參考借鑑了張俊林博士的博客"深度學習中的注意力機制(2017版)"和蘇劍林的"《Attention is All You Need》淺讀(簡介+代碼)"),和大家一起分享。
  • 一文解讀NLP中的注意力機制
    本文便對注意力機製做了較為全面的綜述。近些年來,注意力機制一直頻繁的出現在目之所及的文獻或者博文中,可見在NLP中算得上是個相當流行的概念,事實也證明其在NLP領域散發出不小得作用。這幾年的頂會paper就能看出這一點。
  • 超詳解!Transformer + self-attention
    文獻感覺有一些晦澀,尤其是關於其中Q、K、V的理解,故在這裡記錄自己的閱讀心得,供於分享交流一、self-attention部分預熱1.1 計算順序首先了解NLP中self-attention計算順序:1.2 計算公式詳解有些突兀,不著急,接下來我們看看self-attention的公式長什麼樣子
  • NLP.TM[26] | bert之我見-attention篇
    (風格依舊,不會重複別人寫過的東西)今天給大家談的是bert中的attention,通篇可能不會有太多篇幅對著bert講,而是把attention講懂,然後再去看bert中的attention幹了什麼,這樣大家能對bert中的attention,甚至整個注意力機制有更加深刻的理解。
  • Self-Attention與Transformer
    1.3 注意力機制的本質思想關於注意力機制入門文章請看我之前的一篇文章:深度學習中的注意力機制,Microstrong,地址:https://mp.weixin.qq.com/s/3911D_FkTWrtKwBo30vENg熟悉了注意力機制的原理後,我們來探究一下注意力機制的本質思想。
  • Transformer+self-attention超詳解(亦個人心得)
    ,供於分享交流一、self-attention部分預熱1.1 計算順序首先了解NLP中self-attention計算順序:1.2 計算公式詳解有些突兀,不著急,接下來我們看看self-attention的公式長什麼樣子:
  • Attention 掃盲:注意力機制及其 PyTorch 應用實現
    機制是對人類視覺注意力機制的仿生,本質上是一種資源分配機制。attention 機制的最典型應用是統計機器翻譯。給定任務,輸入是「Echt」, 「Dicke」 and 「Kiste」進 encoder,使用 rnn 表示文本為固定長度向量 h3。但問題就在於,當前 decoder 生成 y1 時僅僅依賴於最後一個隱層狀態h3,也就是 sentence_embedding。那麼這個 h3 必須 encode 輸入句子中的全部信息才行。
  • 一文搞懂NLP中的Attention機制(附詳細代碼講解)
    NLP領域,可以想像我們在做閱讀理解的時候,我們在看文章的時候,往往是帶著問題去尋找答案,所以文章中的每個部分是需要不同的注意力的。當然不同的attention機制有不同的當然如果說transformer的壞處,其最大的壞處是空間消耗大,這是因為我們需要儲存attention score(N*N)的維度,所以Sequence length(N)不能太長,這就導致,我們seq和seq之間沒有關聯。
  • transformer中multi-head attention中每個head為什麼要進行降維?
    中multi-head attention中每個head為什麼要進行降維?作者:朱文文https://www.zhihu.com/question/350369171/answer/855476109個人理解:首先,我們看下作者在transformer原文中這樣寫道:we
  • 綜述|計算機視覺中的注意力機制
    設為星標,第一時間獲取更多乾貨連結:https://zhuanlan.zhihu.com/p/146130215之前在看DETR這篇論文中的self_attention,然後結合之前實驗室組會經常提起的注意力機制,所以本周時間對注意力機制進行了相關的梳理,以及相關的源碼閱讀了解其實現的機制。
  • 注意力機制Attention
    注意力機制(attention mechanism)Attention實質上是一種分配機制,其核心思想是突出對象的某些重要特徵。根據Attention對象的重要程度,重新分配資源,即權重,實現核心思想是基於原有的數據找到其之間的關聯性,然後突出其某些重要特徵。注意力可以被描述為將一個查詢和一組鍵值對映射到一個輸出,其中查詢、鍵、值和輸出都是向量。
  • 自然語言處理中的自注意力機制(Self-Attention Mechanism)
    提出了多頭注意力(Multi-headed Attention)機制方法,在編碼器和解碼器中大量的使用了多頭自注意力機制(Multi-headed self-attention)。3. 在 WMT2014 語料中的英德和英法任務上取得了先進結果,並且訓練速度比主流模型更快。
  • 【源頭活水】詳解Transformer (Attention Is All You Need)
    地址:https://www.zhihu.com/people/yan-liu-4301前言注意力(Attention)機制[2]由Bengio團隊與2014年提出並在近年廣泛的應用在深度學習中的各個領域,例如在計算機視覺方向用於捕捉圖像上的感受野,或者NLP中用於定位關鍵token
  • 哈佛大學提出變分注意力:用VAE重建注意力機制
    注意力 (attention) 模型在神經網絡中被廣泛應用,不過注意力機制一般是決定性的而非隨機變量。為了解決這個問題,在哈佛研究人員的工作中,注意力被建模成隱變量,由於解碼器 (decoder) 和解碼器 (encoder) 之間的主要信息傳輸通道是通過注意力來傳輸的,如果忽略了這個隱變量,就會因無法得到源文本的信息而得到很大的懲罰 (penalty)(這相比之前的許多工作中直接把隱變量加入到每個解碼步驟不同,因為那樣即使解碼器忽略了隱變量,也可以達到很好的模型表現
  • bert之我見-attention
    (風格依舊,不會重複別人寫過的東西)今天給大家談的是bert中的attention,通篇可能不會有太多篇幅對著bert講,而是把attention講懂,然後再去看bert中的attention幹了什麼,這樣大家能對bert中的attention,甚至整個注意力機制有更加深刻的理解。
  • 注意力機制(Attention Mechanism)在自然語言處理中的應用
    基於注意力(attention)機制的神經網絡成為了最近神經網絡研究的一個熱點,本人最近也學習了一些基於attention機制的神經網絡在自然語言處理(NLP)領域的論文,現在來對attention在NLP中的應用進行一個總結,和大家一起分享。
  • BERT/Transformer/遷移學習NLP資源大列表
    整理:專知編輯:zenRRan【導讀】cedrickchee維護這個項目包含用於自然語言處理(NLP)的大型機器(深度)學習資源,重點關注轉換器(BERT)的雙向編碼器表示、注意機制、轉換器架構/網絡和NLP中的傳輸學習。
  • 【Attention】淺談Attention機制的理解
    ,很多深度學習的框架都帶上了注意力機制,而且也取得了很好的性能指標。隨後Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用類似attention的機制在機器翻譯任務上將翻譯和對齊同時進行,他們的工作算是第一個將attention機制應用到NLP領域中。
  • 關於attention機制的一些細節的思考
    之前看過的一些attention機制,除了self attention之外,基於rnn或者cnn的attention在處理文本問題的時候基本上是embedding之後經過了rnn或者cnn結構的映射之後得到了映射後的向量V,然後attention是針對於V進行注意力weights的計算,問題來了,能不能直接在embedding上進行score的計算?