色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 搞懂Transformer結構,看這篇PyTorch實現(xiàn)就夠了

          搞懂Transformer結構,看這篇PyTorch實現(xiàn)就夠了

          發(fā)布人:計算機視覺工坊 時間:2022-06-16 來源:工程師 發(fā)布文章
          作者丨Alexander Rush

          來源丨哈工大SCIR編輯丨極市平臺

          下面分享一篇實驗室翻譯的來自哈佛大學一篇關于Transformer的詳細博文。

          圖片

          "Attention is All You Need"[1] 一文中提出的Transformer網(wǎng)絡結構最近引起了很多人的關注。Transformer不僅能夠明顯地提升翻譯質(zhì)量,還為許多NLP任務提供了新的結構。雖然原文寫得很清楚,但實際上大家普遍反映很難正確地實現(xiàn)。

          所以我們?yōu)榇宋恼聦懥似⒔馕臋n,并給出了一行行實現(xiàn)的Transformer的代碼。本文檔刪除了原文的一些章節(jié)并進行了重新排序,并在整個文章中加入了相應的注解。此外,本文檔以Jupyter notebook的形式完成,本身就是直接可以運行的代碼實現(xiàn),總共有400行庫代碼,在4個GPU上每秒可以處理27,000個tokens。

          想要運行此工作,首先需要安裝PyTorch[2]。這篇文檔完整的notebook文件及依賴可在github[3] 或 Google Colab[4]上找到。

          需要注意的是,此注解文檔和代碼僅作為研究人員和開發(fā)者的入門版教程。這里提供的代碼主要依賴OpenNMT[5]實現(xiàn),想了解更多關于此模型的其他實現(xiàn)版本可以查看Tensor2Tensor[6] (tensorflow版本) 和 Sockeye[7](mxnet版本)

          • Alexander Rush (@harvardnlp[8] or srush@seas.harvard.edu)
          0. 準備工作
          # !pip install http://download.pytorch.org/whl/cu80/torch-0.3.0.post4-cp36-cp36m-linux_x86_64.whl numpy matplotlib spacy torchtext seaborn
          圖片

          內(nèi)容目錄

          準備工作

          背景

          模型結構

          - Encoder和Decoder

          - Encoder

          - Decoder

          - Attention

          - Attention在模型中的應用

          - Position-wise前饋網(wǎng)絡

          - Embedding和Softmax

          - 位置編碼

          - 完整模型

          (由于原文篇幅過長,其余部分在下篇)

          訓練

          - 批和掩碼

          - 訓練循環(huán)

          - 訓練數(shù)據(jù)和批處理

          - 硬件和訓練進度

          - 優(yōu)化器

          - 正則化

          - 標簽平滑

          第一個例子

          - 數(shù)據(jù)生成

          - 損失計算

          - 貪心解碼

          真實示例

          - 數(shù)據(jù)加載

          - 迭代器

          - 多GPU訓練

          - 訓練系統(tǒng)附加組件:BPE,搜索,平均

          結果

          - 注意力可視化

          結論

          本文注解部分都是以引用的形式給出的,主要內(nèi)容都是來自原文。

          1. 背景

          減少序列處理任務的計算量是一個很重要的問題,也是Extended Neural GPU、ByteNet和ConvS2S等網(wǎng)絡的動機。上面提到的這些網(wǎng)絡都以CNN為基礎,并行計算所有輸入和輸出位置的隱藏表示。

          在這些模型中,關聯(lián)來自兩個任意輸入或輸出位置的信號所需的操作數(shù)隨位置間的距離增長而增長,比如ConvS2S呈線性增長,ByteNet呈現(xiàn)以對數(shù)形式增長,這會使學習較遠距離的兩個位置之間的依賴關系變得更加困難。而在Transformer中,操作次數(shù)則被減少到了常數(shù)級別。

          Self-attention有時候也被稱為Intra-attention,是在單個句子不同位置上做的Attention,并得到序列的一個表示。它能夠很好地應用到很多任務中,包括閱讀理解、摘要、文本蘊涵,以及獨立于任務的句子表示。端到端的網(wǎng)絡一般都是基于循環(huán)注意力機制而不是序列對齊循環(huán),并且已經(jīng)有證據(jù)表明在簡單語言問答和語言建模任務上表現(xiàn)很好。

          據(jù)我們所知,Transformer是第一個完全依靠Self-attention而不使用序列對齊的RNN或卷積的方式來計算輸入輸出表示的轉換模型。

          2. 模型結構

          目前大部分比較熱門的神經(jīng)序列轉換模型都有Encoder-Decoder結構[9]。Encoder將輸入序列  映射到一個連續(xù)表示序列  。

          對于編碼得到的z,Decoder每次解碼生成一個符號,直到生成完整的輸出序列: 。對于每一步解碼,模型都是自回歸的[10],即在生成下一個符號時將先前生成的符號作為附加輸入。

          圖片

          Transformer的整體結構如下圖所示,在Encoder和Decoder中都使用了Self-attention, Point-wise和全連接層。Encoder和decoder的大致結構分別如下圖的左半部分和右半部分所示。

          圖片2. Encoder和Decoder

          Encoder

          Encoder由N=6個相同的層組成。

          圖片

          我們在每兩個子層之間都使用了殘差連接(Residual Connection) [11]和歸一化 [12]。

          圖片圖片圖片

          每層都有兩個子層組成。第一個子層實現(xiàn)了“多頭”的 Self-attention,第二個子層則是一個簡單的Position-wise的全連接前饋網(wǎng)絡。

          圖片

          Dncoder

          Decoder也是由N=6個相同層組成。

          圖片

          除了每個編碼器層中的兩個子層之外,****還插入了第三種子層對編碼器棧的輸出實行“多頭”的Attention。 與編碼器類似,我們在每個子層兩端使用殘差連接進行短路,然后進行層的規(guī)范化處理。

          圖片圖片圖片3. Attention圖片圖片圖片

          “多頭”機制能讓模型考慮到不同位置的Attention,另外“多頭”Attention可以在不同的子空間表示不一樣的關聯(lián)關系,使用單個Head的Attention一般達不到這種效果。

          圖片圖片圖片4. Attention在模型中的應用

          Transformer中以三種不同的方式使用了“多頭”Attention:

          1) 在"Encoder-Decoder Attention"層,Query來自先前的****層,并且Key和Value來自Encoder的輸出。Decoder中的每個位置Attend輸入序列中的所有位置,這與Seq2Seq模型中的經(jīng)典的Encoder-Decoder Attention機制[15]一致。

          2) Encoder中的Self-attention層。在Self-attention層中,所有的Key、Value和Query都來同一個地方,這里都是來自Encoder中前一層的輸出。Encoder中當前層的每個位置都能Attend到前一層的所有位置。

          3) 類似的,****中的Self-attention層允許****中的每個位置Attend當前解碼位置和它前面的所有位置。這里需要屏蔽****中向左的信息流以保持自回歸屬性。具體的實現(xiàn)方式是在縮放后的點積Attention中,屏蔽(設為負無窮)Softmax的輸入中所有對應著非法連接的Value。

          5. Position-wise前饋網(wǎng)絡圖片6. Embedding和Softmax圖片7. 位置編碼圖片圖片圖片

          我們也嘗試了使用預學習的位置Embedding,但是發(fā)現(xiàn)這兩個版本的結果基本是一樣的。我們選擇正弦曲線版本的實現(xiàn),因為使用此版本能讓模型能夠處理大于訓練語料中最大序了使用列長度的序列。

          8. 完整模型

          下面定義了連接完整模型并設置超參的函數(shù)。

          圖片
          END. 參考鏈接[1] https://arxiv.org/abs/1706.03762
          [2] https://pytorch.org/
          [3] https://github.com/harvardnlp/annotated-transformer
          [4] https://drive.google.com/file/d/1xQXSv6mtAOLXxEMi8RvaW8TW-7bvYBDF/view?usp=sharing
          [5] http://opennmt.net
          [6] https://github.com/tensorflow/tensor2tensor
          [7] https://github.com/awslabs/sockeye
          [8] https://twitter.com/harvardnlp
          [9] https://arxiv.org/abs/1409.0473
          [10] https://arxiv.org/abs/1308.0850
          [11] https://arxiv.org/abs/1512.03385
          [12] https://arxiv.org/abs/1607.06450
          [13] https://arxiv.org/abs/1409.0473
          [14] https://arxiv.org/abs/1703.03906
          [15] https://arxiv.org/abs/1609.08144
          [16] https://arxiv.org/abs/1608.05859
          [17] https://arxiv.org/pdf/1705.03122.pdf


          原文 :http://nlp.seas.harvard.edu/2018/04/03/attention.html


          本文僅做學術分享,如有侵權,請聯(lián)系刪文。


          *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。



          關鍵詞: AI

          相關推薦

          技術專區(qū)

          關閉