# 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