【NLP】TransformerXL:因为XL,所以更牛
前面介紹過(guò)Transformer作為一種特征抽取器的強(qiáng)大之處。那么,它有沒(méi)有弱點(diǎn)呢?能不能改進(jìn)呢?
本文介紹Transformer的改進(jìn)版,TransformerXL。看看它用了什么方法,改進(jìn)了Transformer的哪些弱點(diǎn)。
作者&編輯 | 小Dream哥
1 原始Transformer哪里不好?
在上一篇“理解NLP中網(wǎng)紅特征抽取器Transformer”中,筆者介紹了Transformer的強(qiáng)大之處。那么,Transformer就已經(jīng)強(qiáng)大到無(wú)懈可擊了嗎?其實(shí)不然,Transformer還有它的弱點(diǎn)。
細(xì)想一下,BERT在應(yīng)用Transformer時(shí),有一個(gè)參數(shù)sequence length,也就是BERT在訓(xùn)練和預(yù)測(cè)時(shí),每次接受的輸入是固定長(zhǎng)度的。那么,怎么輸入語(yǔ)料進(jìn)行訓(xùn)練時(shí)最理想的呢?當(dāng)然是將一個(gè)完整的段落一次性輸入,進(jìn)行特征提取了。但是現(xiàn)實(shí)是殘酷的,這么大的Transformer,內(nèi)存是消耗不起的。所以現(xiàn)有的做法是,對(duì)段落按照segment進(jìn)行分隔。在訓(xùn)練時(shí),當(dāng)輸入segment序列比sequence length短時(shí),就做padding;當(dāng)輸入segment序列比sequence length長(zhǎng)時(shí)就做切割。
這種做法顯然是一種權(quán)宜之計(jì),它有這么兩個(gè)缺點(diǎn):
1)長(zhǎng)句子切割必然會(huì)造成語(yǔ)義的殘破,不利于模型的訓(xùn)練。
2)segment的切割沒(méi)有考慮語(yǔ)義,也就是模型在訓(xùn)練當(dāng)前segment時(shí)拿不到前面時(shí)刻segment的信息,造成了語(yǔ)義的分隔。
那么,該如何解決上述問(wèn)題呢?看看TransformerXL吧。
2 TransformerXL的引入
我們先想一下,如果要我們自己來(lái)解決Transformer上面的問(wèn)題,會(huì)怎么處理呢?
熟悉NLP的同學(xué),可能會(huì)想到RNN。在RNN中,為了獲取序列中的歷史記憶,采用了Recurrence機(jī)制,在計(jì)算該時(shí)刻的狀態(tài)時(shí),引入前一時(shí)刻的狀態(tài)作為輸入。那對(duì)Transformer來(lái)說(shuō),在計(jì)算當(dāng)前序列的隱藏狀態(tài)時(shí),引入前一個(gè)序列的隱藏狀態(tài)信息不就可以解決上面的問(wèn)題了嗎?
事情真的有這么簡(jiǎn)單嗎?其實(shí),基本上也就是這么簡(jiǎn)單,不過(guò)TransformerXL在引入時(shí)做了一些巧妙的設(shè)計(jì)。下面我們看看,TransformerXL是如何引入這種Recurrence機(jī)制來(lái)解決上述問(wèn)題的。
如圖所示,是傳統(tǒng)的Transformer在訓(xùn)練和評(píng)估階段采用的語(yǔ)料輸入策略。在訓(xùn)練時(shí),將整個(gè)語(yǔ)料庫(kù)分割成可管理的大小的更短的片段,在每個(gè)片段中訓(xùn)練模型,忽略來(lái)自前一段的所有上下文信息;在評(píng)估階段,傳統(tǒng)的Transformer模型在每個(gè)步驟都消耗與訓(xùn)練期間相同長(zhǎng)度的一個(gè)segment。然后,在下一步中,這個(gè)segment向右移動(dòng)一個(gè)位置,并從頭開(kāi)始處理,只在最后一個(gè)位置進(jìn)行一次預(yù)測(cè)。
如上圖所示,在TransformerXL采用了不同的策略,在訓(xùn)練過(guò)程中,對(duì)上一個(gè)segment計(jì)算的隱藏狀態(tài)序列進(jìn)行固定和緩存,并在模型處理下一個(gè)新的segment時(shí)對(duì)其進(jìn)行利用。在評(píng)估階段,可以重用前面部分的表示,而不是像傳統(tǒng)模型那樣從頭開(kāi)始計(jì)算,這樣可以提高速度。
3 TransformerXL Recurrence機(jī)制
那么,上述的機(jī)制細(xì)節(jié)如何實(shí)現(xiàn)的呢?下面我們來(lái)做一個(gè)詳細(xì)的介紹。
事實(shí)上,問(wèn)題的關(guān)鍵在于,在計(jì)算當(dāng)前序列當(dāng)前層的隱藏狀態(tài)時(shí),如何引入前一個(gè)序列上一層的隱藏狀態(tài)。TransformerXL的做法很簡(jiǎn)單,就是按照序列長(zhǎng)度的維度將他們concate起來(lái)。如下的公式所示:
h_n_t是一個(gè)L*d的矩陣,表示的是第t個(gè)輸入序列的第n層的隱藏層的狀態(tài)。L表示序列長(zhǎng)度,d表示嵌入維度。
SG表示的Stop Gradient,這非常重要,避免了RNN會(huì)出現(xiàn)的一系列問(wèn)題。
從上述公式可以看出,TransformerXL與傳統(tǒng)的Transformer的差異主要在于隱藏層輸入K和V的差異。TransformerXL中引入了上一個(gè)序列前一個(gè)隱藏層的值,將他們concatenate起來(lái),計(jì)算新的K和V。
4 Relative Positional Encodings
我們?cè)傧胍幌?#xff0c;引入上述機(jī)制,還有什么問(wèn)題沒(méi)有。我們回想一下,在傳統(tǒng)的Transformer中,輸入序列中的位置信息是怎么表示的?通過(guò)POS函數(shù)生成,它是位置i和維度d的函數(shù),也就是不同輸入segment在相同絕對(duì)位置中的位置表示是相同的。在傳統(tǒng)的Transformer中,每個(gè)segment之間的表示是沒(méi)有關(guān)聯(lián)的,這當(dāng)然就沒(méi)有問(wèn)題。但是在TransformerXL中,因?yàn)橐肓饲耙粫r(shí)刻segment的信息,就需要對(duì)不同時(shí)刻,同樣是第i個(gè)的詞進(jìn)行區(qū)分。
TransformerXL引入了一種Relative Positional Encodings機(jī)制,會(huì)根據(jù)詞之間的相對(duì)距離而非像傳統(tǒng)的Transformer中的絕對(duì)位置進(jìn)行編碼。
在傳統(tǒng)的Transformer中,計(jì)算q_i和鍵k_j之間的attention分?jǐn)?shù)的方式為
展開(kāi)就是:
Exi是詞i的embedding,Exj是詞j的embedding,Ui?和Uj?是位置向量。
在Transformer-XL中,對(duì)上述的attention計(jì)算方式進(jìn)行了變換,轉(zhuǎn)為相對(duì)位置的計(jì)算,而且不僅僅在第一層這么計(jì)算,在每一層都是這樣計(jì)算。
對(duì)比來(lái)看,主要有三點(diǎn)變化:
1)在b和d這兩項(xiàng)中,將所有絕對(duì)位置向量Ui,Uj都轉(zhuǎn)為相對(duì)位置向量Ri?j,與Transformer一樣,這是一個(gè)固定的編碼向量,不需要學(xué)習(xí)。
2)在c這一項(xiàng)中,將查詢(xún)的U_i^T*W_q^T向量轉(zhuǎn)為一個(gè)需要學(xué)習(xí)的參數(shù)向量u,因?yàn)樵诳紤]相對(duì)位置的時(shí)候,不需要查詢(xún)絕對(duì)位置i,因此對(duì)于任意的i,都可以采用同樣的向量。同理,在d這一項(xiàng)中,也將查詢(xún)的U_i^T*W_q^T向量轉(zhuǎn)為另一個(gè)需要學(xué)習(xí)的參數(shù)向量v。
3)將K的權(quán)重變換矩陣Wk轉(zhuǎn)為Wk_E?和Wk_R,分別作為content-based key vectors和location-based key vectors。
總的來(lái)說(shuō),Relative Positional Encodings就是在計(jì)算attention分?jǐn)?shù)時(shí),用相對(duì)位置R_i_j編碼來(lái)代替原來(lái)的絕對(duì)位置編碼Ui和Uj。并且學(xué)習(xí)了相對(duì)位置v和u用來(lái)調(diào)整不同距離和不同嵌入的得分。
5 總結(jié)
總的來(lái)說(shuō)TransformerXL對(duì)Transformer進(jìn)行了一些調(diào)整,試圖解決一些問(wèn)題。按照論文的描述,TransformerXL學(xué)習(xí)的依賴(lài)關(guān)系比RNN長(zhǎng)80%,比傳統(tǒng)Transformer長(zhǎng)450%,在短序列和長(zhǎng)序列上都獲得了更好的性能,并且在評(píng)估階段比傳統(tǒng)Transformer快1800+倍。
在XLnet中引入了Transformer-XL,獲得了不錯(cuò)的效果。
總結(jié)
TransformerXL是Transformer一種非常重要的改進(jìn),思想值得我們好好學(xué)習(xí)和研究,希望對(duì)你有所幫助。
讀者們可以留言,或者加入我們的NLP群進(jìn)行討論。感興趣的同學(xué)可以微信搜索jen104,備注"加入有三AI NLP群"。
下期預(yù)告:XLnet:BERT和GPT的結(jié)合
知識(shí)星球推薦
掃描上面的二維碼,就可以加入我們的星球,助你成長(zhǎng)為一名合格的自然語(yǔ)言處理算法工程師。
知識(shí)星球主要有以下內(nèi)容:
(1) 聊天機(jī)器人。考慮到聊天機(jī)器人是一個(gè)非常復(fù)雜的NLP應(yīng)用場(chǎng)景,幾乎涵蓋了所有的NLP任務(wù)及應(yīng)用。所以小Dream哥計(jì)劃以聊天機(jī)器人作為切入點(diǎn),通過(guò)介紹聊天機(jī)器人的原理和實(shí)踐,逐步系統(tǒng)的更新到大部分NLP的知識(shí),會(huì)包括語(yǔ)義匹配,文本分類(lèi),意圖識(shí)別,語(yǔ)義匹配命名實(shí)體識(shí)別、對(duì)話(huà)管理以及分詞等。
(2) 知識(shí)圖譜。知識(shí)圖譜對(duì)于NLP各項(xiàng)任務(wù)效果好壞的重要性,就好比基礎(chǔ)知識(shí)對(duì)于一個(gè)學(xué)生成績(jī)好壞的重要性。他是NLP最重要的基礎(chǔ)設(shè)施,目前各大公司都在著力打造知識(shí)圖譜,作為一個(gè)NLP工程師,必須要熟悉和了解他。
(3) NLP預(yù)訓(xùn)練模型。基于海量數(shù)據(jù),進(jìn)行超大規(guī)模網(wǎng)絡(luò)的無(wú)監(jiān)督預(yù)訓(xùn)練。具體的任務(wù)再通過(guò)少量的樣本進(jìn)行Fine-Tune。這樣模式是目前NLP領(lǐng)域最火熱的模式,很有可能引領(lǐng)NLP進(jìn)入一個(gè)全新發(fā)展高度。你怎么不深入的了解?
轉(zhuǎn)載文章請(qǐng)后臺(tái)聯(lián)系
侵權(quán)必究
往期精選
【NLP】自然語(yǔ)言處理專(zhuān)欄上線(xiàn),帶你一步一步走進(jìn)“人工智能技術(shù)皇冠上的明珠”。
【NLP】用于語(yǔ)音識(shí)別、分詞的隱馬爾科夫模型HMM
【NLP】用于序列標(biāo)注問(wèn)題的條件隨機(jī)場(chǎng)(Conditional Random Field, CRF)
【NLP】經(jīng)典分類(lèi)模型樸素貝葉斯解讀
【NLP】 NLP專(zhuān)欄欄主自述,說(shuō)不出口的話(huà)就交給AI說(shuō)吧
【NLP】 深度學(xué)習(xí)NLP開(kāi)篇-循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
【NLP】 NLP中應(yīng)用最廣泛的特征抽取模型-LSTM
【NLP】 聊聊NLP中的attention機(jī)制
【NLP】 理解NLP中網(wǎng)紅特征抽取器Tranformer
【NLP】 深入淺出解析BERT原理及其表征的內(nèi)容
【每周NLP論文推薦】從預(yù)訓(xùn)練模型掌握NLP的基本發(fā)展脈絡(luò)
【每周NLP論文推薦】 NLP中命名實(shí)體識(shí)別從機(jī)器學(xué)習(xí)到深度學(xué)習(xí)的代表性研究
【技術(shù)綜述】深度學(xué)習(xí)在自然語(yǔ)言處理中的應(yīng)用發(fā)展
總結(jié)
以上是生活随笔為你收集整理的【NLP】TransformerXL:因为XL,所以更牛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 有三AI发布360页11万字深度学习CV
- 下一篇: 【知识星球】图像降噪模型和数据集内容开启