XLNET原理详解
論文原文地址?arxiv.orgGitHub論文源碼下載?github.com
0. XLNet概述
XLNet是一個語言模型。和ELMO,GPT,BERT一脈相承,同時借鑒了Transformer-XL,故稱XLNet(XL含義源于衣服尺碼,意思是模型橫向更寬);并提出一些新方法改善了Bert存在的問題,目前取得了全面超越Bert的成果。和Bert一樣,XLNet也分為Pre-train和Fine-tune兩階段;并且參數規模比Bert更大。
1. AR(autoregressive) vs AE(autoencoding)
AR譯為自回歸,意思是對于序列 ,根據 預測 。GPT,ELMO都屬于AR語言模型。
AE譯為自編碼,意思是將序列 編碼為 。Bert屬于AE語言模型。
AR的缺點在于序列要么從前往后,要么從后往前,無法將上文和下文信息完全結合起來(ELMO只是將兩個方向concat)。AE模型的缺點在于Pre-train階段可能需要引入 標記(Bert模型),而 會帶來一系列問題。
2. Bert的痛點
得益于同時使用上文和下文信息,Bert取得了比GPT更好的效果。但是Bert需為此在Pre-train階段引入 標記,通過上下文來預測這些被mask的token。
引入 標記帶來一下兩個問題:
2.1 獨立性假設:Bert假設不同[mask]相互獨立,忽略了[mask]之間的相關性
設被mask的token集合為 ,整個序列為 ,Bert的訓練目標是最大化聯合概率分布 。在計算此概率分布的過程中,Bert會假設所有被mask的token( 中的token)相互之間都是獨立的,這樣就丟失了不同masked token之間的關聯。
論文中舉了一例,現有序列 ,
Bert如果隨機選擇了 和 進行mask并預測,則mask后序列變為
此時應該優化的目標是:
但實際上bert的優化目標是:
若要滿足 , 則有
即New和York相互獨立。但顯然它們不太獨立,如果前面出現了“New”,那么后面出現“York”的概率理應大很多。
2.2 Pre-train階段和Fine-tune階段數據分布不一致
Bert在Pre-train階段需要對語料使用 標記;但在Fine-tune階段,所用語料中并沒有 標記。這導致兩個階段的訓練數據分布不一致,影響Fine-tune效果。
3. XLNet如何解決bert的缺陷
如果有一種模型,既能結合上文和下文,又能避免bert由于 導致的獨立性和數據分布一致性問題,就兩全其美了。為此,XLNet使用一系列方法,構造出了一種能夠結合上文和下文的AR模型。
排列組合獲取上下文信息
為了在不改變AR模型基本結構的條件下引入下文信息,XLNet使用了對輸入序列“排列組合”的方法,把下文信息排到前面,賦予了單向模型感知下文的能力。例如,現有序列 ,只需改變其順序,變換出 、 、 等序列,即可讓3看到4,2看到3和4,1看到2、3、4。下圖為不同排列方式下,位置"3"所能關注的位置示意圖(只能關注序列中在它之前的部分):
將上述過程形式化,設 為長度為 的序列 的所有可能的排列, 為其中一種排列方式,, 為第其中 個元素, 為前 個元素。優化目標為 :
仍以序列 為例:
這樣,任何一個元素都可因排列組合方式的變換而成為序列最后一個元素 ,從而能夠看到所有上下文信息。
注意,排列組合并不是真的使用原始序列生成新的排列組合序列,并抽樣產生新的增強數據集來完成的,因為這種做法仍然會造成Pre-train和Fine-tune的語料分布不一致。XLNet的做法是在計算attention時mask掉對應位置,不同的mask對應不同的序列。后文將詳述此法。
雙流注意力
上述模型中,設 為 的hidden表示,則使用softmax計算next-token的分布時有:
由上式可知計算目標概率分布時, 根本沒有出現,這就丟失了 代表的原始序列中位置的信息。也就是說 處于句子任何位置都一樣。
形式化表述,設 ,但是 ,
此時有 ,(原文此公式應該是有小筆誤,將一個2寫成1)顯然和ground-truth沖突。
舉個例子,有序列 [暴雨,造成,大面積,晚點] ,產生排列組合序列 [暴雨,造成,大面積] 和 [暴雨,造成,晚點] , 則 就是共同的前置序列 [暴雨,造成], 就是"大面積", 就是"晚點"。它們 相等,也就是"大面積"和"晚點"出現的概率等價,不合邏輯。
注意,即使像Bert那樣在輸入中加入位置向量,仍無法避免 處位置信息缺失,原因如下圖:
要解決這個問題,就必須引入位置信息 ,然后將 變為 ,調整后的概率分布的計算公式如下:
XLnet為 和 分別開辟一條attention流。因此稱為雙流attention。論文中給出的原理圖示如下:
和 的計算公式如下:
注意,一個是 ,一個是 。在 中,m代表編碼器層數, , 。 是隨機初始化的向量(位置向量?), 是隨機初始化的詞向量。
另外,你可能會發現在計算 時,由于 , 為空。如下圖:
難道這時候所有attention權重都為0, 計算出來也是0向量?當然不是。因為XLNet還有memory機制和殘差連接(與transformer編碼器相同),保證 不是0向量。
4. XLNet如何降低訓練開銷
用了“排列組合”技術后,理論上每個原始序列的每種排列組合序列里的每一個位置 都可以作為target來訓練。但是這樣搞訓練開銷太大,畢竟Bert只在更少的語料上挑了原始序列中15%的位置,普通玩家就已經玩不轉了。XLNet的解決辦法是只把一部分位置作為target進行訓練,那么如何選取這一部分位置呢?XLNet這里是把一個序列 劃分為兩段,只對后一段進行訓練。
例如 只訓練3和4,不訓練1和2。
具體地,就是取一個位置 , 滿足 , 不作為target, 作為target進行訓練。關于 值的選取,作者給出了一個超參 ,滿足 ,作者設置 。
優化目標變為:
5. Transformer-XL與memory
在實際應用中,遇到超長序列(篇章,對話等),通常需要拆成sentence級別的短序列,這樣割裂了短序列之間的聯系。對于這個問題,Transformer-XL的做法是把上一個短序列各層輸入的一部分作為memory緩存,和當前各層的輸入拼接,以獲取上文的信息。
具體地,設長序列為 ,分為前序列 ,后序列 。加入memory機制后, 的計算公式變為:
attention mask也變為如下模樣(自己理解的,可能有誤):
事實上,XLNet并不將整個 放入memory,而是截取其中一部分。根據論文列出的超參,序列長度最大為512,memory最大長度為384。
6. 整體計算過程
XLNet和transformer一樣,每層都要加入前饋連接,層歸一化,以及前饋網絡。
對
下圖為 和 的整體注意力計算示意圖:
7. 總結
XLNet這篇paper中,排列組合序列,雙流注意力,memory機制都是非常值得學習和借鑒的思路。但是在模型越來越大的趨勢下,自己動手pre-train已經不可能。只有坐等大廠放出基于中文語料pre-train的模型了。
目前依然有一些細節,在論文中沒有明確體現。例如:
排列組合模式如何采樣
對一個原始序列的排列組合有 種,不可能全都都用。如何對排列組合進行采樣,文中沒有具體說。
memory的實現細節
memory的實現細節(如何mask)還需推敲,需要研讀源碼以及transformer-XL論文
總結
- 上一篇: 穿越火线生化模式扩展包到底讲了什么穿越火
- 下一篇: 微服务分布式电商项目《谷粒商城》学习笔记