即將取代RNN結構的Transformer

Transformer之前

clipboard.png

上圖是經典的雙向RNN模型,我們知道該模型是通過遞歸的方式運行,雖然適合對序列數據建模,但是缺點也很明顯“它無法並行執行”也就無法利用GPU強大的並行能力(這裏插句題外話,正因爲GPU強大的並行能力,所以batch_size等於1和等於200運算時間基本差不多),再加上各種門控機制,運行速度很慢。一般而言,編碼器輸出編碼向量C作爲解碼器輸入,但是由於編碼向量C中所有的編碼器輸入值貢獻相同,導致序列數據越長信息丟失越多。

clipboard.png

CNN網絡相比RNN網絡,它雖然可以並行執行,但是無法一次捕獲全局信息,通過上圖可得我們需要多次遍歷,多個卷積層疊加增大感受野。
谷歌的做法是Attention is All You Need !

Transformer

clipboard.png

如圖所示是Transformer的整體結構,我們將詳細介紹每一部分,先從左邊的編碼器開始。

clipboard.png

A: 這一步,我想大家已經非常熟悉了,將詞彙錶轉爲embedding維度的向量(onehot和embedding區別)。
B: 僅僅使用attention有一個致命短板,它對序列數據的順序免疫,即:無法捕獲序列的順序。比如對翻譯任務,我們知道順序非常重要,單詞順序變動甚至會產生完全不同的意思。因此增加Position Embedding給每個位置編號,每個編號對應一個向量,這樣每個詞向量都會有一個位置向量,以此來定位。

clipboard.png

如圖所示,Position Embedding計算公式,將id爲p的位置映射爲一個dpos維的位置向量,這個向量的第i個元素的數值就是PEi(p),位置編碼算法當然不止一種,但是不同算法必須要解決的的問題就是能夠處理未知長度的序列。假設位置向量有4維,實際位置向量可能如下所示:

clipboard.png

結合位置向量和詞向量我們有兩種方式,一種是將兩者拼接成一個新向量,另一種是使兩者維度相同然後相加得到新向量。

clipboard.png

C:殘差連接,隨後是D: layer-normalization。

clipboard.png

隨着網絡層數的加深,會帶來梯度消失,梯度爆炸以及過擬合問題。針對此問題,我們一般採用權重正則化,批標準化,更換激活函數等等措施,但是當網絡層數進一步增加,會出現網絡退化問題,即:訓練集精度開始下降。使用殘差可以解決此問題,目前使用殘差的網絡可以達到幾百層。

E:Multi-head注意力機制

clipboard.png

上圖是attention計算過程,我們分解步驟,依次來看。

  1. 生成“q”,“k”,“v”向量,由輸入embedding向量與圖示右側對應權重矩陣相乘。需要注意的是,此處的三個權重矩陣爲所有輸入共享。如果每個詞獨享一個權重矩陣,個人認爲並不會提升性能,有可能還會降低。

clipboard.png

  1. 計算attention score,計算方式如圖所示:

clipboard.png

  1. 使用softmax歸一化數值,softmax上面的相除操作主要是調解內積不要太大。

clipboard.png

  1. softmax歸一化後的值與“v”向量矩陣相乘,將所有加權向量加和,產生該位置的self-attention的輸出結果。

clipboard.png

multi-headed attention:就是有多組上面那樣的attention,最後將結果拼接起來,其中,每組attention權重不共享。

clipboard.png

計算公式如下:

clipboard.png
clipboard.png

整體計算過程如下圖所示:

clipboard.png

F:全連接網絡,兩個線性函數,一個非線性函數(Relu):

clipboard.png

解碼器:

clipboard.png

A:解碼器attention計算的內部向量和編碼器的輸出向量,計算源句和目標句之間的關係,在Transformer之前,attention機制就應用在這裏。
B:線性層是一個全連接層,神經元數量和詞表長度相等,然後添加softmax層,將概率最高值對應的詞作爲輸出。

clipboard.png

總結

Transformer現在大有取代RNN之勢,但依然存在一些缺點。首先,Transformer雖然使用到了位置向量,但是對序列位置要求很高的項目做的並不好。Transformer可以一步到位獲取全局信息,但如果你的項目只是需要局部信息呢?雖然也可以做到,但是增加了多餘計算量。

本文內容部分參考The Illustrated Transformer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章