關於Transformer的具體內容,可以訪問:https://www.cnblogs.com/mj-selina/p/12369797.html
簡介
Transformer是Google Brain2017年提出的一種模型,它的編碼能力超越了RNN,但是對於長距離依賴的建模能力依然不足。為解決長距離依賴問題,Google Brain提出了Transformer-XL模型(XL是extra long的意思),不僅能夠獲取長距離依賴,而且解決了文本碎片化的問題。Transformer-XL是基於vanilla Transformer進行創新的,它不僅能比vanilla Transformer處理4.5倍長的長距離依賴關系,而且在評估期間要比vanilla Transformers快1800倍。
注1:文本碎片化是vanilla Transformer中會遇到的問題,因為vanilla Transformer只能處理固定長度的序列,如果序列過長,會將其切割成兩個或者多個序列,如果序列之間存在語義關系,而vanilla Transformer在編碼的時候會丟失這種語義關系(在編碼時,序列與序列之間不產生信息交換),產生文本碎片化問題。
Vanilla Transformer
VanillaTransformer輸入固定長度的序列,如果輸入序列比規定的長度長,則會將輸入序列不考慮語義的切割成多個segment,如下圖(a)所示。這種不考慮語義的切割方法,會導致文本碎片化問題,每個segment只能獲取到自己的語義信息,而丟失之前segment的語義信息。
而在評估時,vanilla模型只會考慮同樣長度的segment,一般它會取最后一個位置的隱向量作為輸出。如下圖(b)所示,在預測輸出時,模型每次會向右移動一步,並根據新的segment片段預測此刻的單詞。這種使用當前序列重新預測的方法,會導致計算量大增,預測速度較慢,且不能利用更早的信息。

Transformer-XL
1、片段級遞歸機制(segment-level recurrence mechanism):在Transformer中引入了循環機制,在訓練當前segment的時候,會保存並使用上一個segment每一層的輸出向量。這樣就可以利用之前segment的信息,提高Transformer長期依賴的能力,在訓練時前一個segment的輸出只參與前向計算,而不參與反向傳播。

如上圖所示,可以看出,在訓練當前segment時,Transformer-XL會利用前一個segment的信息(圖中綠色線段)。如果GPU內存允許,可以使用前多個segment的信息。
循環機制的另一個優點是測試速度快,它每次可以前進一個segment的距離,而不是像vanilla一樣,一次只能前進一個表征。
2、相對位置編碼(Relative Positional Encodings):Transformer中使用一個序列的絕對位置計算positional encoding,再與單詞的encoding相加即可。但是Transformer-XL中,將序列分成多個segment,每個segment都會存在相同位置的Embedding,positional encoding的位置信息就失去了意義。因此Transformer-XL提出了相對位置編碼,在計算當前位置隱向量的時候,考慮其互相依賴的token的位置關系。具體做法是,在計算attention score的時候,只考慮query向量與key向量的相對位置關系,並將這種相對位置關系加入到每一層Transformer的attention的計算中,具體的計算法師如下:
(1)內容權重:沒有添加原始位置編碼的原始分數
(2)相對於當前內容的位置偏差:指從前一個seglment的第一個位置(假設index為0)到當前segment的當前word的位置(假設index為k),則位置偏差為k-t,並對位置偏差使用正弦函數進行位置向量計算
(3)可學習的全局內容偏差:該模型添加了一個可學習的向量,用於調整其他表征內容(Kj)的重要性
(4)可學習的全局偏差:另一個可學習向量,僅根據表征之間的距離調整重要性(例如,最后一個詞可能比前一個segment中的詞更重要)
關於相對位置的具體計算方法,可以看[4]
參考資料:
[1] https://zhuanlan.zhihu.com/p/70745925
[2] https://www.infoq.cn/article/wt-KaTfcsAv9E7exzIkF
[3] https://zhuanlan.zhihu.com/p/84159401
[4] http://www.linzehui.me/2019/05/07/代碼相關/關於transformer-xl中rel-shift實現的解讀/
