作者|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(層標准化)。
編碼器和解碼器的輸入
所有編碼器/解碼器的輸入和輸出標記都使用學習過的嵌入轉換成向量。然后將這些輸入嵌入傳入進行位置編碼。
位置編碼
Transformer的架構不包含任何遞歸或卷積,因此沒有詞序的概念。輸入序列中的所有單詞都被輸入到網絡中,沒有特殊的順序或位置,因為它們都同時流經編碼器和解碼器堆棧。
要理解一個句子的意思,理解單詞的位置和順序是很重要的。
位置編碼被添加到模型中,以幫助注入關於句子中單詞的相對或絕對位置的信息
位置編碼與輸入嵌入具有相同的維數,因此可以將二者相加。
自注意(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/