1. 程式人生 > >【NLP】Universal Transformers詳解

【NLP】Universal Transformers詳解

上一篇transformer寫了整整兩週。。解讀太慢了。。主要是自己也在理解,而且沒有時間看原始碼,非常慚愧,如果哪裡說錯了希望大佬們可以提醒一下

之前細細研究了attention和transformer之後,universal transformer讀了一遍就理解了,缺乏之前基礎的童鞋們請先移步:

  1. 【NLP】Attention原理和原始碼解析

2. 【NLP】Transformer詳解

Universal Transformer的產生是因為Transformer在實踐上和理論上的兩個缺點(參考上篇文章),universal代表的是computationally universal,即圖靈完備(參考Transformer詳解第三節)。主要的改動就是加上了迴圈,但不是時間上的迴圈,而是depth的迴圈。注意到Transformer模型其實分別用了6個layer,是fixed depth,而universal中應用了一個機制對迴圈的次數進行控制。

1. 模型結構

模型的結構還是和傳統Transformer很相似,這裡就不重複解讀了,主要講一下universal transformer的幾點改動:

1.1 Recurrent機制

在Transformer中,input在經過multihead self-attention後會進入fully connected層,這裡則進入了Transition層,通過一個共享權重的transition function繼續迴圈計算:

這裡縱向的position指的就是一個序列中各個symbol的位置(也就是在rnn中的time step),橫向的time指的主要是計算上的先後順序,比如一個序列 (a,b,c,d)

,先經過embedding表示成 (h_a^t, h_b^t, h_c^t, h_d^t) ,在經過一層attention+transition表示成 (h_a^{t+1}, h_b^{t+1}, h_c^{t+1}, h_d^{t+1}) 。如果是rnn,那就要先計算 h_a^t ,再計算 h_a^{t+1}h_b^t ,而transformer的self-attention可以同時計算 (h_a^t, h_b^t, h_c^t, h_d^t) ,再計算t+1的。

這樣,每個self-attention+transition的輸出 H^t 可以表示為:

H^t = LayerNorm(A^{t-1}+Transition(A^t)) \\

where\  A^t = LayerNorm(H^{t-1}+MultiHeadSelfAttention(H^{t-1}+P^t)) \\

這裡Transition function可以和之前一樣是fully-connected layer,也可以是separable convolution layer。

1.2 Coordinate embeddings

Transformer的positional embedding只用考慮symbol的position就可以了,這裡又多了一個time維度,所以每一次迴圈都會重新做一次coordinate embedding,圖上沒有表示出來,需要看原始碼確認一下。Embedding公式如下:

P^t_{pos, 2j} = sin(pos/10000^{2j/d})\oplus sin(t/10000^{2j/d}) \\

P^t_{pos, 2j+1} = cos(pos/10000^{2j/d})\oplus cos(t/10000^{2j/d}) \\

暫時還沒想清楚為什麼這麼運算,想清楚了說一下。。

1.3 Adaptive Computation Time (ACT)

ACT可以調整計算步數,加入ACT機制的Universal transformer被稱為Adaptive universal transformer。要注意的細節是,每個position的ACT是獨立的,如果一個position a在t時刻被停止了, h_a^t 會被一直複製到最後一個position停止,當然也會設定一個最大時間,避免死迴圈。

2. 總結

Universal Transformer對transformer的缺點進行了改進,在問答、語言模型、翻譯等任務上都有更好的效果,成為了新的seq2seq state-of-the-art模型。它的關鍵特性主要有兩點:

  • Weight sharing:歸納偏置是關於目標函式的假設,CNN和RNN分別假設spatial translation invariace和time translation invariance,體現為CNN卷積核在空間上的權重共享和RNN單元在時間上的權重共享,所以universal transformer也增加了這種假設,使recurrent機制中的權重共享,在增加了模型表達力的同時更加接近rnn的inductive bias。
  • Conditional computation:通過加入ACT控制模型的計算次數,比固定depth的universal transformer取得了更好的結果

細讀下來,還是有很多細節值得深挖,我淺挖了一下,各位感興趣的再去多看看

劃重點:computationally universal, inductive bias, coordinate embedding

以上。


【參考資料】:

  1. Universal Transformers
  2. 學界 | 谷歌的機器翻譯模型 Transformer,現在可以用來做任何事了