最近在關注谷歌發布關於BERT模型,它是以Transformer的雙向編碼器表示。順便回顧了《Attention is all you need》這篇文章主要講解Transformer編碼器。使用該模型在神經機器翻譯及其他語言理解任務上的表現遠遠超越了現有算法。
在 Transformer 之前,多數基於神經網絡的機器翻譯方法依賴於循環神經網絡(RNN),后者利用循環(即每一步的輸出饋入下一步)進行順序操作(例如,逐詞地翻譯句子)。盡管 RNN 在建模序列方面非常強大,但其序列性意味着該網絡在訓練時非常緩慢,因為長句需要的訓練步驟更多,其循環結構也加大了訓練難度。與基於 RNN 的方法相比,Transformer 不需要循環,而是並行處理序列中的所有單詞或符號,同時利用自注意力機制將上下文與較遠的單詞結合起來。通過並行處理所有單詞,並讓每個單詞在多個處理步驟中注意到句子中的其他單詞,Transformer 的訓練速度比 RNN 快很多,而且其翻譯結果也比 RNN 好得多。
模型結構
圖一、The Transformer Architecture
如圖一所示是谷歌提出的transformer 的架構。這其中左半部分是 encoder 右半部分是 decoder。
- Encoder: 由N=6個相同的layers組成, 每一層包含兩個sub-layers. 第一個sub-layer 就是多頭注意力層(multi-head attention layer)然后是一個簡單的全連接層。 其中每個sub-layer都加了residual connection(殘差連接)和normalisation(歸一化)。
- Decoder: 由N=6個相同的Layer組成,但這里的layer和encoder不一樣, 這里的layer包含了三個sub-layers, 其中有一個self-attention layer, encoder-decoder attention layer 最后是一個全連接層。前兩個sub-layer 都是基於multi-head attention layer。這里有個特別點就是masking, masking 的作用就是防止在訓練的時候 使用未來的輸出的單詞。比如訓練時,第一個單詞是不能參考第二個單詞的生成結果的。Masking就會把這個信息變成0,用來保證預測位置 i 的信息只能基於比 i 小的輸出。
Attention
-
Scaled dot-product attention
“Scaled dot-product attention”如下圖二所示,其輸入由維度為d的查詢(Q)和鍵(K)以及維度為d的值(V)組成,所有鍵計算查詢的點積,並應用softmax函數獲得值的權重。
圖二、兩種Attention實現框圖
“Scaled dot-product attention”具體的操作有三個步驟:
-
-
- 每個query-key 會做出一個點乘的運算過程,同時為了防止值過大除以維度的常數
- 最后會使用softmax 把他們歸一化
- 再到最后會乘以V (values) 用來當做attention vector
-
數學公式表示如下:
在論文中, 這個算法是通過queries, keys and values 的形式描述的,非常抽象。這里用了一張CMU NLP課里的圖來進一步解釋, Q(queries), K (keys) and V(Values), 其中 Key and values 一般對應同樣的 vector, K=V 而Query vecotor 是對應目標句子的 word vector。如下圖三所示。
圖三、Attention process (source:http://phontron.com/class/nn4nlp2017/assets/slides/nn4nlp-09-attention.pdf)
-
Multi-head attention
上面介紹的scaled dot-product attention, 看起來還有點簡單,網絡的表達能力還有一些簡單所以提出了多頭注意力機制(multi-head attention)。multi-head attention則是通過h個不同的線性變換對Q,K,V進行投影,最后將不同的attention結果拼接起來,self-attention則是取Q,K,V相同。
論文中使用了8個平行的注意力層或者頭部。因此用的維度dk=dv=dmodel/h=64。
Position-wise feed-forward networks
第二個sub-layer是個全連接層,之所以是position-wise是因為處理的attention輸出是某一個位置i的attention輸出。全連接層公式如下所示:
Positional Encoding
除了主要的Encoder和Decoder,還有數據預處理的部分。Transformer拋棄了RNN,而RNN最大的優點就是在時間序列上對數據的抽象,所以文章中作者提出兩種Positional Encoding的方法,將encoding后的數據與embedding數據求和,加入了相對位置信息。
優點
作者主要講了以下幾點,復雜度分析圖如下圖四所示:
圖四、Transformer模型與其他常用模型復雜度比較圖
Transformer是第一個用純attention搭建的模型,不僅計算速度更快,在翻譯任務上也獲得了更好的結果。該模型徹底拋棄了傳統的神經網絡單元,為我們今后的工作提供了全新的思路。