免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
什么是XLNet中的雙流自注意力

理解XLNet中的雙流自注意力機(jī)制。

在我之前的文章什么是XLNet,它為什么比BERT效果好?中,我主要討論了XLNet (AR語言模型)和BERT (AE語言模型)之間的區(qū)別以及重排列語言建模。
我相信對XLNet有一個直觀的理解遠(yuǎn)比實(shí)現(xiàn)細(xì)節(jié)重要,所以我只解釋了重排列語言建模,而沒有提到另一個重要的部分,雙流自注意力架構(gòu)。但正如陳家明在評論中提到的,雙流自注意力是XLNet論文的另一個亮點(diǎn),所以我寫這篇文章是為了盡可能清楚地解釋雙流自注意力。
內(nèi)容結(jié)構(gòu)如下。
  • 重排列語言建模的快速回顧
  • 重排列帶來了什么問題?
  • BERT有這樣的問題嗎?
  • XLNet如何解決這個問題?
  • 注意力mask:XLNet如何實(shí)現(xiàn)重排列?


重排列建模的快速回顧

特殊的術(shù)語:
  • AR語言模型:自回歸語言建模
  • AE語言模型:自動編碼器語言建模
為了使這篇文章更加獨(dú)立,我在這里做一個簡短的總結(jié):什么是XLNet,為什么它的性能優(yōu)于BERT。
XLNet提出使用重排列語言建模,使AR語言模型學(xué)習(xí)雙向上下文。這樣可以避免AE語言模型中MASK方法帶來的弊端。
重排列方法是獲取一個序列的重排列,并使用之前的t-1個tokens作為上下文來預(yù)測第t個位置的token。例如,我們有一個句子[x1, x2, x3, x4],而x3是我們要預(yù)測的第t個位置的token。首先,我們得到句子的排列。
[('x1', 'x2', 'x3', 'x4'), ('x1', 'x2', 'x4', 'x3'), ('x1', 'x3', 'x2', 'x4'), ('x1', 'x3', 'x4', 'x2'), ('x1', 'x4', 'x2', 'x3'), ('x1', 'x4', 'x3', 'x2'), ('x2', 'x1', 'x3', 'x4'), ('x2', 'x1', 'x4', 'x3'), ('x2', 'x3', 'x1', 'x4'), ('x2', 'x3', 'x4', 'x1'), ('x2', 'x4', 'x1', 'x3'), ('x2', 'x4', 'x3', 'x1'), ('x3', 'x1', 'x2', 'x4'), ('x3', 'x1', 'x4', 'x2'), ('x3', 'x2', 'x1', 'x4'), ('x3', 'x2', 'x4', 'x1'), ('x3', 'x4', 'x1', 'x2'), ('x3', 'x4', 'x2', 'x1'), ('x4', 'x1', 'x2', 'x3'), ('x4', 'x1', 'x3', 'x2'), ('x4', 'x2', 'x1', 'x3'), ('x4', 'x2', 'x3', 'x1'), ('x4', 'x3', 'x1', 'x2'), ('x4', 'x3', 'x2', 'x1')]
然后選取一些樣本作為訓(xùn)練數(shù)據(jù)。(本文從排列中隨機(jī)抽取樣本)
('x1', 'x2', 'x4', 'x3'),('x1', 'x4', 'x3', 'x2'),('x2', 'x3', 'x4', 'x1'),('x4', 'x2', 'x3', 'x1'),('x3', 'x2', 'x4', 'x1'),v
我們可以看到每個token都有機(jī)會出現(xiàn)在x3之前。因此,AR模型可以從這些上下文tokens中學(xué)習(xí)雙向信息。如果你仍然不清楚重排列,你可以閱讀前面的文章。


重排列帶來了什么問題?

這種重排列可以使AR模型從兩個方向看到上下文,但也帶來了原transformer 無法解決的問題.
重排列語言建模目標(biāo):
  • Z:一種分解順序
  • p_θ:似然函數(shù)
  • x_zt:分解順序中的第t個token
  • x_z<t:第t個token之前的所有tokens
這是重排列語言建模的目標(biāo)函數(shù),即以t-1個tokens為上下文,預(yù)測第t個token。
有兩個標(biāo)準(zhǔn)Transformer不能滿足的要求:
  1. 為了預(yù)測token x_t,模型應(yīng)該只看到x_t的位置,而不是x_t的content(我將在下一節(jié)解釋什么是content)
  2. 為了預(yù)測token x_t,模型應(yīng)該將x_t之前的所有token編碼為content
特別是第一個要求,transformer將位置編碼合并到token嵌入中。因此,它不能將位置信息與token嵌入分離開來。


BERT有這樣的問題嗎?

BERT是一個AE語言模型,它不像AR語言模型那樣需要單獨(dú)的位置信息。與XLNet需要位置信息來預(yù)測第t個token不同,BERT使用[MASK]來表示要預(yù)測哪個token(我們可以認(rèn)為[MASK]只是一個占位符)。例如,如果BERT使用x2, x1, x4來預(yù)測x3,那么x2, x1, x4的嵌入包含了位置信息和其他與[MASK]相關(guān)的信息。因此,該模型很有可能預(yù)測[MASK]是x3。
在這里我將對信息做更詳細(xì)的說明。BERT embedded (BERT所學(xué)的信息)包含兩種信息:位置信息和內(nèi)容信息(為簡單起見,我將其分為兩部分)。
位置信息很容易理解,因?yàn)樗嬖V模型當(dāng)前token的位置。內(nèi)容信息(語義和語法)包含當(dāng)前標(biāo)記的“意義”。一個直觀的例子是kind — man + woman = queen。


XLNet怎么解決這個問題?

XLNet提出了雙流自注意力來解決這個問題。
顧名思義,它包含兩種自注意力。一個是content stream attention,它是Transformer中的標(biāo)準(zhǔn)自注意力。另一個是query stream attention。XLNet引入它來替換BERT中的[MASK] token。
例如,如果BERT想用上下文單詞x1和x2的知識來預(yù)測x3,它可以使用[MASK]來表示x3 token。[MASK]只是一個占位符。x1和x2的嵌入包含位置信息,幫助模型“知道”[MASK]的是x3。
XLNet的情況有所不同。一個token x3將服務(wù)兩種角色。當(dāng)它被用作內(nèi)容來預(yù)測其他標(biāo)記時,我們可以使用內(nèi)容表示(通過內(nèi)容流注意力來學(xué)習(xí))來表示x3。但是如果我們想要預(yù)測x3,我們應(yīng)該只知道它的位置而不是它的內(nèi)容。這就是為什么XLNet使用查詢表示(通過查詢流注意力來學(xué)習(xí))來保留x3之前的上下文信息,只保存x3的位置信息。
為了直觀地理解雙流自注意力,我們可以認(rèn)為XLNet用查詢表示代替了BERT中的[MASK]。他們只是選擇不同的方法做同一件事。


注意力mask:XLNet如何實(shí)現(xiàn)重排列?

當(dāng)我第一次讀到這篇文章的時候,我不禁對訓(xùn)練中重排列的實(shí)現(xiàn)細(xì)節(jié)產(chǎn)生了疑惑。如果你們感興趣,我就簡單講一下。
在第一部分“重排排列語言建模的快速回顧”中,我給出了一個句子[x1, x2, x3, x4] 的排列示例,如下所示。
[('x1', 'x2', 'x3', 'x4'), ('x1', 'x2', 'x4', 'x3'), ('x1', 'x3', 'x2', 'x4'), ('x1', 'x3', 'x4', 'x2'), ('x1', 'x4', 'x2', 'x3'), ('x1', 'x4', 'x3', 'x2'), ('x2', 'x1', 'x3', 'x4'), ('x2', 'x1', 'x4', 'x3'), ('x2', 'x3', 'x1', 'x4'), ('x2', 'x3', 'x4', 'x1'), ('x2', 'x4', 'x1', 'x3'), ('x2', 'x4', 'x3', 'x1'), ('x3', 'x1', 'x2', 'x4'), ('x3', 'x1', 'x4', 'x2'), ('x3', 'x2', 'x1', 'x4'), ('x3', 'x2', 'x4', 'x1'), ('x3', 'x4', 'x1', 'x2'), ('x3', 'x4', 'x2', 'x1'), ('x4', 'x1', 'x2', 'x3'), ('x4', 'x1', 'x3', 'x2'), ('x4', 'x2', 'x1', 'x3'), ('x4', 'x2', 'x3', 'x1'), ('x4', 'x3', 'x1', 'x2'), ('x4', 'x3', 'x2', 'x1')]
我們很容易誤解,我們需要獲得一個句子的隨機(jī)順序并將其輸入到模型中。但事實(shí)并非如此。輸入語句的順序是[x1, x2, x3, x4],XLNet使用注意力掩碼來重排列分解因子的順序。
這個句子的原始順序是[x1, x2, x3, x4]。我們隨機(jī)得到一個分解的順序?yàn)閇x3, x2, x4, x1]。
左上角是內(nèi)容表示的計算。如果我們想要預(yù)測x1的內(nèi)容表示,我們應(yīng)該擁有所有4個token內(nèi)容信息。KV = [h1, h2, h3, h4]和Q = h1。
左下角是查詢表示的計算。如果我們想要預(yù)測x1的查詢表示,我們不能看到x1本身的內(nèi)容表示。KV = [h2, h3, h4],Q = g1。
右下角是整個計算過程。我把它從頭到尾解釋了一遍。首先,h和g被初始化為e(xi)和w。在內(nèi)容掩碼和查詢掩碼之后,雙流注意力將輸出第一層輸出h^(1)和g^(1),然后計算第二層。
注意右邊的內(nèi)容掩碼和查詢掩碼。它們都是矩陣。在內(nèi)容mask中,第一行有4個紅點(diǎn)。這意味著第一個token (x1)可以看到(注意到)所有其他tokens,包括它自己(x3->x2->x4->x1)。第二行有兩個紅點(diǎn)。這意味著第二個token (x2)可以看到(注意到)兩個token(x3->x2)。等等。
內(nèi)容掩碼和查詢掩碼之間惟一的區(qū)別是,查詢掩碼中的對角元素為0,這意味著token不能看到它們自己。
讓我們總結(jié)一下。輸入的句子只有一個順序。但是我們可以使用不同的注意力mask來實(shí)現(xiàn)不同的分解順序。


總結(jié)

在這篇文章中,我主要解釋了XLNet面臨的問題是什么,以及如何使用雙流自注意力來解決它。我還提到了有關(guān)排列注意里mask的一些實(shí)現(xiàn)細(xì)節(jié)。對于結(jié)果的比較,你可以從XLNet team中找到最新的發(fā)布,它比論文的比較更加公平。

英文原文:https://towardsdatascience.com/what-is-two-stream-self-attention-in-xlnet-ebfe013a0cf3

作者:Xu LIANG

編譯:ronghuaiyang

轉(zhuǎn)載來源:AI公園

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
絕對干貨!NLP 預(yù)訓(xùn)練模型:從 Transformer 到 Albert
帶你讀論文丨8篇論文梳理BERT相關(guān)模型進(jìn)展與反思
從語言模型到Seq2Seq:Transformer如戲,全靠Mask
CVPR2022Mask Modeling在視頻任務(wù)中也有效?復(fù)旦&微軟提出Video版本BEVT,在多個視頻數(shù)據(jù)集上SOTA!
預(yù)訓(xùn)練無需注意力,擴(kuò)展到4096個token不成問題,與BERT相當(dāng)
20項(xiàng)任務(wù)橫掃BERT!CMU谷歌發(fā)布XLNet,NLP再迎屠榜時刻
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服