跟李沐讀論文之——Transformer

情感導(dǎo)師 7521

 添加導(dǎo)師微信MurieL0304

獲取更多愛情挽回攻略 婚姻修復(fù)技巧 戀愛脫單干貨

以下文章來源于SimpleAI ,作者郭必?fù)P

標(biāo)題+作者

跟李沐讀論文之——Transformer

標(biāo)題:Attention Is All You Need

發(fā)表:NIPS-2017

機(jī)構(gòu):Google

Comments by Li Mu: 8個(gè)作者都是共同貢獻(xiàn),這在計(jì)算機(jī)論文中很少見。但是為了解釋為什么有這么多共同一作,論文在腳注中清楚了寫明了每個(gè)人在這個(gè)工作中的貢獻(xiàn),確實(shí)大家都擔(dān)得上“共同貢獻(xiàn)”這一說。

摘要

背景是機(jī)器翻譯、encoder-decoder框架,而且一般都會(huì)在中間使用Attention機(jī)制。

本文提出了一個(gè)新的簡單的網(wǎng)絡(luò)架構(gòu)——Transformer,完全基于attention機(jī)制。

Comments by Li Mu: 這是個(gè)好名字,跟“變形金剛”表達(dá)相同

貢獻(xiàn):網(wǎng)絡(luò)簡單,且跟之前的網(wǎng)絡(luò)結(jié)構(gòu)都不一樣,不使用rnn或cnn的單元。并行度更好,訓(xùn)練快很多。在機(jī)器翻譯上取得了更好的效果。

Comments by Li Mu: 最開始Transformer是在機(jī)器翻譯的背景上提出的,這是個(gè)小領(lǐng)域,因此可能最初并沒有收到廣泛關(guān)注。后面Transformer開始在各種其他領(lǐng)域大顯神通,到最近在vision上面也表現(xiàn)優(yōu)異,才真正火出圈了

結(jié)論

本文提出的Transformer是第一個(gè)純基于attention的序列轉(zhuǎn)錄模型,使用multi-head self-attention替代了之前的rnn結(jié)構(gòu)。

在機(jī)器翻譯上,比RNN和CNN都要快,還取得了新的SOTA。

作者們對這種純attention的模型能取得這么好的效果感到非常激動(dòng)。因此作者們期待Transformer能在其他領(lǐng)域(CV,audio等)大放異彩。

Comments by Li Mu: 作者在2017年的時(shí)候就一定程度上預(yù)測了未來。如今Transformer不光橫掃了NLP的各種任務(wù),還在CV上也取得了驚人的效果。

最后代碼開源在tensor2tensor庫里面。

Comments by Li Mu: 其實(shí)代碼最好是放在摘要的最后一句話,讓讀者可以第一時(shí)間看到代碼。

Intro(導(dǎo)言)

介紹了傳統(tǒng)的RNN,CNN以及encoder-decoder架構(gòu)。分析了RNN的缺點(diǎn):1. 難以并行 2. 容易遺忘。再介紹了attention機(jī)制。最后提出了一個(gè)全新的架構(gòu)Transformer。

Comments by Li Mu: 這個(gè)intro很短,主要是內(nèi)容比較多,而NIPS的篇幅較短。

Background(相關(guān)工作)

為了提高對序列數(shù)據(jù)的計(jì)算效率,很多工作都使用卷積神經(jīng)網(wǎng)絡(luò)作為基礎(chǔ)的building block來進(jìn)行模型構(gòu)建,從而實(shí)現(xiàn)并行的計(jì)算。然而,CNN是通過滑動(dòng)窗口來提取特征,所以對于長距離的關(guān)系較難捕捉。但CNN還有一個(gè)優(yōu)點(diǎn)——多通道機(jī)制,使得模型可以從多個(gè)角度去提取數(shù)據(jù)的特征。

所以Transformer借用了多通道的思想,設(shè)計(jì)了多頭的注意力機(jī)制。

另外,self-attention不是本工作提出了,而是在曾經(jīng)的很多工作中都被成功應(yīng)用了。

模型

序列模型中較好的是encoder-decoder架構(gòu)。

要點(diǎn):

encoder把輸入序列處理得到中間表示,然后decoder讀入這個(gè)中間表示,處理后得到輸出序列;

輸入序列和輸出序列不一定一樣長;

decoder是一種auto-regressive的方式來輸出的,即每一步都會(huì)讀入上一步的輸出。

Transformer依然是一個(gè)encoder-decoder的架構(gòu),但它主要組成是self-attentionpoint-wise fully connected layer,結(jié)構(gòu)如下:

Comments by Li Mu: 這個(gè)圖畫的很好,在神經(jīng)網(wǎng)絡(luò)的時(shí)代,畫圖是一個(gè)重要的技能。然而這個(gè)圖屬于那種“不明覺厲”的圖,很好看,但是不容易看懂。

Encoder

Encoder由N=6個(gè)一模一樣的層組成;

每個(gè)層,包含2個(gè)子層:①multi-head self-attention layer,②position-wise fully connected feed-forward network (就是個(gè)MLP);

每個(gè)子層,都會(huì)使用residual connection和layer norm來處理,子層的輸出都可以表示為:;

為了方便殘差連接,上面所有的層、包括embedding層,都使用d=512作為輸出維度。

Comments by Li Mu: 總之,Encoder就倆超參數(shù):N和d。這種設(shè)計(jì)直接影響了后面各種基于Transformer的模型設(shè)計(jì),比如BERT,GPT等等,都主要調(diào)節(jié)這兩個(gè)參數(shù)。

「插播」沐神小課堂——什么是Layer Norm:

Batch Norm就是把一個(gè)batch的tensor,按照feature的每個(gè)維度(即按照列)去進(jìn)行規(guī)范化(均值0方差1)

Layer Norm則是在batch內(nèi)逐個(gè)樣本去做規(guī)范化

我們在序列化數(shù)據(jù)中更常使用的是Layer Norm,因?yàn)樾蛄械拈L度會(huì)變化,如果使用batch norm的話,可能導(dǎo)致均值方差波動(dòng)很大,從而影響效果,而layer norm則是逐個(gè)樣本去進(jìn)行的,就不會(huì)受影響。

Decoder

跟Encoder一樣由N=6個(gè)一模一樣的層構(gòu)成;

每個(gè)層,包含3個(gè)子層,相比于Encoder中的設(shè)計(jì),多了一個(gè)multi-head attention layer;

為了防止Decoder在處理時(shí)看到未來的信息,這里對self-attention做了進(jìn)一步的處理,即使用了一個(gè)mask機(jī)制,在t時(shí)刻時(shí)把后面的單元都mask掉,從而不會(huì)attend到未來的信息。

逐個(gè)看看每個(gè)sub-layer:

Scaled Dot-product Attention

在Transformer中我們使用的attention機(jī)制是Scaled Dot-product Attention,下圖中的代表的Q,K,V的維度:

這里的attention機(jī)制,相比于經(jīng)典的Dot-product Attention其實(shí)就是多了一個(gè)scale項(xiàng)。這里的作用是啥呢?當(dāng)d比較小的時(shí)候,要不要scale都無所謂,但是當(dāng)d比較大時(shí),內(nèi)積的值的范圍就會(huì)變得很大,不同的內(nèi)積的差距也會(huì)拉大,這樣的話,再經(jīng)過softmax進(jìn)一步的擴(kuò)大差距,就會(huì)使得得到的attention分布很接近one-hot,這樣會(huì)導(dǎo)致梯度下降困難,模型難以訓(xùn)練。在Transformer中,d=512,算比較大了,因此需要進(jìn)行scaling。

下圖很清晰地展示了scaled Dot-product Attention是如何進(jìn)行的:

Multi-Head Attention

原本的SDP Attention,沒什么可學(xué)習(xí)的參數(shù),作者發(fā)現(xiàn),我們可以先把原本的向量,通過線性層隱射到多個(gè)低維的空間,然后再并行地進(jìn)行SDP Attention操作,在concat起來,可以取得更好的效果。這類似于CNN中的多通道機(jī)制。一個(gè)向量先隱射成多個(gè)更低維的向量,相當(dāng)于分成了多個(gè)視角,然后每個(gè)視角都去進(jìn)行Attention,這樣模型的學(xué)習(xí)能力和潛力就會(huì)大大提升,另外由于這里的降維都是參數(shù)化的,所以讓模型可以根據(jù)數(shù)據(jù)來學(xué)習(xí)最有用的視角。

Point-wise Feed-forward Networks

這里其實(shí)就是名字比較花哨,實(shí)際上就是簡單的MLP。唯一需要注意的是這個(gè)MLP的修飾詞——Point-wise,它的意思是它是對每個(gè)position(詞)都分開、獨(dú)立地處理。我之前在文章 「一個(gè)小問題:深度學(xué)習(xí)模型如何處理大小可變的輸入」中畫過一個(gè)圖:

point-wise feed-forward示意圖

即MLP只是作用于最后一個(gè)維度,具體公式是:

沐神后面也畫圖總結(jié)了一下:

這個(gè)圖左邊是Transformer示意圖,右邊是RNN示意圖(其中對RNN單元簡化成一個(gè)MLP,本質(zhì)上類似)。

Transformer是通過attention來全局地聚合序列的信息,然后通過MLP進(jìn)行語義空間的轉(zhuǎn)換;

RNN則是通過把上一時(shí)刻的信息傳入下一時(shí)刻的單元,來使用序列信息,但也是通過MLP進(jìn)行語義空間轉(zhuǎn)換。所以二者本質(zhì)區(qū)別在于如何使用序列的信息。

Embedding和softmax層

Transformer中使用了三處embedding:對input和output的token進(jìn)行embedding,以及在softmax前面的Linear transformation中也使用跟embedding相同的權(quán)重(這樣是為了能夠把decoder的output通過相同的embedding給轉(zhuǎn)換回token的概率,因?yàn)閑mbedding的作用就是做token跟vector之間的轉(zhuǎn)換)。三處的embedding都是同樣的權(quán)重。

另外值得注意的點(diǎn)就是,作者把embedding都乘上了。這是為了在后面跟position embedding相乘的時(shí)候能夠保持差不多的scale。

Position Encoding

由于self-attention實(shí)際上是不考慮序列順序的,只是單純把各個(gè)position的信息進(jìn)行聚合,無論順序怎么改變,對于self-attention來說都是一樣的。因此,這里特意設(shè)計(jì)了position encoding這種東西,來添加位置信息。

具體的,文章使用的是周期不同的sin和cos函數(shù)來計(jì)算得到每個(gè)position的Embedding:

其中pos是具體位置的index,i則是具體的dimension??傊@里給每個(gè)位置,都構(gòu)造了一個(gè)長尾的向量,來作為該position也就是某個(gè)具體token的位置表示。

最后,這個(gè)position encoding是直接跟embedding相加,輸入到模型中。

為啥使用Self-Attention

Comments by Li Mu: 整個(gè)文章實(shí)際上對模型的解釋是比較欠缺的。

作者主要通過下面這個(gè)表來對比self-attention和其他結(jié)構(gòu)的差別(restricted self-attention不用管,不怎么用):

上圖中,sequential operations衡量的是在處理序列的時(shí)候的并行復(fù)雜度,越小說明并行度越高;max path length則表示序列中任意兩個(gè)點(diǎn)傳遞信息的最大距離。

Self-attention的主要優(yōu)勢在于并行度高(相比RNN)、信息距離短(相比RNN和CNN)。而在復(fù)雜度方面,其實(shí)沒有明顯優(yōu)勢:

self-attention每層的復(fù)雜度是,是因?yàn)橛衝個(gè)position,每個(gè)position都要計(jì)算n次attention,在計(jì)算attention的時(shí)候,是進(jìn)行維度為d的內(nèi)積,所以復(fù)雜度是n * n * d;

RNN層的復(fù)雜度是,因?yàn)橛衝個(gè)position,每個(gè)position會(huì)經(jīng)過一個(gè)線性變化(矩陣乘法),變換的復(fù)雜度是d * d,因此最終復(fù)雜度是n * d * d;

CNN實(shí)際上跟RNN類似,但因?yàn)橥婕暗蕉鄠€(gè)kernel,所以多乘了一個(gè)k。但一般在NLP中k也不大,所以沒有大差別。

在NLP中,往往n和d都會(huì)比較大,所以這三者的計(jì)算復(fù)雜度沒有質(zhì)的差別。

Comments by Li Mu: 看起來應(yīng)該Transformer在計(jì)算效率上會(huì)比CNN、RNN更快,但我們現(xiàn)在體會(huì)到的Transformer的模型卻不是這樣的,為啥呢?實(shí)際上是因?yàn)閟elf-attention對整個(gè)模型的假設(shè)更少,所以我們往往需要更大量的數(shù)量、更大的模型才能夠訓(xùn)練出跟CNN、RNN同樣的效果來。這就導(dǎo)致現(xiàn)在基于Transformer的模型都特別大特別貴。

這里就涉及到inductive bias這個(gè)概念了,在 什么是Inductive bias(歸納偏置)?文章中,我們知道合理的inductive bias可以讓模型的訓(xùn)練加速,這里由于self-attention的inductive bias相比于CNN、RNN更少,所以訓(xùn)練起來也更費(fèi)勁。但我猜想,對于大規(guī)模預(yù)訓(xùn)練來說,少一點(diǎn)inductive bias是不是更好?

訓(xùn)練細(xì)節(jié)&超參數(shù)

英語翻譯德語,使用BPE分詞法構(gòu)造英語德語共用的詞典,使用8個(gè)P100 GPU,每個(gè)batch大概0.4s,總共訓(xùn)練了12小時(shí),其實(shí)時(shí)間成本相對來說還是可承受的。

學(xué)習(xí)率使用了warmup,先增強(qiáng)后減。

使用了兩種正則化:

Residual dropout,對每個(gè)sub-layer的輸出都使用了dropout,還對embedding層也使用dropout,dropout rate=0.1

Label Smoothing,使用了程度為0.1的smoothing,這會(huì)損害一點(diǎn)的perplexity,但是nuisance提高accuracy和BLEU得分

下表則是展示了不同的模型結(jié)構(gòu)(超參數(shù))的性能差別:

實(shí)際上可修改的參數(shù)不多,主要就是層數(shù)(N)、向量維度()、頭數(shù)(h)。像都是根據(jù)和h算出來的。

沐神點(diǎn)評

寫作上

這篇文章寫的非常簡潔,沒有太多的介紹和解釋,屬于大佬的寫作風(fēng)格。不過對于我們大多數(shù)研究者來說,還是需要盡可能把背景解釋清楚,在正文花足夠的篇幅在把故事講清楚,從而讓讀者更好理解、認(rèn)識的更深入。

Transformer

這個(gè)模型的最大意義在于給NLP屆乃至CV、audio等其他模態(tài)的數(shù)據(jù)提供了統(tǒng)一的模型架構(gòu),有點(diǎn)類似于CNN剛提出時(shí)對CV領(lǐng)域的巨大變革。有了Transformer,以及現(xiàn)在各種基于Transformer的預(yù)訓(xùn)練模型、其他模態(tài)的成功運(yùn)用,Transformer對于多模態(tài)學(xué)習(xí)的進(jìn)步有著深遠(yuǎn)的意義。

然后,縱使Transformer已經(jīng)提出了多年,我們對Transformer的真正原理依然缺乏理解。例如,文章的標(biāo)題Attention is all you need實(shí)際上也是不對的,后續(xù)的研究者已經(jīng)證明Transformer的成功對于MLP、residual connection等其他組件也是缺一不可的,attention的作用就是對序列的信息做了聚合,并不是attention一個(gè)人起了全部作用。

另外,self-attention相比如RNN、CNN等的優(yōu)勢,可能在于它所作的歸納偏置(inductive bias)更加一般化,所以經(jīng)過大規(guī)模的訓(xùn)練,可以學(xué)習(xí)到更豐富、更一般化的知識。但代價(jià)就是它對數(shù)據(jù)的關(guān)鍵信息的抓取能力就下降了,我們需要更多的數(shù)據(jù)更大的模型才能訓(xùn)練出理想的效果。

但Transformer的出現(xiàn),給了整個(gè)AI屆新的活力,讓我們發(fā)現(xiàn)在CNN、RNN統(tǒng)治的時(shí)代,我們依然可以設(shè)計(jì)出新的網(wǎng)絡(luò)結(jié)構(gòu)發(fā)光發(fā)熱,因此也帶動(dòng)了一系列新的網(wǎng)絡(luò)架構(gòu)設(shè)計(jì),比如純MLP的模型等等。

以上就是課代表帶來的聽課筆記啦!筆記雖然簡單,但畢竟是二手的知識,最推薦的還是大家直接看視頻,品味原汁原味的沐神の味道。下一期我們繼續(xù)聽沐神來講解大名鼎鼎的BERT,咱們不見不散~

評論列表

頭像
2024-07-28 01:07:44

服務(wù)特別好,而且給人的感觸也挺深的,真的可以的

頭像
2024-07-08 21:07:07

被拉黑了,還有希望么?

頭像
2024-01-24 22:01:21

如果發(fā)信息不回,怎麼辦?

 添加導(dǎo)師微信MurieL0304

獲取更多愛情挽回攻略 婚姻修復(fù)技巧 戀愛脫單干貨

發(fā)表評論 (已有3條評論)