【NLP-16】Transformer-XL


目錄

  1. 背景
  2. vanilla Transformer
  3. Transformer-XL解析
  4. 總結

一句話簡介:Transformer-XL架構在vanilla Transformer的基礎上引入了兩點創新:循環機制(Recurrence Mechanism)和相對位置編碼(Relative Positional Encoding),以克服vanilla Transformer的長距離獲取弱的缺點。

   

一、背景

Transformer結構的特點

  1. 全部用self-attention的自注意力機制。
  2. 在self-attention的基礎上改進了Multi-Attention和Mask Multi-Attention兩種多頭注意力機制。
  3. 網絡由多個層組成,每個層都由多頭注意力機制和前饋網絡構成。
  4. 由於在全局進行注意力機制的計算,忽略了序列中最重要的位置信息,添加了位置編碼(Position Encoding),使用正弦函數完成,為每個部分的位置生成位置向量。

Transformer模型在輸入時采用的是固定長度序列輸入,且Transformer模型的時間復雜度和序列長度的平方成正比,因此一般序列長度都限制在最大512,因為太大的長度,模型訓練的時間消耗太大。此外Transformer模型又不像RNN這種結構,可以將最后時間輸出的隱層向量作為整個序列的表示,然后作為下一序列的初始化輸入。所以用Transformer訓練語言模型時,不同的序列之間是沒有聯系的,因此這樣的Transformer在長距離依賴的捕獲能力是不夠的,此外在處理長文本的時候,若是將文本分為多個固定長度的片段,對於連續的文本,這無異於將文本的整體性破壞了,導致了文本的碎片化,這也是Transformer-XL被提出的原因。

二、VanillaTransformer

為何要提這個模型?因為Transformer-XL是基於這個模型進行的改進。

transformer作為一種特征提取器,在NLP中有廣泛的應用。但是Trm需要對輸入序列設置一個固定的長度,比如在BERT中,默認長度是512。如果文本序列長度短於固定長度,可以通過填充的方式來解決。如果序列長度超過固定長度,處理起來就比較麻煩。

一種處理方式,就是將文本划分為多個segments。訓練的時候,對每個segment單獨處理,segments之間沒有聯系,如下圖(a)所示。在預測的時候,會對固定長度的segment做計算,一般取最后一個位置的隱向量作為輸出。為了充分利用上下文關系,在每做完一次預測之后,就對整個序列向右移動一個位置,再做一次計算,如上圖(b)所示,這導致計算效率非常低。

該模型容易發現有以下缺點:

  1. 上下文長度受限:字符之間的最大依賴距離受輸入長度的限制,模型看不到出現在幾個句子之前的單詞。
  2. 上下文碎片:對於長度超過512個字符的文本,都是從頭開始單獨訓練的。段與段之間沒有上下文依賴性,會讓訓練效率低下,也會影響模型的性能。
  3. 推理速度慢:在測試階段,每次預測下一個單詞,都需要重新構建一遍上下文,並從頭開始計算,這樣的計算速度非常慢。

三、Transformer-XL解析

Transformer-XL架構在vanilla Transformer的基礎上引入了兩點創新:循環機制(Recurrence Mechanism)和相對位置編碼(Relative Positional Encoding),以克服vanilla Transformer的缺點。與vanilla Transformer相比,Transformer-XL的另一個優勢是它可以被用於單詞級和字符級的語言建模。

3.1 引入循環機制

與vanilla Transformer的基本思路一樣,Transformer-XL仍然是使用分段的方式進行建模,但其與vanilla Transformer的本質不同是在於引入了段與段之間的循環機制,使得當前段在建模的時候能夠利用之前段的信息來實現長期依賴性。如下圖所示:

在訓練階段,處理后面的段時,每個隱藏層都會接收兩個輸入:

  1. 該段的前面隱藏層的輸出,與vanilla Transformer相同(上圖的灰色線)。
  2. 前面段的隱藏層的輸出(上圖的綠色線),可以使模型創建長期依賴關系。

這兩個輸入會被拼接,然后用於計算當前段的Key和Value矩陣。對於某個段的某一層的具體計算公式如下:

在上面式子中τ表示上一片段,τ+1表示下一片段。將上一片段的輸出緩存起來,然后直接和下一片段的隱層拼接在一起,得到上面的第一個式子。 在這里SG()的含義是stop-gradient。另外這個引入了上一片段的隱層表示只會用在key和value上,對於query還是保持原來的樣子(得到中間的表達式形態)。這樣做也好理解,query只是表示查詢的詞,而key,value表示的是這個查詢的詞的相關信息,我們要改變的是只是信息,因此只要在key,value中引入上一片段的信息就可以了,剩下的就和Transformer一致。

原則上只要GPU內存允許,該方法可以利用前面更多段的信息,測試階段也可以獲得更長的依賴。

在測試階段,與vanilla Transformer相比,其速度也會更快:在vanilla Transformer中,一次只能前進一個step,並且需要重新構建段,並全部從頭開始計算;而在Transformer-XL中,每次可以前進一整個段,並利用之前段的數據來預測當前段的輸出。

3.2 相對位置編碼

Transformer中,一個重要的地方在於其考慮了序列的位置信息。在分段的情況下,如果僅僅對於每個段仍直接使用Transformer中的位置編碼,即每個不同段在同一個位置上的表示使用相同的位置編碼,就會出現問題。(下式中U表示位置向量)

論文對於這個問題,提出了一種新的位置編碼的方式,即會根據詞之間的相對距離而非像Transformer中的絕對位置進行編碼。Transformer中的attention權重計算公式如下:

將其展開可以分解成下面四個部分。 第一層的計算查詢和鍵之間的attention分數的方式為:

E表示embeddingU 表示位置向量。在Transformer-XL中,對上述的attention計算方式進行了變換,轉為相對位置的計算,而且不僅僅在第一層這么計算,在每一層都是這樣計算。

對比來看:

  1. 在(b)和(d)這兩項中,將所有絕對位置向量都轉為相對位置向量 ,與Transformer一樣,這是一個固定的編碼向量,不需要學習。
  2. 在(c)這一項中,將查詢的向量轉為一個需要學習的參數向量u,因為在考慮相對位置的時候,不需要查詢絕對位置 i,因此對於任意的 i,都可以采用同樣的向量。同理,在(d)這一項中,也是一樣
  3. 將鍵的權重變換矩陣轉為和,分別作為content-based key vectors和location-based key vectors。

從另一個角度來解讀這個公式的話,可以將attention的計算分為如下四個部分:

a. 基於內容的"尋址",即沒有添加原始位置編碼的原始分數。

b. 基於內容的位置偏置,即相對於當前內容的位置偏差。

c. 全局的內容偏置,用於衡量key的重要性。

d. 全局的位置偏置,根據querykey之間的距離調整重要性。

將上面的式子合並后,可以得到:

上面整個即使Transformer-XL的兩個改變:前面是內容,后面是位置。

3.3 整體公式計算

結合上面兩個創新點,將Transformer-XL模型的整體計算公式整理如下,這里考慮一個N層的只有一個注意力頭的模型:

四、總結

1. 模型特點

在 AI-Rfou 等人提出的vanilla Transformer上做了兩點創新:

  1. 引入循環機制(Recurrence Mechanism)
  2. 相對位置編碼(Relative Positional Encoding),這個是解決上面創新帶來的問題而產生的。

2. 優點

  1. 與vanilla Transformer相比,Transformer-XL的另一個優勢是它可以被用於單詞級和字符級的語言建模【說明:這個沒有理解從哪方面體現的】。在幾種不同的數據集(大/小,字符級別/單詞級別等)均實現了最先進的語言建模結果。
  2. 結合了深度學習的兩個重要概念——循環機制和注意力機制,允許模型學習長期依賴性,且可能可以擴展到需要該能力的其他深度學習領域,例如音頻分析(如每秒16k樣本的語音數據)等。
  3. 在inference階段非常快,比之前最先進的利用Transformer模型進行語言建模的方法快300~1800倍。
  4. 有詳盡的源碼!含TensorFlow和PyTorch版本的,並且有TensorFlow預訓練好的模型及各個數據集上詳盡的超參數設置。

3. 不足

  1. 尚未在具體的NLP任務如情感分析、QA等上應用。
  2. 沒有給出與其他的基於Transformer的模型,如BERT等,對比有何優勢。
  3. 在Github源碼中提到,目前的sota結果是在TPU大集群上訓練得出,對於我等渣機器黨就只能玩玩base模式了。

參考文獻

1】論文:https://arxiv.org/pdf/1901.02860.pdf

2】代碼:https://github.com/kimiyoung/transformer-xl

3】英文參考:https://www.lyrn.ai/2019/01/16/transformer-xl-sota-language-model

4Transformer-XL解讀(論文 + PyTorch源碼): https://blog.csdn.net/magical_bubble/article/details/89060213


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM