2017年6月,Google Brain在論文《Attention Is All You Need》中提出的Transformer架構,徹底摒棄了RNN的循環機制,採用一種self-attention的方式進行全局處理。我也在博客Attention Is All You Need(Transformer)算法原理解析有所介紹。html
Transformer結構的特色:算法
Vanilla Transformer是Transformer和Transformer-XL中間過分的一個算法,因此在介紹Transformer-XL以前咱們先來了解下Vanilla Transformer。網絡
Vanilla Transformer的原理圖:
架構
Vanilla Transformer論文中使用64層模型,並僅限於處理 512個字符這種相對較短的輸入,所以它將輸入分紅段,並分別從每一個段中進行學習,以下圖所示。 在測試階段如需處理較長的輸入,該模型會在每一步中將輸入向右移動一個字符,以此實現對單個字符的預測。函數
Vanilla Transformer的三個缺點:性能
Transformer-XL架構在vanilla Transformer的基礎上引入了兩點創新:學習
以克服Vanilla Transformer的缺點。與Vanilla Transformer相比,Transformer-XL的另外一個優點是它能夠被用於單詞級和字符級的語言建模。測試
Transformer-XL仍然是使用分段的方式進行建模,但其與Vanilla Transformer的本質不一樣是在於引入了段與段之間的循環機制,使得當前段在建模的時候可以利用以前段的信息來實現長期依賴性。以下圖所示:編碼
在訓練階段,處理後面的段時,每一個隱藏層都會接收兩個輸入:spa
在預測階段:
若是預測\(x_{11}\)咱們只要拿以前預測好的[\(x_1\),\(x_2\)...\(x_{10}\)]的結果拿過來,直接預測。同理在預測\(x_{12}\)的時候,直接在[\(x_1\),\(x_2\)...\(x_{10}\),\(x_{11}\)]的基礎上計算,不用像Vanilla Transformer同樣每次預測一個字就要從新計算前面固定個數的詞。
在Transformer中,一個重要的地方在於其考慮了序列的位置信息。在分段的狀況下,若是僅僅對於每一個段仍直接使用Transformer中的位置編碼,即每一個不一樣段在同一個位置上的表示使用相同的位置編碼,就會出現問題。好比,第\(i_2\)段和第\(i_1\)段的第一個位置將具備相同的位置編碼,但它們對於第\(i\)段的建模重要性顯然並不相同(例如第\(i_2\)段中的第一個位置重要性可能要低一些)。所以,須要對這種位置進行區分。
能夠將Transformer-XL中的attention的計算分爲以下四個部分: