1. 程式人生 > >transformer模型解讀

transformer模型解讀

  最近在關注谷歌釋出關於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

     數學公式表示如下:

Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V \\

   在論文文裡, 這個演算法是通過queriies, 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資料求和,加入了相對位置資訊。 

   這裡使用了兩個建構函式sin、cos。pos用來表示單詞的位置資訊,比如第一個單詞啦,第二個單詞什麼的。而 i 用來表達dimension 現在的例子裡,dmodel 是512, 那 i 應該是 0 到255. 這裡為了好說明,如果2i= dmodel, PE 的函式就是sin(pos/10000), 那它的波長就是10000*2pi,  如果i=0, 那麼他的波長就是2pi.  這樣的sin, cos的函式是可以通過線性關係互相表達的。  

優點

  作者主要講了以下幾點,複雜度分析圖如下圖四所示:  

圖四、Transformer模型與其他常用模型複雜度比較圖

   Transformer是第一個用純attention搭建的模型,不僅計算速度更快,在翻譯任務上也獲得了更好的結果。該模型徹底拋棄了傳統的神經網路單元,為我們今後的工作提供了全新的思路。