解決的問題
Transformer的自注意力機制可以讓長距離的單詞直接聯系,可以很容易地學習到句子之間的長距離依賴。但是在将Transformer應用在語言模型時,核心的問題在于如何将任意長度的context編碼成固定長度的上下文變量。
普遍的做法是将整個語料庫劃分成較短的片段,在每個片段上訓練模型。但是這麼做很有幾個問題:
- 最大可能依賴長度不會超過片段的長度
- 語料庫按照固定長度而不是按照語義或者句子的分界劃分進行分片,導緻分片之間無法共享資訊。這樣情況下訓練的語言模型會丢失一部分上下文資訊,導緻收斂速度和性能不符合預期。論文把這個問題成為上下文碎片問題。
貢獻
- 在Transformer的基礎上提出segment-level recurrence mechanism、新的位置編碼模式兩種方法使得Transformer-XL能夠在不破壞時間一緻性的情況下,學習固定長度之外依賴關系并且解決上下文碎片問題
結果
- 學習依賴的範圍比RNN(LSTM)高出80%,比Transformer高出450%,
- evaluation過程速度比Transformer提高1800倍。
- 在5個語言模型資料集上取得SOAT成績。
Recurrent mechanism機制
前一個分片的隐藏狀态被儲存下來作為計算下一個分片隐藏狀态的擴充輸入。這種方法能夠在計算目前分片隐藏狀态的時候使用到上文的資訊,進而可以有效的避免上下文碎片并且增加依賴的長度。具體來說,前一個分片第n-1層的隐藏狀态被儲存下來,與目前分片的第n-1層的隐藏狀态一起作用生成目前分片第n層的隐藏狀态。這種“循環”利用上個分片的隐藏狀态的方法能夠有效加長期依賴的範圍。

其中,下标 τ + 1 和 τ \tau+1和\tau τ+1和τ分别表示分片的編号,上标 n 和 n − 1 n和n-1 n和n−1表示目前計算的隐藏狀态在模型中的層數, q 、 k 、 v q、k、v q、k、v分别表示計算注意力需要的查詢(query)、鍵(key)和值(value)向量, W W W表示模型的參數矩陣。首先第 τ \tau τ個分片第n-1層的隐藏狀态 h τ n − 1 h_{\tau}^{n-1} hτn−1被保留下來,做停止更新梯度的操作之後和第 τ + 1 \tau + 1 τ+1個分片第n-1層的隐藏狀态 h τ + 1 n − 1 h_{\tau+1}^{n-1} hτ+1n−1做拼接得到融合了上文資訊的新狀态 h ~ τ + 1 n − 1 \tilde{h}_{\tau + 1}^{n-1} h~τ+1n−1,新狀态被用來計算key和value向量,query向量則使用原始的隐藏狀态 h τ + 1 n − 1 h_{\tau+1}^{n-1} hτ+1n−1計算。最後三個向量作為Transformer的輸入計算第 τ + 1 \tau+1 τ+1分片n層的隐藏狀态 h τ + 1 n h_{\tau+1}^{n} hτ+1n。
相對位置編碼(Relative Position Encoding)
從上面介紹的Recurrent機制中,我們知道目前分片的隐藏狀态融合了前一個分片的資訊,問題在于不同的分片的隐藏狀态計算過程中使用到的初始輸入的位置編碼是相同的。這樣模型無法根據位置編碼差別不同分片中相同位置的輸入單詞。
解決的辦法是在每一層的隐藏狀态計算時都加入相對位置編碼。實際上,位置編碼的作用是在計算注意力的時候提供時序的線索以組合分片中不同單詞的資訊,在相對位置編碼的設定下,正弦編碼矩陣 R R R的每一行 R i R_i Ri表示相對位置內插補點為 i i i時的相對位置編碼。在注意力計算過程中使用相對位置編碼,使得目前分片的查詢向量 q τ q_{\tau} qτ可以卻分不同分片的相同位置的輸入 x τ , j x_{\tau,j} xτ,j和 x τ − 1 , j x_{\tau -1, j} xτ−1,j。
上圖是transformer的一個注意力頭使用絕對位置編碼的注意力得分你的公式,可以拆分為四個部分。使用相對位置編碼替換絕對位置編碼分為三步,第一步将(b)、(d)兩項末尾的絕對位置編碼 U j U_j Uj替換成相對位置編碼<u U i − j U_{i-j} Ui−j,矩陣R是一個正弦編碼矩陣,沒有科學系的參數;第二步引入可訓練的參數 u u u代替©項的 U i T W q T U_i^TW_q^T UiTWqT,對于任何的query位置,query向量都是一樣的,也就是對不同單詞的注意力傾向是相同的,同理(d)像用另一個可學習參數 v v v代替;第三步,分離兩個權重矩陣 W k , E W_{k,E} Wk,E和 W k , R W_{k,R} Wk,R,分别産生基于内容的key向量和基于位置的key向量。
Attention head的計算過程
整個計算過程其實就是将上面兩個部分連在一起,首先時候分段重用機制融合之前分段資訊計算得到查詢、鍵、值向量,然後使用相對位置編碼替換絕對位置編碼計算注意力得分,最後經過前向網絡得到目前分段的新的隐藏狀态,輸出給下一層的Transformer子產品。
Evaluation速度巨大提高
評估的時候,Transformer每次預測一個新詞都需要将其前L個詞作為一個分片,以保證每次預測都能使用到最長的上文的資訊。但是這種預測方式需要很大的計算力。Recurrent機制能夠極大程度的加速了evaluation的過程,因為保留了前一個分片的隐藏狀态,而不是每次預測新詞都從頭開始計算,進而達到了加速的效果。
實驗結果
Transformer-XL在五個資料集上語言模型的資料集上取得了SOAT成績,包括character-level的WikiText-103、enwiki8、text8和One Billion Word四個資料集和word-level的Penn Treebank資料集。
WikiText-103資料集包含28K篇文章的103M個字元,平均每篇文章包含3.6K個字元。這個資料集可以有效的評估模型處理長期依賴的能力。
enwik8包含了100MB未處理的Wikipedia的文本。與enwiki8相似,text8同樣包含了100MB的Wikipedia文本,差別在于移除了26個字母和空格以外的其他字元。
One Billion Word資料集,顧名思義包含有10億個單詞,但是該資料集将所有的句子的順序進行打亂,因而沒有保留句子與句子之間的長期依賴。但是transformer-XL依然在這個資料集上超過傳統Transormer,說明transformer-XL在處理短句子時的泛化能力。
Penn Treebank隻包含1M個字元,作者認為在該資料集上取得SOAT結果說明transformer-XL對于小資料集也具有良好的泛化能力。