0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Transformer結(jié)構(gòu)及其應(yīng)用詳解

深度學(xué)習(xí)自然語(yǔ)言處理 ? 來(lái)源:新智元 ? 2023-06-08 09:56 ? 次閱讀

【導(dǎo)讀】

本文首先詳細(xì)介紹Transformer的基本結(jié)構(gòu),然后再通過(guò)GPT、BERT、MT-DNN以及GPT-2等基于Transformer的知名應(yīng)用工作的介紹并附上GitHub鏈接,看看Transformer是如何在各個(gè)著名的模型中大顯神威的。

在介紹Transformer前我們來(lái)回顧一下RNN的結(jié)構(gòu)

5b219344-0575-11ee-8a94-dac502259ad0.jpg

對(duì)RNN有一定了解的話,一定會(huì)知道,RNN有兩個(gè)很明顯的問(wèn)題

效率問(wèn)題:需要逐個(gè)詞進(jìn)行處理,后一個(gè)詞要等到前一個(gè)詞的隱狀態(tài)輸出以后才能開(kāi)始處理

如果傳遞距離過(guò)長(zhǎng)還會(huì)有梯度消失、梯度爆炸和遺忘問(wèn)題

為了緩解傳遞間的梯度和遺忘問(wèn)題,設(shè)計(jì)了各種各樣的RNN cell,最著名的兩個(gè)就是LSTM和GRU了 LSTM (Long Short Term Memory)

5b2ffd8a-0575-11ee-8a94-dac502259ad0.png

GRU (Gated Recurrent Unit)

5b3a6a68-0575-11ee-8a94-dac502259ad0.jpg

但是,引用網(wǎng)上一個(gè)博主的比喻,這么做就像是在給馬車換車輪,為什么不直接換成汽車呢? 于是就有了我們本文要介紹的核心結(jié)構(gòu)——Transformer。Transformer 是Google Brain 2017的提出的一篇工作,它針對(duì)RNN的弱點(diǎn)進(jìn)行重新設(shè)計(jì),解決了RNN效率問(wèn)題和傳遞中的缺陷等,在很多問(wèn)題上都超過(guò)了RNN的表現(xiàn)。

Transfromer的基本結(jié)構(gòu)如下圖所示,它是一個(gè)N進(jìn)N出的結(jié)構(gòu),也就是說(shuō)每個(gè)Transformer單元相當(dāng)于一層的RNN層,接收一整個(gè)句子所有詞作為輸入,然后為句子中的每個(gè)詞都做出一個(gè)輸出。但是與RNN不同的是,Transformer能夠同時(shí)處理句子中的所有詞,并且任意兩個(gè)詞之間的操作距離都是1,這么一來(lái)就很好地解決了上面提到的RNN的效率問(wèn)題和距離問(wèn)題。

5b47532c-0575-11ee-8a94-dac502259ad0.png

每個(gè)Transformer單元都有兩個(gè)最重要的子層,分別是Self-Attention層與Feed Forward層,后面會(huì)對(duì)這兩個(gè)層的詳細(xì)結(jié)構(gòu)做介紹。文章使用Transformer搭建了一個(gè)類似Seq2Seq的語(yǔ)言翻譯模型,并為Encoder與Decoder設(shè)計(jì)了兩種不同的Transformer結(jié)構(gòu)。

5b50ce7a-0575-11ee-8a94-dac502259ad0.png

Decoder Transformer相對(duì)于Encoder Transformer多了一個(gè)Encoder-Decoder Attention層,用來(lái)接收來(lái)自于Encoder的輸出作為參數(shù)。最終只要按照下圖的方式堆疊,就可以完成Transformer Seq2Seq的結(jié)構(gòu)搭建。

5b5dcfee-0575-11ee-8a94-dac502259ad0.jpg

舉個(gè)例子介紹下如何使用這個(gè)Transformer Seq2Seq做翻譯

首先,Transformer對(duì)原語(yǔ)言的句子進(jìn)行編碼,得到memory。

第一次解碼時(shí)輸入只有一個(gè)標(biāo)志,表示句子的開(kāi)始。

解碼器通過(guò)這個(gè)唯一的輸入得到的唯一的輸出,用于預(yù)測(cè)句子的第一個(gè)詞。

第二次解碼,將第一次的輸出Append到輸入中,輸入就變成了和句子的第一個(gè)詞(ground truth或上一步的預(yù)測(cè)),解碼生成的第二個(gè)輸出用于預(yù)測(cè)句子的第二個(gè)詞。以此類推(過(guò)程與Seq2Seq非常類似) 了解了Transformer的大致結(jié)構(gòu)以及如何用它來(lái)完成翻譯任務(wù)后,接下來(lái)就看看Transformer的詳細(xì)結(jié)構(gòu):

5b61fe0c-0575-11ee-8a94-dac502259ad0.png

核心組件就是上面所提到的Self-Attention和Feed Forward Networks,但還有很多其他細(xì)節(jié),接下來(lái)我們就開(kāi)始逐個(gè)結(jié)構(gòu)的來(lái)解讀Transformer。

Self Attention

Self Attention就是句子中的某個(gè)詞對(duì)于本身的所有詞做一次Attention。算出每個(gè)詞對(duì)于這個(gè)詞的權(quán)重,然后將這個(gè)詞表示為所有詞的加權(quán)和。每一次的Self Attention操作,就像是為每個(gè)詞做了一次Convolution操作或Aggregation操作。具體操作如下: 首先,每個(gè)詞都要通過(guò)三個(gè)矩陣Wq, Wk, Wv進(jìn)行一次線性變化,一分為三,生成每個(gè)詞自己的query, key, vector三個(gè)向量。

以一個(gè)詞為中心進(jìn)行Self Attention時(shí),都是用這個(gè)詞的key向量與每個(gè)詞的query向量做點(diǎn)積,再通過(guò)Softmax歸一化出權(quán)重。然后通過(guò)這些權(quán)重算出所有詞的vector的加權(quán)和,作為這個(gè)詞的輸出。具體過(guò)程如下圖所示

5b73f544-0575-11ee-8a94-dac502259ad0.jpg

歸一化之前需要通過(guò)除以向量的維度dk來(lái)進(jìn)行標(biāo)準(zhǔn)化,所以最終Self Attention用矩陣變換的方式可以表示為

5b804b6e-0575-11ee-8a94-dac502259ad0.png

最終每個(gè)Self Attention接受n個(gè)詞向量的輸入,輸出n個(gè)Aggregated的向量。

上文提到Encoder中的Self Attention與Decoder中的有所不同,Encoder中的Q、K、V全部來(lái)自于上一層單元的輸出,而Decoder只有Q來(lái)自于上一個(gè)Decoder單元的輸出,K與V都來(lái)自于Encoder最后一層的輸出。也就是說(shuō),Decoder是要通過(guò)當(dāng)前狀態(tài)與Encoder的輸出算出權(quán)重后,將Encoder的編碼加權(quán)得到下一層的狀態(tài)。

Masked Attention

通過(guò)觀察上面的結(jié)構(gòu)圖我們還可以發(fā)現(xiàn)Decoder與Encoder的另外一個(gè)不同,就是每個(gè)Decoder單元的輸入層,要先經(jīng)過(guò)一個(gè)Masked Attention層。那么Masked的與普通版本的Attention有什么區(qū)別呢? Encoder因?yàn)橐幋a整個(gè)句子,所以每個(gè)詞都需要考慮上下文的關(guān)系。所以每個(gè)詞在計(jì)算的過(guò)程中都是可以看到句子中所有的詞的。

但是Decoder與Seq2Seq中的解碼器類似,每個(gè)詞都只能看到前面詞的狀態(tài),所以是一個(gè)單向的Self-Attention結(jié)構(gòu)。 Masked Attention的實(shí)現(xiàn)也非常簡(jiǎn)單,只要在普通的Self Attention的Softmax步驟之前,與(&)上一個(gè)下三角矩陣M就好了

5b892856-0575-11ee-8a94-dac502259ad0.png

Multi-Head Attention

Multi-Head Attention就是將上述的Attention做h遍,然后將h個(gè)輸出進(jìn)行concat得到最終的輸出。這樣做可以很好地提高算法的穩(wěn)定性,在很多Attention相關(guān)的工作中都有相關(guān)的應(yīng)用。Transformer的實(shí)現(xiàn)中,為了提高M(jìn)ulti-Head的效率,將W擴(kuò)大了h倍,然后通過(guò)view(reshape)和transpose操作將相同詞的不同head的k、q、v排列在一起進(jìn)行同時(shí)計(jì)算,完成計(jì)算后再次通過(guò)reshape和transpose完成拼接,相當(dāng)于對(duì)于所有的head進(jìn)行了一個(gè)并行處理。

Position-wise FeedForward Networks

Encoder中和Decoder中經(jīng)過(guò)Attention之后輸出的n個(gè)向量(這里n是詞的個(gè)數(shù))都分別的輸入到一個(gè)全連接層中,完成一個(gè)逐個(gè)位置的前饋網(wǎng)絡(luò)

5b970f34-0575-11ee-8a94-dac502259ad0.png5ba5eb80-0575-11ee-8a94-dac502259ad0.jpg

Add & Norm

是一個(gè)殘差網(wǎng)絡(luò),將一層的輸入與其標(biāo)準(zhǔn)化后的輸出進(jìn)行相加即可。Transformer中每一個(gè)Self Attention層與FFN層后面都會(huì)連一個(gè)Add & Norm層。

5bb493b0-0575-11ee-8a94-dac502259ad0.jpg

Positional Encoding 由于Transformer中既不存在RNN,也不同于CNN,句子里的所有詞都被同等的看待,所以詞之間就沒(méi)有了先后關(guān)系。換句話說(shuō),很可能會(huì)帶上和詞袋模型相同的不足。為了解決這個(gè)問(wèn)題,Transformer提出了Positional Encoding的方案,就是給每個(gè)輸入的詞向量疊加一個(gè)固定的向量來(lái)表示它的位置。文中使用的Positional Encoding如下:

5bc37bb4-0575-11ee-8a94-dac502259ad0.png

其中pos是詞在句子中的位置,i是詞向量中第i位,即將每個(gè)詞的詞向量為一行進(jìn)行疊加,然后針對(duì)每一列都疊加上一個(gè)相位不同或波長(zhǎng)逐漸增大的波,以此來(lái)唯一區(qū)分位置。

Transformer 工作流程

Transformer的工作流程就是上面介紹的每一個(gè)子流程的拼接

輸入的詞向量首先疊加上Positional Encoding,然后輸入至Transformer內(nèi)

每個(gè)Encoder Transformer會(huì)進(jìn)行一次Multi-head self attention->Add & Normalize->FFN->Add & Normalize流程,然后將輸出輸入至下一個(gè)Encoder中

最后一個(gè)Encoder的輸出將會(huì)作為memory保留

每個(gè)Decoder Transformer會(huì)進(jìn)行一次Masked Multi-head self attention->Multi-head self attention->Add & Normalize->FFN->Add & Normalize流程,其中Multi-head self attention時(shí)的K、V至來(lái)自于Encoder的memory。根據(jù)任務(wù)要求輸出需要的最后一層Embedding。

Transformer的輸出向量可以用來(lái)做各種下游任務(wù)

Post Scriptum

雖然在Transformer文章中提出了一種自然語(yǔ)言翻譯的模型,很多文章把這個(gè)模型稱為Transformer。但我們還是傾向于將文章中利用Self-Attention的Encoder或Decoder的子結(jié)構(gòu)稱為Transformer。文中和源碼中還包含了很多其他的一些優(yōu)化例如學(xué)習(xí)率動(dòng)態(tài)變化,Residual Dropout以及Label Smoothing在這里就不再贅述,有興趣的朋友可以閱讀相關(guān)參考文獻(xiàn)進(jìn)行了解。

單向二階段訓(xùn)練模型——OpenAI GPT

GPT(Generative Pre-Training),是OpenAI在2018年提出的模型,利用Transformer模型來(lái)解決各種自然語(yǔ)言問(wèn)題,例如分類、推理、問(wèn)答、相似度等應(yīng)用的模型。GPT采用了Pre-training + Fine-tuning的訓(xùn)練模式,使得大量無(wú)標(biāo)記的數(shù)據(jù)得以利用,大大提高了這些問(wèn)題的效果。 GPT就是利用Transformer進(jìn)行自然語(yǔ)言各種任務(wù)的嘗試之一,主要有以下三個(gè)要點(diǎn)

Pre-Training的方式

單向Transformer模型

Fine-Tuning與不同輸入數(shù)據(jù)結(jié)構(gòu)的變化

如果已經(jīng)理解了Transformer的原理,那么只需要再搞懂上面的三個(gè)內(nèi)容就能夠?qū)PT有更深的認(rèn)識(shí)。

Pre-Training 訓(xùn)練方式

很多機(jī)器學(xué)習(xí)任務(wù)都需要帶標(biāo)簽的數(shù)據(jù)集作為輸入完成。但是我們身邊存在大量沒(méi)有標(biāo)注的數(shù)據(jù),例如文本、圖片、代碼等等。標(biāo)注這些數(shù)據(jù)需要花費(fèi)大量的人力和時(shí)間,標(biāo)注的速度遠(yuǎn)遠(yuǎn)不及數(shù)據(jù)產(chǎn)生的速度,所以帶有標(biāo)簽的數(shù)據(jù)往往只占有總數(shù)據(jù)集很小的一部分。隨著算力的不斷提高,計(jì)算機(jī)能夠處理的數(shù)據(jù)量逐漸增大。

如果不能很好利用這些無(wú)標(biāo)簽的數(shù)據(jù)就顯得很浪費(fèi)。 所以半監(jiān)督學(xué)習(xí)和預(yù)訓(xùn)練+微調(diào)的二階段模式整變得越來(lái)越受歡迎。最常見(jiàn)的二階段方法就是Word2Vec,使用大量無(wú)標(biāo)記的文本訓(xùn)練出帶有一定語(yǔ)義信息的詞向量,然后將這些詞向量作為下游機(jī)器學(xué)習(xí)任務(wù)的輸入,就能夠大大提高下游模型的泛化能力。

但是Word2Vec有一個(gè)問(wèn)題,就是單個(gè)單詞只能有一個(gè)Embedding。這樣一來(lái),一詞多義就不能很好地進(jìn)行表示。 ELMo首先想到了在預(yù)訓(xùn)練階段為每個(gè)詞匯集其上下文信息,使用的是基于bi-LSTM的語(yǔ)言模型給詞向量帶上上下文語(yǔ)義信息:

5bcf923c-0575-11ee-8a94-dac502259ad0.png

上式分別代表了左右兩向的LSTM-RNN,他們共享輸入的詞向量X以及RNN各層權(quán)重S,也就是使用雙向RNN兩向的輸出,來(lái)同時(shí)預(yù)測(cè)下一個(gè)單詞(右向的下一個(gè),左向的上一個(gè)),具體結(jié)構(gòu)如下圖所示:

5bd7d816-0575-11ee-8a94-dac502259ad0.jpg

但ELMo使用的是RNN來(lái)完成語(yǔ)言模型的預(yù)訓(xùn)練,那么如何使用Transformer來(lái)完成預(yù)訓(xùn)練呢?

單向Transformer結(jié)構(gòu)

OpenAI GPT采用了單向Transformer完成了這項(xiàng)預(yù)訓(xùn)練任務(wù)。

5be62bd2-0575-11ee-8a94-dac502259ad0.png

什么是單向Transformer?在Transformer的文章中,提到了Encoder與Decoder使用的Transformer Block是不同的。在Decoder Block中,使用了Masked Self-Attention,即句子中的每個(gè)詞,都只能對(duì)包括自己在內(nèi)的前面所有詞進(jìn)行Attention,這就是單向Transformer。GPT使用的Transformer結(jié)構(gòu)就是將Encoder中的Self-Attention替換成了Masked Self-Attention,具體結(jié)構(gòu)如下圖所示:

5bf3a794-0575-11ee-8a94-dac502259ad0.png

由于采用的是單向的Transformer,只能看到上文的詞,所以語(yǔ)言模型為:

5c03ac0c-0575-11ee-8a94-dac502259ad0.png

而訓(xùn)練的過(guò)程其實(shí)非常的簡(jiǎn)單,就是將句子n個(gè)詞的詞向量(第一個(gè)為)加上Positional Encoding后輸入到前面提到的Transfromer中,n個(gè)輸出分別預(yù)測(cè)該位置的下一個(gè)詞(預(yù)測(cè)句子中的第一個(gè)詞,最后一個(gè)詞的預(yù)測(cè)結(jié)果不用于語(yǔ)言模型的訓(xùn)練)。

5c0e22ae-0575-11ee-8a94-dac502259ad0.png

由于使用了Masked Self-Attention,所以每個(gè)位置的詞都不會(huì)“看見(jiàn)”后面的詞,也就是預(yù)測(cè)的時(shí)候是看不見(jiàn)“答案”的,保證了模型的合理性,這也是為什么OpenAI采用了單向Transformer的原因。

Fine-Tuning與不同輸入數(shù)據(jù)結(jié)構(gòu)的變化

接下來(lái)就進(jìn)入模型訓(xùn)練的第二步,運(yùn)用少量的帶標(biāo)簽數(shù)據(jù)對(duì)模型參數(shù)進(jìn)行微調(diào)。

上一步中最后一個(gè)詞的輸出我們沒(méi)有用到,在這一步中就要使用這一個(gè)輸出來(lái)作為下游監(jiān)督學(xué)習(xí)的輸入。

5c17160c-0575-11ee-8a94-dac502259ad0.png

5c21084c-0575-11ee-8a94-dac502259ad0.png

為避免Fine-Tuning使得模型陷入過(guò)擬合,文中還提到了輔助訓(xùn)練目標(biāo)的方法,類似于一個(gè)多任務(wù)模型或者半監(jiān)督學(xué)習(xí)。具體方法就是在使用最后一個(gè)詞的預(yù)測(cè)結(jié)果進(jìn)行監(jiān)督學(xué)習(xí)的同時(shí),前面的詞繼續(xù)上一步的無(wú)監(jiān)督訓(xùn)練,使得最終的損失函數(shù)成為: 5c29fa74-0575-11ee-8a94-dac502259ad0.png 針對(duì)不同任務(wù),需要修改輸入數(shù)據(jù)的格式:

5c348a52-0575-11ee-8a94-dac502259ad0.png

Classification:對(duì)于分類問(wèn)題,不需要做什么修改

Entailment:對(duì)于推理問(wèn)題,可以將先驗(yàn)與假設(shè)使用一個(gè)分隔符分開(kāi)

Similarity:對(duì)于相似度問(wèn)題,由于模型是單向的,但相似度與順序無(wú)關(guān)。所以需要將兩個(gè)句子順序顛倒后兩次輸入的結(jié)果相加來(lái)做最后的推測(cè)

Multiple Choice:對(duì)于問(wèn)答問(wèn)題,則是將上下文、問(wèn)題放在一起與答案分隔開(kāi),然后進(jìn)行預(yù)測(cè)

Post Scriptum

OpenAI GPT在Transformer的運(yùn)用和二階段訓(xùn)練方式上做出了很好的探索,也取得了非常不錯(cuò)的效果,為后面的BERT鋪平了道路。

雙向二階段訓(xùn)練模型——BERT

BERT(Bidirectional Encoder Representation from Transformer),是Google Brain在2018年提出的基于Transformer的自然語(yǔ)言表示框架。是一提出就大火的明星模型。BERT與GPT一樣,采取了Pre-training + Fine-tuning的訓(xùn)練方式,在分類、標(biāo)注等任務(wù)下都獲得了更好的效果。 BERT與GPT非常的相似,都是基于Transformer的二階段訓(xùn)練模型,都分為Pre-Training與Fine-Tuning兩個(gè)階段,都在Pre-Training階段無(wú)監(jiān)督地訓(xùn)練出一個(gè)可通用的Transformer模型,然后在Fine-Tuning階段對(duì)這個(gè)模型中的參數(shù)進(jìn)行微調(diào),使之能夠適應(yīng)不同的下游任務(wù)。 雖然BERT與GPT看上去非常的相似,但是它們的訓(xùn)練目標(biāo)和模型結(jié)構(gòu)和使用上還是有著些許的不同:

GPT采用的是單向的Transformer,而B(niǎo)ERT采用的是雙向的Transformer,也就是不用進(jìn)行Mask操作;

使用的結(jié)構(gòu)的不同,直接導(dǎo)致了它們?cè)赑re-Training階段訓(xùn)練目標(biāo)的不同;

雙向Transformer BERT采用的是不經(jīng)過(guò)Mask的Transformer,也就是與Transformer文章中的Encoder Transformer結(jié)構(gòu)完全一樣: GPT中因?yàn)橐瓿烧Z(yǔ)言模型的訓(xùn)練,也就要求Pre-Training預(yù)測(cè)下一個(gè)詞的時(shí)候只能夠看見(jiàn)當(dāng)前以及之前的詞,這也是GPT放棄原本Transformer的雙向結(jié)構(gòu)轉(zhuǎn)而采用單向結(jié)構(gòu)的原因。

BERT為了能夠同時(shí)得到上下文的信息,而不是像GPT一樣完全放棄下文信息,采用了雙向的Transformer。但是這樣一來(lái),就無(wú)法再像GPT一樣采用正常的語(yǔ)言模型來(lái)預(yù)訓(xùn)練了,因?yàn)锽ERT的結(jié)構(gòu)導(dǎo)致每個(gè)Transformer的輸出都可以看見(jiàn)整個(gè)句子的,無(wú)論你用這個(gè)輸出去預(yù)測(cè)什么,都會(huì)“看見(jiàn)”參考答案,也就是“see itself”的問(wèn)題。ELMo中雖然采用的是雙向RNN,但是兩個(gè)RNN之間是獨(dú)立的,所以可以避免see itself的問(wèn)題。

5c3fe244-0575-11ee-8a94-dac502259ad0.png

Pre-Training階段

那么BERT想用雙向的Transformer模型,就不得不放棄GPT中所采用的語(yǔ)言模型來(lái)作為預(yù)訓(xùn)練的目標(biāo)函數(shù)。取而代之的,BERT提出了一種完全不同的預(yù)訓(xùn)練方法。

Masked Language Model (MLM)

在Transformer中,我們即想要知道上文的信息,又想要知道下文的信息,但同時(shí)要保證整個(gè)模型不知道要預(yù)測(cè)詞的信息,那么就干脆不要告訴模型這個(gè)詞的信息就可以了。也就是說(shuō),BERT在輸入的句子中,挖掉一些需要預(yù)測(cè)的詞,然后通過(guò)上下文來(lái)分析句子,最終使用其相應(yīng)位置的輸出來(lái)預(yù)測(cè)被挖掉的詞。這其實(shí)就像是在做完形填空 (Cloze)一樣。

但是,直接將大量的詞替換為標(biāo)簽可能會(huì)造成一些問(wèn)題,模型可能會(huì)認(rèn)為只需要預(yù)測(cè)相應(yīng)的輸出就行,其他位置的輸出就無(wú)所謂。同時(shí)Fine-Tuning階段的輸入數(shù)據(jù)中并沒(méi)有標(biāo)簽,也有數(shù)據(jù)分布不同的問(wèn)題。為了減輕這樣訓(xùn)練帶來(lái)的影響,BERT采用了如下的方式:

1.輸入數(shù)據(jù)中隨機(jī)選擇15%的詞用于預(yù)測(cè),這15%的詞中,

2.80%的詞向量輸入時(shí)被替換為

3.10%的詞的詞向量在輸入時(shí)被替換為其他詞的詞向量

4.另外10%保持不動(dòng)

這樣一來(lái)就相當(dāng)于告訴模型,我可能給你答案,也可能不給你答案,也可能給你錯(cuò)誤的答案,有的地方我會(huì)檢查你的答案,沒(méi)的地方我也可能檢查你的答案,所以標(biāo)簽對(duì)你來(lái)說(shuō)沒(méi)有什么特殊意義,所以無(wú)論如何,你都要好好預(yù)測(cè)所有位置的輸出。

Next Sentence Prediction (NSP)

BERT還提出了另外一種預(yù)訓(xùn)練方式NSP,與MLM同時(shí)進(jìn)行,組成多任務(wù)預(yù)訓(xùn)練。這種預(yù)訓(xùn)練的方式就是往Transformer中輸入連續(xù)的兩個(gè)句子,左邊的句子前面加上一個(gè)標(biāo)簽,它的輸出被用來(lái)判斷兩個(gè)句子之間是否是連續(xù)上下文關(guān)系。采用負(fù)采樣的方法,正負(fù)樣本各占50%。

為了區(qū)分兩個(gè)句子的前后關(guān)系,BERT除了加入了Positional Encoding之外,還兩外加入了一個(gè)在預(yù)訓(xùn)練時(shí)需要學(xué)習(xí)的Segment Embedding來(lái)區(qū)分兩個(gè)句子。這樣一來(lái),BERT的輸入就由詞向量、位置向量、段向量三個(gè)部分相加組成。此外,兩個(gè)句子之間使用標(biāo)簽予以區(qū)分。

5c4aaa76-0575-11ee-8a94-dac502259ad0.png

整體Pre-Training的示意圖如下:

5c569f3e-0575-11ee-8a94-dac502259ad0.png

Fine-Tuning階段

BERT的Fine-Tuning階段和GPT沒(méi)有太大區(qū)別。因?yàn)椴捎昧穗p向的Transformer所以放棄了GPT在Fine-Tuning階段使用的輔助訓(xùn)練目標(biāo),也就是語(yǔ)言模型。此外就是將分類預(yù)測(cè)用的輸出向量從GPT的最后一個(gè)詞的輸出位置改為了句子開(kāi)頭的位置了。不同的任務(wù)Fine-Tuning的示意圖如下:

5c63e3b0-0575-11ee-8a94-dac502259ad0.jpg

Post Scriptum

個(gè)人認(rèn)為,BERT只是GPT模型的一種trade-off,為了在兩個(gè)階段都能夠同時(shí)獲得句子上下文的信息,使用了雙向Transformer模型。但是為此卻要付出失去傳統(tǒng)語(yǔ)言模型的代價(jià),轉(zhuǎn)而采用MLM+NSP這種更加復(fù)雜的方式進(jìn)行預(yù)訓(xùn)練。

多任務(wù)模型——MT-DNN

MT-DNN (Multi-Task Deep Neural Networks) 依然采用了BERT的二階段訓(xùn)練方法以及雙向Transformer。在Pre-Training階段,MT-DNN與BERT幾乎完全一樣,但是在Fine-Tuning階段,MT-DNN采用了多任務(wù)的微調(diào)方式。同時(shí)采用Transformer輸出的上下文Embedding進(jìn)行單句分類、文本對(duì)相似度、文本對(duì)分類以及問(wèn)答等任務(wù)的訓(xùn)練。整個(gè)結(jié)構(gòu)如下圖所示:

5c70067c-0575-11ee-8a94-dac502259ad0.jpg

單向通用模型——GPT-2

GPT-2繼續(xù)沿用了原來(lái)在GPT種使用的單向Transformer模型,而這篇文章的目的就是盡可能利用單向Transformer的優(yōu)勢(shì),做一些BERT使用的雙向Transformer所做不到的事。那就是通過(guò)上文生成下文文本。 GPT-2的想法就是完全舍棄Fine-Tuning過(guò)程,轉(zhuǎn)而使用一個(gè)容量更大、無(wú)監(jiān)督訓(xùn)練、更加通用的語(yǔ)言模型來(lái)完成各種各樣的任務(wù)。

我們完全不需要去定義這個(gè)模型應(yīng)該做什么任務(wù),因?yàn)楹芏鄻?biāo)簽所蘊(yùn)含的信息,就存在于語(yǔ)料當(dāng)中。就像一個(gè)人如果博覽群書,自然可以根據(jù)看過(guò)的內(nèi)容輕松的做到自動(dòng)摘要、問(wèn)答、續(xù)寫文章這些事。 嚴(yán)格來(lái)說(shuō)GPT-2可能不算是一個(gè)多任務(wù)模型,但是它確實(shí)使用相同的模型、相同的參數(shù)完成了不同的任務(wù)。那么GPT-2是怎么使用語(yǔ)言模型完成多種任務(wù)的呢? 通常我們針對(duì)特定任務(wù)訓(xùn)練的專用模型,給定輸入,就可以返回這個(gè)任務(wù)相應(yīng)的輸出,也就是

5c7b5194-0575-11ee-8a94-dac502259ad0.png
那么如果我們希望設(shè)計(jì)一個(gè)通用的模型,這個(gè)模型在給定輸入的同時(shí)還需要給定任務(wù)類型,然后根據(jù)給定輸入與任務(wù)來(lái)做出相應(yīng)的輸出,那么模型就可以表示成下面這個(gè)樣子

5c840bfe-0575-11ee-8a94-dac502259ad0.png

就好像原來(lái)我需要翻譯一個(gè)句子,需要專門設(shè)計(jì)一個(gè)翻譯模型,想要問(wèn)答系統(tǒng)需要專門設(shè)計(jì)一個(gè)問(wèn)答模型。但是如果一個(gè)模型足夠聰明,并且能夠根據(jù)你的上文生成下文,那我們就可以通過(guò)在輸入中加入一些標(biāo)識(shí)符就可以區(qū)分各種問(wèn)題。

比如可以直接問(wèn)他:(‘自然語(yǔ)言處理', 中文翻譯)來(lái)得到我們需要的結(jié)果Nature Language Processing。在我的理解中GPT-2更像是一個(gè)無(wú)所不知的問(wèn)答系統(tǒng),通過(guò)告知一個(gè)給定任務(wù)的標(biāo)識(shí)符,就可以對(duì)多種領(lǐng)域的問(wèn)答、多種任務(wù)做出合適的回答。GPT-2滿足零樣本設(shè)置 (zero-shot setting), 在訓(xùn)練的過(guò)程中不需要告訴他應(yīng)該完成什么樣的任務(wù),預(yù)測(cè)是也能給出較為合理的回答。

那么GPT-2為了做到上面這些要求,做了哪些工作呢?

拓寬并加大數(shù)據(jù)集

首先就是要讓模型博覽群書,如果訓(xùn)練樣本都不夠多,那還怎么進(jìn)行推理?前面的工作都是針對(duì)某一個(gè)特定問(wèn)題的,所以數(shù)據(jù)集都比較片面。GPT-2收集了一個(gè)規(guī)模更大、范圍更廣的數(shù)據(jù)集。同時(shí)呢,要保證這個(gè)數(shù)據(jù)集的質(zhì)量,保留那些擁有高質(zhì)量?jī)?nèi)容的網(wǎng)頁(yè)。最終組成了一個(gè)800萬(wàn)個(gè)文本,40G的數(shù)據(jù)集WebText。

擴(kuò)大網(wǎng)絡(luò)容量

書多了腦袋容量也得帶一些要不然記不住書里的東西。為了提高網(wǎng)絡(luò)的容量,使其擁有更強(qiáng)的學(xué)習(xí)潛力,GPT-2將Transformer堆疊的層數(shù)增加到48層,隱層的維度為1600,參數(shù)量達(dá)到了15億。

調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)

GPT-2將詞匯表提升到50257,最大的上下文大小 (context size) 從GPT的512提升到了1024,batchsize從512提升為1024。此外還對(duì)Transformer做出了小調(diào)整,標(biāo)準(zhǔn)化層放到?jīng)]每個(gè)sub-block之前,最后一個(gè)Self-attention后又增加了一個(gè)標(biāo)準(zhǔn)化層;改變了殘差層的初始化方法等等。

Post Scriptum

GPT-2其實(shí)最驚人的是其極強(qiáng)的生成能力,而如此強(qiáng)大的生成能力主要還是要?dú)w功于其數(shù)據(jù)質(zhì)量以及驚人參數(shù)量和數(shù)據(jù)規(guī)模。GPT-2的參數(shù)量大到用于實(shí)驗(yàn)的模型都還處于欠擬合狀態(tài),如果接著訓(xùn)練,效果還能進(jìn)一步提升。

總結(jié)

總上面這些關(guān)于Transformer工作的發(fā)展中,我也整理出了一些關(guān)于深度學(xué)習(xí)發(fā)展趨勢(shì)的個(gè)人心得:

1. 有監(jiān)督模型向半監(jiān)督甚至無(wú)監(jiān)督方向發(fā)展 數(shù)據(jù)的規(guī)模的增長(zhǎng)速度遠(yuǎn)遠(yuǎn)超過(guò)了數(shù)據(jù)的標(biāo)注速度,這也就導(dǎo)致了大量無(wú)標(biāo)簽數(shù)據(jù)的產(chǎn)生。這些無(wú)標(biāo)簽的數(shù)據(jù)并非沒(méi)有價(jià)值,相反,如果找到合適的“煉金術(shù)”,將可以從這些海量的數(shù)據(jù)中獲取意想不到的價(jià)值。如何利用上這些無(wú)標(biāo)簽的數(shù)據(jù)來(lái)改善任務(wù)的表現(xiàn)變成了一個(gè)越來(lái)越無(wú)法輕視的問(wèn)題。

2. 從少量數(shù)據(jù)復(fù)雜模型到大量數(shù)據(jù)簡(jiǎn)單模型 深度神經(jīng)網(wǎng)絡(luò)的擬合能力非常的強(qiáng)大,一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)模型就足以擬合任何函數(shù)。但無(wú)奈使用越簡(jiǎn)單的網(wǎng)絡(luò)結(jié)構(gòu)完成同一個(gè)任務(wù),對(duì)數(shù)據(jù)量的要求也更高。數(shù)據(jù)量越是上升,數(shù)據(jù)質(zhì)量越是提高,往往對(duì)模型的要求就會(huì)越會(huì)降低。數(shù)據(jù)量越大,模型就越容易捕捉到符合真實(shí)世界分布的特征。Word2Vec就是一個(gè)例子,它所使用的目標(biāo)函數(shù)非常的簡(jiǎn)單,但是由于使用了大量的文本,于是訓(xùn)練出的詞向量中就包含了許多有趣的特性。

3. 從專用模型向通用模型發(fā)展 GPT、BERT、MT-DNN、GPT-2都使用了經(jīng)過(guò)預(yù)訓(xùn)練的通用模型來(lái)繼續(xù)進(jìn)行下游的機(jī)器學(xué)習(xí)任務(wù),并不需要對(duì)模型本身再做太多的修改。如果一個(gè)模型的表達(dá)能力足夠的強(qiáng),訓(xùn)練時(shí)候使用的數(shù)據(jù)量足夠的大,那么模型的通用性就會(huì)更強(qiáng),就不需要針對(duì)特定的任務(wù)做太多的修改。最極端的情況就像是GPT-2這個(gè)樣子,訓(xùn)練時(shí)甚至完全不需要知道后續(xù)的下游任務(wù)是什么,就能夠訓(xùn)練出一個(gè)通用的多任務(wù)模型。

4. 對(duì)數(shù)據(jù)的規(guī)模和質(zhì)量要求提高 GPT、BERT、MT-DNN、GPT-2雖然先后刷榜,但是我認(rèn)為成績(jī)的提升中,數(shù)據(jù)規(guī)模的提升占有比結(jié)構(gòu)調(diào)整更大的比重。隨著模型的通用化和簡(jiǎn)單化,為提升模型的性能,今后更多的注意力將會(huì)從如何設(shè)計(jì)一個(gè)復(fù)雜、專用的模型轉(zhuǎn)移到如何獲取、清洗、精化出質(zhì)量更加出眾的、大量的數(shù)據(jù)上。數(shù)據(jù)的處理方式調(diào)整的作用將會(huì)大于模型結(jié)構(gòu)調(diào)整的作用。

綜上所述,DL競(jìng)賽遲早要成為大廠間拼資源、拼算力的較量??赡軒啄陜?nèi)就會(huì)出現(xiàn)一個(gè)新的課題:綠色AI,低碳AI,可持續(xù)AI等。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3574

    瀏覽量

    133988
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4734

    瀏覽量

    100420
  • Gru
    Gru
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    7471
  • GPT
    GPT
    +關(guān)注

    關(guān)注

    0

    文章

    351

    瀏覽量

    15285
  • LSTM
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    3734

原文標(biāo)題:Transformer結(jié)構(gòu)及其應(yīng)用詳解——GPT、BERT、MT-DNN、GPT-2

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    好書分享!《詳解MATLAB圖像函數(shù)及其應(yīng)用》

    詳解MATLAB圖像函數(shù)及其應(yīng)用》不錯(cuò)的書!很好!值得一看!
    發(fā)表于 05-29 16:08

    LED光電參數(shù)定義及其詳解

    LED光電參數(shù)定義及其詳解
    發(fā)表于 08-17 21:57

    Linux系統(tǒng)命令及其使用詳解

    Linux系統(tǒng)命令及其使用詳解
    發(fā)表于 08-20 13:38

    MOSFET結(jié)構(gòu)及其工作原理詳解

    ` 本帖最后由 eehome 于 2013-1-5 09:54 編輯 MOSFET結(jié)構(gòu)及其工作原理詳解`
    發(fā)表于 08-20 17:27

    智能電表設(shè)計(jì)及其原理詳解

    智能電表設(shè)計(jì)及其原理詳解
    發(fā)表于 11-12 09:45

    詳解ABBYY PDF Transformer+從文件創(chuàng)建PDF文檔

    可使用ABBYY PDF Transformer+從Microsoft Word、Microsoft Excel、Microsoft PowerPoint、HTML、RTF、Microsoft
    發(fā)表于 10-17 14:13

    詳解ABBYY PDF Transformer+中的Bates編號(hào)

    ABBYY PDF Transformer+ 可讓您將 Bates 編號(hào)添加到 PDF 文檔。Bates 編號(hào)可方便文檔搜索和檢索,并更加有利于電子歸檔。下面小編給小伙伴們講講ABBYY PDF
    發(fā)表于 11-14 10:28

    計(jì)算機(jī)自動(dòng)化裝配專機(jī),自動(dòng)化裝配生產(chǎn)線結(jié)構(gòu)原理及其組成形式的詳解 精選資料分享

    《自動(dòng)化裝配生產(chǎn)線結(jié)構(gòu)原理及其組成形式的詳解》由會(huì)員分享,可在線閱讀,更多相關(guān)《自動(dòng)化裝配生產(chǎn)線結(jié)構(gòu)原理及其組成形式的
    發(fā)表于 09-13 07:50

    高頻變壓器設(shè)計(jì)軟件PI_Transformer_Designer6.5及其應(yīng)用

    高頻變壓器設(shè)計(jì)軟件PI_Transformer_Designer_6[1].5及其應(yīng)用
    發(fā)表于 12-11 10:59 ?42次下載

    LED光電參數(shù)定義及其詳解

    LED光電參數(shù)定義及其詳解
    發(fā)表于 02-08 00:50 ?21次下載

    詳解一種簡(jiǎn)單而有效的Transformer提升技術(shù)

    近些年,Transformer[1]逐漸成為了自然語(yǔ)言處理中的主流結(jié)構(gòu)。為了進(jìn)一步提升Transformer的性能,一些工作通過(guò)引入額外的結(jié)構(gòu)或知識(shí)來(lái)提升
    的頭像 發(fā)表于 04-09 09:50 ?6651次閱讀
    <b class='flag-5'>詳解</b>一種簡(jiǎn)單而有效的<b class='flag-5'>Transformer</b>提升技術(shù)

    全面解讀MOSFET結(jié)構(gòu)及設(shè)計(jì)詳解

    MOSFET結(jié)構(gòu)、特性參數(shù)及設(shè)計(jì)詳解
    發(fā)表于 01-26 16:47 ?1265次閱讀

    關(guān)于Transformer的核心結(jié)構(gòu)及原理

    Thinking Like Transformers 這篇論文中提出了 transformer 類的計(jì)算框架,這個(gè)框架直接計(jì)算和模仿 Transformer 計(jì)算。使用 RASP 編程語(yǔ)言,使每個(gè)程序編譯成一個(gè)特殊的 Transform
    發(fā)表于 03-08 09:39 ?752次閱讀

    transformer模型詳解Transformer 模型的壓縮方法

    ?動(dòng)機(jī)&背景 Transformer 模型在各種自然語(yǔ)言任務(wù)中取得了顯著的成果,但內(nèi)存和計(jì)算資源的瓶頸阻礙了其實(shí)用化部署。低秩近似和結(jié)構(gòu)化剪枝是緩解這一瓶頸的主流方法。然而,作者通過(guò)分析發(fā)現(xiàn),結(jié)構(gòu)
    的頭像 發(fā)表于 07-17 10:50 ?1989次閱讀
    <b class='flag-5'>transformer</b>模型<b class='flag-5'>詳解</b>:<b class='flag-5'>Transformer</b> 模型的壓縮方法

    大模型基礎(chǔ)Transformer結(jié)構(gòu)的原理解析

    該研究的結(jié)果適用于一般數(shù)據(jù)集,可以擴(kuò)展到交叉注意力層,并且研究結(jié)論的實(shí)際有效性已經(jīng)通過(guò)徹底的數(shù)值實(shí)驗(yàn)得到了驗(yàn)證。該研究建立一種新的研究視角,將多層 transformer 看作分離和選擇最佳 token 的 SVM 層次結(jié)構(gòu)
    發(fā)表于 09-07 10:50 ?1074次閱讀
    大模型基礎(chǔ)<b class='flag-5'>Transformer</b><b class='flag-5'>結(jié)構(gòu)</b>的原理解析