---
# System prepended metadata

title: XLNET
tags: [paper]

---

# XLNET 
###### tags: `paper`
https://medium.com/ai-academy-taiwan/2019-nlp%E6%9C%80%E5%BC%B7%E6%A8%A1%E5%9E%8B-xlnet-ac728b400de3
https://zhuanlan.zhihu.com/p/70257427
https://www.mdeditor.tw/pl/pkxA/zh-tw
https://carlos9310.github.io/2019/11/11/transformer-xl-and-xlnet/#xlnet
## AutoRegressive(AR):
-------------------
又稱自迴歸，即給定一段Sequence {x1,x2,…,xt}, 在Pre-train時使用{x1}預測x2,接著使用{x1,x2}預測x3,直到最後使用{x1,…,xt-1}預測xt，這種性質的模型往往都認為下一個字的出現依賴於上文
EX:GPT,elmo
也就是找出一個參數θ最大化{x1,x2,…,xt}的log-likelihood (Eq.1)。


## AutoEncoding(AE):
-----------------

又稱自編碼，這種模型的早期的提出是為了降維
而常見的降噪例如說音訊雜質或是圖片的污點等等，而在Pre-train模型中首次有使用到DAE的模型就是BERT的**MLM**(Masked Language Model)
然後再還原的作法可以視為一種DAE
但是作者認為Mask只有在Pre-train時會用到，在Finetune時就完全不會用到，這會造成Pre-train和Finetune之間資訊不對稱的問題(Input noise)，而這也是XLNet想要解決的方向

另外BERT隨機將15%的token使用**<Mask>**，若當一個Sequence要預測的**<Mask>**有兩個以上時，以BERT的訓練方式是同時輸出**<Mask>**的位置，這會造成**<Mask>**之間相互獨立的現象
但是在BERT的訓練方式則是用{x1,x2,x5}來一起預測{x3,x4}
所以說為了解決這個情況，必須套用AR的想法，先預測x3再預測x4。(動機)

## related work
之前採用permutation-based AR 都目標是要提升density estimation(藉由orderness)(?)



## Permutation Language Modeling
=============================

XLNet的想法就是要使用AR的方式來預測單詞，又要能在不使用Mask token的前提下學習到上下文的資訊，所以XLNet提出的Permutation Language Modeling(PLM)，即使用permutation實現上下文對於單詞的預測，其實訓練方式還是transfomer的self-attention，只是對輸入與attention matrix進行一點修飾。

即先做一次隨機排列 Ex:x1,x2,x3,x4 -> x2,x4,x3,x1
然後隨機選一個target作為預測目標
注意:並不會每當你排列一次，都要記錄當前的排列前後的對照，然後在預測完後依照dictionary排回來，所以作者選擇在不更動原始Sequence順序的前提下，使用mask實現AR+permutation。

![](https://i.imgur.com/B4VEVas.png)






## Two-Stream Self-Attention
=========================
筆者前面介紹了PLM如何捕捉上下文，但是還沒解決如何取代<Mask>這個token，在BERT中，**<Mask>**告訴了模型要預測的**單詞位置**還有**前後文關係**，而在XLNet則是用Two-Stream Self-Attention來實現這兩種目的，分別是Conten stream以及Query stream:

只拿position而不是content是因為如果拿content就會變成Non-trivial

Non-trivial就是具有一定复杂度

only predict the last tokens in a factorization order


整個XLNet在Pre-train時分為兩個stream，Content stream負責學習上下文，而Query stream這個角色就是用來代替**<Mask>**token，其負責把Content stream產生的representation拿來做預測，如同BERT的**<Mask>**一樣，Query stream只有在Pre-train時預測單詞會用到，到了Finetune時就不會用到了，以下介紹這兩個stream的作法:
### Content Stream
--------------
Content Stream是一個標準的self-attention
![](https://i.imgur.com/EnqOa5y.png)
![](https://i.imgur.com/AiQYUBX.png)


### Query Stream
--------------
Query Stream負責在Pre-train擔任預測單詞的作用
因為在預測單詞時不允許模型看到當前的token是什麼，所以作者在這邊另外設置一個representation g來去attend其他位置
Query stream會把當前t位置的attention weight mask掉。
![](https://i.imgur.com/OVrWdwU.png)

差別:query時會把自己mask掉
query時就是跟content時一樣只是去掉自己

各位會發現Query Stream為了防止模型看到當前的token，會把對角線的attention weight mask掉
針對Query stream有一個需要注意的地方，也就是PLM會造成預測一對多的情形
計算時會告知模型預測(答案)位置(ZT)
(為one-hot vector)即只有該位置為1 其餘項目都為0

## Long Text Understanding
=======================

為了讓模型有大型文本的學習能力，借鑑[Transformer-XL](https://arxiv.org/abs/1901.02860)的Segment recurrence mechanism和Relative positional encoding的方法，

## Segment recurrence mechanism

-   引入memory模組(cache之前一個或多個segment的隱狀態資訊)，迴圈建模片段間的聯絡
    

-   使超長距離依賴關係的編碼成為可能
    
-   使得片段之間產生互動，解決了上下文碎片化問題
當模型處理下一個新段(segment)時，前一段序列中的隱狀態資訊被固定並快取，作為擴充套件上下文重用

除了獲得超長的上下文並解決了碎片問題，遞迴方案的另一個好處是評估速度明顯加快，其可重複使用先前segment的表示，不必像圖1中那樣從頭開始計算
 ### Relative Positional Encodings
recurrent機制使得先前的絕對位置編碼方案不再適用，因為在多個segment中會出現多個同樣的位置資訊。 為此，作者們提出一種新的相對位置編碼形式。其不僅與絕對位置一一對應，而且具有更好的泛化性。

有2個位置變數i,j 如果 i,j是在同個segment 則sij=s+ or s-  其中 s+,s-為要學的參數
代表只在乎這2個位置(i,j)是否在同個segment 而不是在segment中的哪個位置 此為relative encoding的 core idea: modeling the relationships between positions

優點:
1. improves generalization
2.可以finetune 當有2個以上的input segment時

## partial prediction
因為不像MLM只用預測部分token，還需要計算permutation，XLNet的計算量更大了，因此作者提出了partial prediction進行簡化，即只預測後面1/K個token。

![](https://i.imgur.com/ohHgLb6.png)


## ablation study
所以为了验证A、B两个模块是不是真的都有用，你需要做ablation study。方法也很简单：

1.  在baseline的基础上加上模块A，看效果。
2.  在baseline的基础上加上模块B，看效果。
3.  在baseline的基础上同时加上模块AB，看效果。




## conclusion
XLNet最主要的貢獻在於使用PLM讓AR和learning bidirectional contexts共存,並另外使用一個Query stream來代替BERT的<Mask>
接著借鑑Transformer-XL實現大型文本學習

最令筆者驚嘆和在意的還是PLM與AR之間的衝突
因為PLM會隨機把單詞順序打亂而AR的預測方式是有順序性的
單詞順序在XLNet眼前感覺根本沒必要，只需要Attention搭配預測Target
就能夠無視單詞順序之間的關係





### 問題
XLNET缺點為何 為何現在不用了
感覺只是因為更好的出現了 BART AutoRegressive decoder
並且bart的noising也有permulaltion這個參考xlnet的

為何需要加位置 bert attention機制

把參數量跟甚麼同步 : and same data

SPANBASAE PRED
BIDERCTIONAL DATA :where each of the forward and backward directions takes half of the batch size
