NLP中的Transformer 簡介

做者|Renu Khandelwal
編譯|VK
來源|Towards Data Science網絡

在這篇文章中,咱們將討論如下有關Transformer的問題架構

  • 爲何咱們須要Transformer,Sequence2Sequence模型的挑戰是什麼?
  • 詳細介紹了Transformer及其架構
  • 深刻研究Transformer中使用的術語,如位置編碼、自注意力、多頭注意力、掩碼多頭注意力
  • 可使用Transformer的NLP任務

Sequence2Sequence (Seq2Seq)的缺點

  • 順序計算:在Seq2Seq中,咱們以順序的方式在每一個步驟中向編碼器輸入一個單詞,以便在解碼器中每次生成一個單詞的輸出。在Seq2Seq架構中咱們作不到經過並行化操做來提升計算效率。

  • 長期依賴關係:長期依賴關係是Seq2Seq的一個問題,這是因爲須要爲長句執行大量操做形成的,以下所示。

這裏的「it」指的是「Coronavirus」仍是「countries」?。機器學習

讓咱們深刻了解Transformer的體系結構和Transformer的關鍵概念,以瞭解Transformer如何應對這些挑戰函數

Transformer架構

Transformer有6個編碼器和6個解碼器,不像Seq2Seq,該編碼器包含兩個子層:多頭自注意層和一個全鏈接層。學習

該解碼器包含三個子層,一個多頭自注意層,一個可以執行編碼器輸出的多頭自注意的附加層,以及一個全鏈接層。編碼

編碼器和解碼器中的每一個子層都有一個殘差鏈接,而後進行layer normalization(層標準化)。.net

編碼器和解碼器的輸入

全部編碼器/解碼器的輸入和輸出標記都使用學習過的嵌入轉換成向量。而後將這些輸入嵌入傳入進行位置編碼。翻譯

位置編碼

Transformer的架構不包含任何遞歸或卷積,所以沒有詞序的概念。輸入序列中的全部單詞都被輸入到網絡中,沒有特殊的順序或位置,由於它們都同時流經編碼器和解碼器堆棧。3d

要理解一個句子的意思,理解單詞的位置和順序是很重要的。orm

位置編碼被添加到模型中,以幫助注入關於句子中單詞的相對或絕對位置的信息

位置編碼與輸入嵌入具備相同的維數,所以能夠將兩者相加。

自注意(self attention)

注意力是爲了更好地理解句子中單詞的含義和上下文。

自注意,有時也稱爲內注意,是一種將單個序列的不一樣位置聯繫起來以計算序列表示的注意力機制

一個自注意層用一個常數數量的連續執行的操做鏈接全部的位置,所以比重複的層更快

Transformer中的注意函數被描述爲將查詢和一組鍵值對映射到輸出。查詢、鍵和值都是向量。注意力權值是經過計算句子中每一個單詞的點積注意力來計算的。最後的分數是這些值的加權和。

讓咱們用一句話來理解:「I enjoy nature.。」

輸入是查詢、鍵和值。向量的維數是64,由於這致使了更穩定的梯度。

步驟1:點積

取查詢和句子中每一個單詞的鍵的點積。點積決定了誰更關注輸入句子中的其餘單詞。

步驟2:縮放

經過除以鍵向量維數的平方根來縮放點積。大小是64;所以,咱們將點積除以8。

步驟3:使用softmax

Softmax使比例值歸一。應用Softmax後,全部值均爲正,加起來爲1

步驟4:計算各值的加權和

咱們應用歸一後的分數和值向量之間的點積,而後計算總和

自注意的完整公式

對句子中的每一個單詞重複這些步驟。

多頭注意

Transformer使用多個注意力頭,而不是單一的注意力函數,即由實際的單詞自己來控制注意力。

每一個注意頭都有一個不一樣的線性變換應用於相同的輸入表示。該Transformer使用8個不一樣的注意頭,這些注意頭是並行獨立計算的。有了8個不一樣的注意頭,咱們就有了8個不一樣的查詢、鍵和值集,還有8個編碼器和解碼器集,每一個集都是隨機初始化的

「多頭注意力容許模型在不一樣的位置共同關注來自不一樣表示子空間的信息。」

在一個多頭注意頭中,輸入表示的每一部分都與輸入表示的其餘部分進行交互,以得到更好的含義和上下文。當多頭注意力在不一樣的位置觀察不一樣的表示子空間時,它也有助於學習長期的依賴關係。

利用多頭注意,咱們得知上面句子中的「it」指的是「Coronavirus」。

掩碼多頭注意

解碼器對多頭注意力進行掩碼,在此掩蔽或阻止瞭解碼器對將來步驟的輸入。在訓練過程當中,解碼器的多頭注意力隱藏了將來的解碼器輸入。

在機器翻譯任務中,使用Transformer將一個句子「I enjoy nature」從英語翻譯成印地語,解碼器將考慮全部輸入的單詞「I, enjoy, nature」來預測第一個單詞。

下表顯示瞭解碼器將如何阻止來自將來步驟的輸入

編碼器和解碼器中的每一個子層都有一個殘差鏈接,而後進行層標準化。

殘差鏈接和層標準化

殘差鏈接是「跳過鏈接」,容許梯度經過網絡而不經過非線性激活函數。殘差鏈接有助於避免消失或爆炸的梯度問題。爲了使剩餘的鏈接起做用,模型中每一個子層的輸出應該是相同的。Transformer中的全部子層,產生維度大小512的輸出。

層標準化:對每一個特徵的輸入進層標準化,而且與其餘示例無關,以下所示。層標準化減小了前饋神經網絡的訓練時間。在層標準化中,咱們在一個單一的訓練案例中,計算全部層神經元的累加輸入的平均值和方差。

全鏈接層

Transformer中的編碼器和解碼器都有一個全鏈接網絡,它有兩個線性變換,其中包含一個ReLU激活。

線性和softmax的解碼器

譯碼器的最後一層利用線性變換和softmax函數對譯碼器輸出進行轉換,預測輸出的機率

Transformer的特色

利用Transformer解決了seq2seq模型的不足

  • 並行計算:Transformer的體系結構去掉了Seq2Seq模型中使用的自迴歸模型,徹底依賴於自注意來理解輸入和輸出之間的全局依賴關係。自注意極大地幫助並行化計算

  • 減小操做次數:Transformer的操做次數是恆定的,由於在多頭注意中,注意權值是平均的

  • 長依賴關係:影響遠程依賴學習的因素是基於信號必須在網絡中經過的前向和後向路徑的長度。輸入和輸出序列中任意位置組合之間的路徑越短,就越容易學習長期依賴關係。自注意層經過一系列連續執行的操做鏈接全部位置,學習長期依賴關係。

由Transformer處理的NLP任務

  • 文本摘要
  • 機器翻譯

結論:

Transformer有一個簡單的網絡結構,基於自注意機制,不依賴於遞歸和卷積徹底。計算是並行執行的,使Transformer效率高,須要更少的訓練時間

原文連接:https://towardsdatascience.com/simple-explanation-of-transformers-in-nlp-da1adfc5d64f

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/

相關文章
相關標籤/搜索