日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

论文《Attention Is All You Need》及Transformer模型

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 论文《Attention Is All You Need》及Transformer模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1. Introduction

2. 模型結構? ? ? ? ? ? ? ? ? ? ? ? ?

2.1?Transformer模型

2.2 輸入層

2.3 位置向量:給單詞賦予上下文語境

2.4 注意力機制

2.4.1 Self-attention 和 Encoder-Decoder attention

2.4.2 Scaled Dot-Product Attention

2.4.3 Multi-Head Attention

2.5 前向神經網絡? ? ? ? ? ? ? ? ? ? ? ? ? ??

3. 本文使用的注意力機制

3.1?Encoder的結構

3.2?Decoder的結構

4. 總結

4.1 為什么使用self-attention? ? ? ???

4.2 訓練

4.3 結果? ? ? ? ? ??

5. 本文開源代碼

6. 參考資料


1. Introduction

? ? ? ?本文是谷歌發表的文章,針對nlp里的機器翻譯問題,提出了一種被稱為”Transformer”的網絡結構,基于注意力機制。文章提出,以往nlp里大量使用RNN結構和encoder-decoder結構,RNN及其衍生網絡的缺點就是慢,問題在于前后隱藏狀態的依賴性,無法實現并行,而文章提出的”Transformer”完全摒棄了遞歸結構,依賴注意力機制,挖掘輸入和輸出之間的關系,這樣做最大的好處是能夠并行計算了。
? ? ? ? 在此之前,針對機器翻譯這個領域,為了應對RNN無法并行問題,已經有過一些使用CNN的解決方案了,例如谷歌的ByteNet,Facebook的FairSeq等等。
??自注意力機制(Self-attention)能夠把輸入序列上不同位置的信息聯系起來,然后計算出整條序列的某種表達,目前自注意力機制主要應用于閱讀理解、提取摘要、文本推論等領域。

2. 模型結構

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ?上圖是谷歌提出的 transformer 架構,其本質上是一個Encoder-Decoder的結構。把英文句子輸入模型,模型會輸出法文句子。

要搭建Transformer,我們必須要了解5個過程:

  • 詞向量層
  • 位置編碼
  • 創建Masks
  • 多頭注意層(The Multi-Head Attention layer)
  • Feed Forward層

2.1?Transformer模型

Transformer采用encoder-decoder結構,舍棄了RNN的循環式網絡結構,完全基于注意力機制來對一段文本進行建模。
Transformer所使用的注意力機制的核心思想是去計算一句話中的每個詞對于這句話中所有詞的相互關系,然后認為這些詞與詞之間的相互關系在一定程度上反應了這句話中不同詞之間的關聯性以及重要程度。因此再利用這些相互關系來調整每個詞的重要性(權重)就可以獲得每個詞新的表達。這個新的表征不但蘊含了該詞本身,還蘊含了其他詞與這個詞的關系,因此和單純的詞向量相比是一個更加全局的表達。Transformer通過對輸入的文本不斷進行這樣的注意力機制層和普通的非線性層交疊來得到最終的文本表達。

Transformer采用Encoder與Decoder的堆疊,具體為

  • Encoder:Transformer模型的Encoder由6個基本層堆疊起來,每個基本層包含兩個子層,第一個子層是一個注意力機制,第二個是一個全連接前向神經網絡。對兩個子層都引入了殘差邊以及layer normalization。
  • Decoder:Transformer模型的Decoder也由6個基本層堆疊起來,每個基本層除了Encoder里面的那兩個以外,還增加了一層注意力機制,同樣引入殘差邊以及layer normalization。
  • Encoder的attention是self-attention;Decoder里面的attention首先是self-attention,然后是encoder-decoder attention。

2.2 輸入層

? ? ? ?編碼器和解碼器的輸入就是利用學習好的embeddings將tokens(一般應該是詞或者字符)轉化為d維向量。對解碼器來說,利用線性變換以及softmax函數將解碼的輸出轉化為一個預測下一個token的概率。

2.3 位置向量:給單詞賦予上下文語境

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?由于本文的模型結構沒有使用任何遞歸結構或卷積結構,為了讓模型能利用輸入序列的順序信息,必須引入某種能表達輸入序列每個部分的絕對或相對位置的信息才行,也就是需要將tokens的相對以及絕對位置信息注入到模型中去。文章采取的方法是在輸入embeddings的基礎上加了一個位置編碼(positional encoding),在送入encoder和decoder之前,先對輸入進行編碼,編碼后的向量維度是dmodel。具體來說,采用正弦和余弦函數進行編碼。
? ? ? ?然而,只要稍微思考一下就會發現,這樣的模型并不能捕捉序列的順序!換句話說,如果將K、V按行打亂順序(相當于句子中的詞序打亂),那么Attention的結果還是一樣的。這就表明了,到目前為止,Attention模型頂多是一個非常精妙的“詞袋模型”而已。這問題就比較嚴重了,大家知道,對于時間序列來說,尤其是對于NLP中的任務來說,順序是很重要的信息,它代表著局部甚至是全局的結構,學習不到順序信息,那么效果將會大打折扣(比如機器翻譯中,有可能只把每個詞都翻譯出來了,但是不能組織成合理的句子)。
? ? ? ? 于是Google再祭出了一招——Position Embedding,也就是“位置向量”,將每個位置編號,然后每個編號對應一個向量,通過結合位置向量和詞向量,就給每個詞都引入了一定的位置信息,這樣Attention就可以分辨出不同位置的詞了。

? ? ? ? Position Embedding并不算新鮮的玩意,在FaceBook的《Convolutional Sequence to Sequence Learning》也用到了這個東西。

? ? ?(1)以前在RNN、CNN模型中其實都出現過Position Embedding,但在那些模型中,Position Embedding是錦上添花的輔助手段,也就是“有它會更好、沒它也就差一點點”的情況,因為RNN、CNN本身就能捕捉到位置信息。但是在這個純Attention模型中,Position Embedding是位置信息的唯一來源,因此它是模型的核心成分之一,并非僅僅是簡單的輔助手段。

? ? (2)在以往的Position Embedding中,基本都是根據任務訓練出來的向量。而Google直接給出了一個構造Position Embedding的公式:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?其中pos代表的是第幾個詞,i代表embedding中的第幾維。Google在論文中說到他們比較過直接訓練出來的位置向量和上述公式計算出來的位置向量,效果是接近的。因此顯然我們更樂意使用公式構造的Position Embedding了。

? ? ? ?在給詞向量添加位置編碼之前,我們要擴大詞向量的數值,目的是讓位置編碼相對較小。這意味著向詞向量添加位置編碼時,詞向量的原始含義不會丟失。

? ?(3)Position Embedding本身是一個絕對位置的信息,但在語言中,相對位置也很重要,Google選擇前述的位置向量公式的一個重要原因是:由于我們有sin(α+β)=sinαcosβ+cosαsinβ以及cos(α+β)=cosαcosβ?sinαsinβ,這表明位置p+k的向量可以表示成位置p的向量的線性變換,這提供了表達相對位置信息的可能性。

2.4 注意力機制

? ? ? ? 注意力機制(Attention)簡單來說就是給定一個查找(query)和一個鍵值表(key-value pairs),將query映射到正確的輸入的過程。此處的query、key、value和最終的輸出都是向量。輸出往往是一個加權求和的形式,而權重則由query、key和value決定。
??NLP領域中,Attention網絡基本成為了標配,是Seq2Seq的創新。Attention網絡是為了解決編碼器-解碼器結構存在的長輸入序列問題。
??Attention功能可以被描述為將查詢和一組鍵值對映射到輸出,其中查詢、鍵、值和輸出都是向量。輸出可以通過對查詢的值加權來計算。

? ? ? ? Attention通常可以進行如下描述,表示為將query(Q)和key-value pairs映射到輸出上,其中query、每個key、每個value都是向量,輸出是V中所有values的加權,其中權重是由Query和每個key計算出來的,計算方法分為三步:

? ? ? 1)計算比較Q和K的相似度,用f來表示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?2)將得到的相似度進行softmax歸一化:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?

