語言模型
語言模型通常用條件概率分佈進行表示:
爲了實現,使用causal attention將當前詞後面的詞mask掉。causal attention其實與transformer的decode部分中的masked attention是一樣的。如下圖所示:
Multiple Positions
- 在論文中,訓練了一個64層的char-level的Transformer模型,因爲訓練一個深度的transformer太難了,收斂的會很慢。如下圖所示,對於一個char的prediction任務來說,transformer模型會把所有的context都輸入進來,然後再去做prediction。做inference的時候,transformer每次會重新計算所有的context,這點上比不過lstm,lstm可以做增量。
- 加快收斂的方法是在序列中的每個位置預測當前位置和當前位置之前的詞。
輔助損失 Auxiliary Losses
在剛開始進行訓練時,當transformer的層數超過10層後,模型收斂速度變慢性能變差,爲了解決這個問題加入了auxiliary losses.
Intermediate Layer Losses
1.除了在transformer的最上層進行下一個詞的預測以外,我們在transformer的每個中間層也進行了下一個詞的預測,這樣中間層的每個位置都會有對應的損失函數,就叫做中間層的auxiliary losses
2.隨着訓練的進行,網絡在一直收斂,這時底層的loss會變得越來越不重要。在論文中,如果有n層,那麼第l層將會在訓練步數的處不再起作用。這種設置將會使得在訓練到一半的時候,中間層上的損失就不再起作用了。層數越低,loss權重越低。
3.當然最後所有的損失函數都是要加入到總損失函數中去,再用總損失函數進行梯度下降算法進行學習。我們這裏使用的是加權求和,即每個輔助損失函數以一定的權重加入到總損失函數中去。
Multiple Targets loss
- 在序列中的每個位置,模型對下一個字符進行兩次(或更多次)預測。對每次預測我們使用不同的分類器,這樣我們對transformer的每一層的每個位置都會產出兩個或多個損失函數,選擇一共作爲主要損失,其他的都稱爲字符輔助損失。
- 每個位置的多個損失需要合併成當前位置的總損失,我們將每個輔助損失乘0.5加上主損失得到當前位置的總損失。
位置編碼 Positional Embeddings
- 在標準的transform中位置embeding用的是正弦曲線產生的時間信息,並且這個位置embeding是在輸入transformer最下層之前加入到詞embeding中去的。
- 由於模型深度比較深,這種時間信號可能在沿着transformer向上傳遞的時候發生丟失。爲了解決這個問題,在每一層添加一個維度512的Positional Embeddings矩陣,這些矩陣都是可學習的。這樣第i−1層的輸出加上第i−1層的Positional Embeddings後再輸入到第i層中去。