? ? ? 3)針對計算出來的權重,對所有的values進行加權求和,得到Attention向量:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?計算相似度的方法有以下4種,在本文中,我們計算相似度的方式是第一種:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ?本文提出的Attention機制稱為Multi-Head Attention,不過在這之前,我們要先介紹它的簡單版本?Scaled Dot-Product Attention

2.4.1 Self-attention 和 Encoder-Decoder attention

? ? ? ?計算Attention首先要有query、key和value。Encoder的attention是self-attention,Decoder里面的attention首先是self-attention,然后是encoder-decoder attention。這里的兩種attention是針對query和key-value來說的

  • 對self-attention來說,計算得到query和key-value的過程都是使用的同樣的輸入,因為要算自己跟自己的attention嘛;
  • 對encoder-decoder attention來說,query的計算使用的是decoder的輸入,而key-value的計算使用的是encoder的輸出,因為我們要計算decoder的輸入跟encoder里面每一個的相似度嘛。?經典模型:? ? ? ? ? ??? ? ? ?

? ? ? ??? ? ? ? ? ? ? ? ? ? ?

? ? ? ?因此本文下面對于attention的講解,都是基于self-attention來說的,如果是encoder-decoder attention,只要改一下輸入即可,其余過程都是一樣的。

? ? ? ? ? ?

2.4.2 Scaled Dot-Product Attention

? ? ? ? Scaled Dot-Product Attention 可以看作是只有一個 Head 的 Multi-Head Attention,是簡化版本

? ? ? ? 輸入包含dk維的query和key,以及dv維的value。通過計算query和各個key的點積,除以√dk歸一化,然后經過softmax激活變成權重,最后再乘value。點積注意力機制的優點是速度快、占用空間小。
???? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?

圖解參考:https://www.jianshu.com/p/b1030350aadb

例子:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?Embedding在進入到Attention之前,有3個分叉,那表示說從1個向量,變成了3個向量Q、K、V,它是通過定義一個矩陣(這個矩陣隨機初始化,通過前向反饋網絡訓練得到),將Embedding和矩陣做乘法,得到查詢向量q,假設輸入Embedding是512維,在上圖中我們用4個小方格表示,輸出的查詢向量是64維,上圖中用3個小方格以示不同。然后類似地,定義和矩陣,將Embedding和做矩陣乘法,得到鍵向量k;將embeding和做矩陣乘法,得到值向量v。對每一個Embedding做同樣的操作,那么每個輸入就得到了3個向量,查詢向量、鍵向量和值向量。需要注意的是,查詢向量和鍵向量要有相同的維度,值向量的維度可以相同,也可以不同,但一般也是相同的。至于將獲得的Q、K、V矩陣具體操作,總的來說,就是以下這幅圖:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

獲得的Z和目標值進行比較,獲得的損失反向傳播,優化的參數是,、和。

2.4.3 Multi-Head Attention

? ? ? ?Multi-Head Attention就是把Scaled Dot-Product Attention的過程做H次,然后把輸出拼接起來,再經過一次的線性操作,論文中,它的結構圖如下:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

不同的head可以學到不同的語義關系,如一組head用于做指代消解,一組head用于做上下文。

用h個不同的線性變換(本文取8)分別將dmodel維的key、value和query映射成dk維、dk維和dv維,然后再代入注意力機制,產生總共h×dv維輸出,然后拼起來,再用一個線性變換得到最終的輸出。
??這個是Google提出的新概念,是Attention機制的完善。不過從形式上看,它其實就再簡單不過了,就是把Q、K、V通過參數矩陣映射一下,然后再做Attention,把這個過程重復做h次,結果拼接起來就行了,可謂“大道至簡”了。具體來說:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? 所謂“多頭”(Multi-Head),就是只多做幾次同樣的事情(參數不共享),然后把結果拼接。

2.5 前向神經網絡

? ? ? ? 這是一個 Position-wise 前向神經網絡,encoder和decoder的每一層都包含一個全連接前向神經網絡,激活函數順序是線性、RELU、線性。 每層由兩個支層,attention層就是其中一個,而attention之后的另一個支層就是一個前饋的網絡。公式描述如下:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

3. 本文使用的注意力機制

? ? ? 本文使用的是Multi-Head Attention,具體體現在三個方面。

  • 在“encoder-decoder attention”層中,query來自前一個decoder層,而key和value是encoder的輸出。這允許decoder的每個位置都去關注輸入序列的所有位置。
  • encoder包含self-attention層,在self-attention層中所有的key、value和query都來自前一層的encoder。這樣encoder的每個位置都能去關注前一層encoder輸出的所有位置。
  • decoder包含self-attention層

? ? ? ? ? ? ? ? ? ?

? ? ? ? 可以看到,Encoder的每一層有兩個操作,分別是Self-Attention和Feed Forward;而Decoder的每一層有三個操作,分別是Self-Attention、Encoder-Decoder Attention以及Feed Forward操作。這里的Self-Attention和Encoder-Decoder Attention都是用的是Multi-Head Attention機制。

3.1?Encoder的結構

? ? Encoder有N層,默認是6層,每層包括兩個sub-layers:
?(1)第一個sub-layer是Self-attention:使用multi-head self-attention mechanism,用來計算輸入的self-attention;
?(2)第二個sub-layer是簡單的全連接網絡。
? ? 每一個sub-layer都模擬了殘差網絡的結構,其網絡示意圖如下:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

3.2?Decoder的結構

? ? ?Decoder有N(默認是6)層,每層包括三個sub-layers:
? ?(1)第一個sub-layer是Self-Attention:使用 Masked multi-head self-attention,也是計算輸入的self-attention,但是因為是生成過程,因此在時刻 i 的時候,大于 i 的時刻都沒有結果,只有小于 i 的時刻有結果,因此需要做Mask.
? (2)第二個sub-layer是Encoder-Decoder Attention:對encoder的輸入進行attention計算,這里仍然是 Multi-head self-attention結構,只不過輸入的分別是decoder的輸入和encoder的輸出。
? (3)第三個sub-layer是全連接網絡:與Encoder相同。

其網絡示意圖如下:

? ? ? ? ? ? ? ? ? ??

4. 總結

? ? ? ?模型的整體框架基本介紹完了,其最重要的創新應該就是Self-Attention和Multi-Head Attention的架構。在摒棄傳統CNN和RNN的情況下,還能提高表現,降低訓練時間。Transformer用于機器翻譯任務,表現極好,可并行化,并且大大減少訓練時間。并且也給我們開拓了一個思路,在處理問題時可以增加一種結構的選擇。

4.1 為什么使用self-attention

? ? ? ? 從三個方面去對比self-attention和遞歸結構、卷積結構的優劣性,首先是每一層的計算復雜度,其次是能夠被并行的計算量,最后是網絡中長期依賴的路徑長度。對比顯示,self-attention表現最好。

? ? ? ??

4.2 訓練

? ? ? ? 訓練數據使用WMT English-German數據集,包含450w對語句。句子都被編碼過了,使用了一個大小約37000個token的字典。樣本被分為若干個batch,每個batch大概25000個token,每個batch中的句子長度保持基本一致。硬件上使用了8塊GPU。Optimizer使用了Adam。過擬合方面使用了dropout和Label Smoothing。

4.3 結果

? ? ? 不論是英語-德語還是英語-法語的翻譯任務,對比之前的一些模型,本文提出的模型都達到更好的BELU值,同時Training Cost也最低。

? ? ? ? ? ? ?

5. 本文開源代碼

https://github.com/tensorflow/tensor2tensor

attention實現keras版: https://github.com/bojone/attention/blob/master/attention_keras.py
attention實現tensorflow版: https://github.com/bojone/attention/blob/master/attention_tf.py

6. 參考資料

  • 從Encoder-Decoder(Seq2Seq)理解Attention的本質:https://www.cnblogs.com/huangyc/p/10409626.html#_label3
  • 《Attention is All You Need》淺讀(簡介+代碼)https://kexue.fm/archives/4765
  • Attention Is All You Need https://arxiv.org/abs/1706.03762
  • 一文讀懂「Attention is All You Need」| 附代碼實現 https://yq.aliyun.com/articles/342508
  • 對Attention is all you need 的理解https://blog.csdn.net/mijiaoxiaosan/article/details/73251443
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的论文《Attention Is All You Need》及Transformer模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。