來(lái)源:SimpleAI
非常推薦木神在B站開的系列公開課,特別是最近的《論文閱讀》系列,真的非常棒。之前我們可能看過(guò)很多經(jīng)典的論文,但再次聽李牧老師的講座,能收獲很多新的知識(shí),尤其是李牧老師結(jié)合自己豐富的經(jīng)驗(yàn)給出的很多精彩點(diǎn)評(píng)。
我也去聽了課,第一節(jié)課我選擇聽了經(jīng)典的NLP論文《Attention Is All You Need》。在聽課的同時(shí),我整理了以下筆記,方便自己以后參考,也分享給大家。
李牧教授看論文的順序一般是:題目+作者>摘要>引言>結(jié)論>相關(guān)工作>模型設(shè)計(jì)>實(shí)驗(yàn),最后是總體綜述。我也按照這個(gè)順序記錄。

標(biāo)題 + 作者

李牧點(diǎn)評(píng):8位作者共同作出貢獻(xiàn),這在計(jì)算機(jī)論文中并不多見。但為了解釋為什么有這么多共同第一作者,論文在腳注中明確說(shuō)明了每個(gè)人對(duì)這項(xiàng)工作的貢獻(xiàn),確實(shí)每個(gè)人都配得上“共同貢獻(xiàn)”的稱號(hào)。
概括
后臺(tái)是機(jī)器翻譯和encoder-decoder框架,中間一般會(huì)用到Attention機(jī)制。
本文提出了一種新的簡(jiǎn)單網(wǎng)絡(luò)架構(gòu)——Transformer,完全基于注意力機(jī)制。
李牧點(diǎn)評(píng):這個(gè)名字不錯(cuò),和“變形金剛”寓意一樣
貢獻(xiàn):該網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單,不同于以往的網(wǎng)絡(luò)結(jié)構(gòu),沒(méi)有使用RNN或者CNN單元,并行性更好,訓(xùn)練速度更快,在機(jī)器翻譯中取得了更好的效果。
李牧點(diǎn)評(píng):Transformer 最早是在機(jī)器翻譯的背景下提出的,機(jī)器翻譯是一個(gè)很小的領(lǐng)域,所以一開始可能并沒(méi)有受到廣泛的關(guān)注。后來(lái) Transformer 開始在其他各個(gè)領(lǐng)域展現(xiàn)出它的神奇力量,最近它在視覺(jué)領(lǐng)域也有不錯(cuò)的表現(xiàn),這才真正讓它火了起來(lái)。
綜上所述
本文提出的Transformer是第一個(gè)純基于attention的序列轉(zhuǎn)錄模型貝語(yǔ)網(wǎng)校,采用多頭自注意力機(jī)制(multi-head self-attention)替代之前的RNN結(jié)構(gòu)。
在機(jī)器翻譯中,它比RNN和CNN速度更快,并取得了新的SOTA。
作者對(duì)這種純注意力模型能取得如此好的效果感到非常興奮。因此,作者期待 Transformer 能在其他領(lǐng)域(CV、音頻等)大放異彩。
李牧點(diǎn)評(píng):作者在2017年就一定程度上預(yù)測(cè)了未來(lái),如今Transformer不僅橫掃各類NLP任務(wù),在CV上也取得了驚人的成績(jī)。
最后,代碼在tensor2tensor庫(kù)中開源。
李牧的評(píng)論:其實(shí)最好把代碼放在摘要的最后一句,這樣讀者就能先看到代碼。
介紹
介紹了傳統(tǒng)的RNN、CNN以及encoder-decoder架構(gòu),分析了RNN的缺點(diǎn):1.難以并行化 2.容易遺忘。然后介紹了attention機(jī)制。最后提出了一種新的架構(gòu)Transformer。
李牧評(píng)論:這個(gè)簡(jiǎn)介很短,主要是內(nèi)容比較多,而NIPS的簡(jiǎn)介更短。
背景(相關(guān)工作)
為了提高序列數(shù)據(jù)的計(jì)算效率,很多工作都以卷積神經(jīng)網(wǎng)絡(luò)作為基本構(gòu)建塊來(lái)構(gòu)建模型,從而實(shí)現(xiàn)并行計(jì)算。然而,CNN是通過(guò)滑動(dòng)窗口來(lái)提取特征的,因此很難捕捉到長(zhǎng)距離的關(guān)系。不過(guò)CNN還有另一個(gè)優(yōu)勢(shì)——多通道機(jī)制,可以讓模型從多個(gè)角度提取數(shù)據(jù)特征。
因此Transformer借鑒了多通道的思想,設(shè)計(jì)了多頭注意力機(jī)制。
另外,本工作中沒(méi)有提出自我注意力,但在之前的許多工作中已經(jīng)成功應(yīng)用。
模型
更好的序列模型是編碼器-解碼器架構(gòu)。
關(guān)鍵點(diǎn):
編碼器對(duì)輸入序列進(jìn)行處理得到一個(gè)中間表示,然后解碼器讀取這個(gè)中間表示并進(jìn)行處理得到輸出序列;
輸入序列和輸出序列不一定是相同的長(zhǎng)度;
解碼器以自回歸的方式輸出,即每一步讀取上一步的輸出。
Transformer 依然是一個(gè)編碼器-解碼器架構(gòu),但其主要組成部分是自注意力機(jī)制和逐點(diǎn)全連接層。其結(jié)構(gòu)如下:

李牧點(diǎn)評(píng):這幅圖畫得非常好,在神經(jīng)網(wǎng)絡(luò)時(shí)代,畫圖是一項(xiàng)重要的技能,不過(guò)這幅圖屬于那種“強(qiáng)大而不知其所以然”的,看上去很好看,但理解起來(lái)卻不容易。
編碼器
李牧點(diǎn)評(píng):簡(jiǎn)單來(lái)說(shuō),Encoder只有兩個(gè)超參數(shù):N和d。這個(gè)設(shè)計(jì)直接影響了后續(xù)各種基于Transformer的模型的設(shè)計(jì),比如BERT、GPT等,主要都是對(duì)這兩個(gè)參數(shù)進(jìn)行調(diào)整。
【插曲】牧神小課堂-什么是Layer Norm:

我們更多使用Layer Norm是在序列化數(shù)據(jù)上,因?yàn)樾蛄械拈L(zhǎng)度會(huì)變化,如果使用batch norm,均值方差可能會(huì)波動(dòng)很大,從而影響效果,而layer norm是針對(duì)一個(gè)樣本進(jìn)行的,不會(huì)受到影響。
解碼器逐個(gè)查看每個(gè)子層:縮放點(diǎn)積注意力機(jī)制
我們?cè)?Transformer 中使用的注意力機(jī)制是 Scaled Dot-product Attention。Q、K、V 的維度如下圖所示:

這里的注意力機(jī)制,其實(shí)就是相比經(jīng)典的Dot-product Attention多了一個(gè)尺度項(xiàng)。這里的目的是什么呢?當(dāng)d比較小時(shí),縮放不縮放都無(wú)所謂,但是當(dāng)d比較大的時(shí)候,內(nèi)積值的范圍就會(huì)變得很大,不同內(nèi)積之間的差距也會(huì)拉大。這種情況下如果再通過(guò)softmax進(jìn)一步拉大差距,得到的注意力分布就會(huì)非常接近one-hot,這會(huì)導(dǎo)致梯度下降變得困難,模型很難訓(xùn)練。在Transformer中,d=512是比較大的,所以需要進(jìn)行縮放。
下圖清楚地展示了縮放點(diǎn)積注意力機(jī)制的工作原理:

多頭注意力機(jī)制
原始的SDP Attention可學(xué)習(xí)的參數(shù)很少,作者發(fā)現(xiàn)可以先通過(guò)一個(gè)線性層將原始向量投影到多個(gè)低維空間中,然后并行進(jìn)行SDP Attention操作并concatenate起來(lái),可以達(dá)到更好的效果。這和CNN中的多通道機(jī)制類似,先將一個(gè)向量投影成多個(gè)較低維向量,相當(dāng)于分成了多個(gè)視角,然后對(duì)每個(gè)視角都進(jìn)行attention。這樣模型的學(xué)習(xí)能力和潛力就會(huì)大大提升。另外由于這里的降維是參數(shù)化的,模型可以根據(jù)數(shù)據(jù)學(xué)習(xí)到最有用的視角。

點(diǎn)式前饋網(wǎng)絡(luò)
這里的名字只是花哨,其實(shí)就是一個(gè)簡(jiǎn)單的MLP。唯一要注意的是這個(gè)MLP的修飾詞——Point-wise,意思是它對(duì)每個(gè)位置(單詞)分別獨(dú)立地進(jìn)行處理。我在之前的文章《》中畫了一張圖:

逐點(diǎn)前饋圖
即MLP只作用于最后一個(gè)維度,具體公式為:
穆申后來(lái)還畫了一張圖來(lái)總結(jié):

此圖左邊是Transformer的示意圖,右邊是RNN的示意圖(將RNN單元簡(jiǎn)化成了MLP,本質(zhì)是類似的)。
嵌入和 softmax 層
Transformer 使用了三個(gè) embedding:分別對(duì)輸入和輸出的 token 進(jìn)行 embedding,并且使用和 softmax 之前的線性變換中的 embedding 相同的權(quán)重(這是為了能夠通過(guò)相同的 embedding 將解碼器輸出轉(zhuǎn)換回 token 概率,因?yàn)?embedding 的作用就是在 token 和向量之間進(jìn)行轉(zhuǎn)換)。三個(gè) embedding 使用相同的權(quán)重。
另外值得注意的是,作者對(duì) embedding 進(jìn)行了乘法運(yùn)算,這是為了在后面與 position embedding 相乘時(shí)保持尺度相似。
位置編碼
由于self-attention不考慮序列的順序,只是簡(jiǎn)單的聚合了各個(gè)位置的信息,所以無(wú)論順序怎么變,對(duì)于self-attention來(lái)說(shuō)都是不變的。所以這里專門設(shè)計(jì)了position encoding來(lái)增加位置信息。
具體來(lái)說(shuō),文章采用不同周期的sin和cos函數(shù)來(lái)計(jì)算各個(gè)位置的embedding:
其中pos為具體位置的index,i為具體維度。簡(jiǎn)單來(lái)說(shuō),這里為每個(gè)位置構(gòu)建了一個(gè)長(zhǎng)尾向量,用來(lái)表示具體token的位置。
最后將位置編碼直接添加到embedding中并輸入到模型中。
為什么要使用 Self-Attention?
李牧評(píng)論:整篇文章其實(shí)缺少對(duì)模型的解釋。
作者主要通過(guò)下表來(lái)比較self-attention與其他結(jié)構(gòu)的區(qū)別(限制性self-attention被忽略,很少使用):

上圖中,順序操作衡量了處理序列時(shí)的并行復(fù)雜度,復(fù)雜度越小,并行度越高;最大路徑長(zhǎng)度表示序列中任意兩點(diǎn)之間信息傳遞的最大距離。
Self-attention 的主要優(yōu)勢(shì)在于并行度高(相比于 RNN)和信息距離短(相比于 RNN 和 CNN),在復(fù)雜度方面,其實(shí)并沒(méi)有明顯的優(yōu)勢(shì):
在NLP中,n和d往往比較大,因此這三者的計(jì)算復(fù)雜度沒(méi)有質(zhì)的差別。
李牧點(diǎn)評(píng):從計(jì)算效率上看,Transformer 似乎應(yīng)該比 CNN、RNN 更快,但是我們現(xiàn)在遇到的 Transformer 模型卻不是這樣。為什么呢?其實(shí)是因?yàn)?self-attention 對(duì)整個(gè)模型做的假設(shè)比較少,所以我們往往需要更大的數(shù)量、更大的模型才能訓(xùn)練出和 CNN、RNN 一樣的效果。這就使得目前基于 Transformer 的模型非常龐大,成本也非常高。
這里就涉及到歸納偏差的概念,文章中我們知道合理的歸納偏差可以加快模型的訓(xùn)練速度position是什么意思?怎么讀,而self-attention由于歸納偏差比CNN、RNN要小,所以訓(xùn)練起來(lái)比較困難,不過(guò)我猜,對(duì)于大規(guī)模的預(yù)訓(xùn)練來(lái)說(shuō),歸納偏差越小越好吧?
訓(xùn)練細(xì)節(jié)和超參數(shù)
對(duì)于英德翻譯,我們采用BPE分詞方法構(gòu)建了英德通用詞典,使用了8塊P100 GPU,每個(gè)batch耗時(shí)約0.4秒,總訓(xùn)練時(shí)間為12小時(shí),其實(shí)時(shí)間成本還是比較實(shí)惠的。
學(xué)習(xí)率采用warmup,先增大,再減小。
使用兩種類型的正則化:
殘差dropout,在每個(gè)子層的輸出上都使用dropout,在embedding層上也使用dropout,dropout rate = 0.1
標(biāo)簽平滑使用 0.1 的平滑級(jí)別position是什么意思?怎么讀,這會(huì)對(duì)困惑度造成一些影響,但會(huì)提高準(zhǔn)確率和 BLEU 分?jǐn)?shù)
下表是不同模型結(jié)構(gòu)(超參數(shù))的性能差異:

其實(shí)可以修改的參數(shù)并不多,主要是層數(shù)(N),向量維度(),頭數(shù)(h),圖像是根據(jù)和h來(lái)計(jì)算的。
Mushen 評(píng)論寫作
這篇文章很簡(jiǎn)潔,沒(méi)有過(guò)多的介紹和解釋,這是大佬的寫作風(fēng)格。不過(guò)對(duì)于我們大多數(shù)研究者來(lái)說(shuō),還是需要盡可能清晰的交代背景,在正文中花足夠的篇幅把故事講清楚,讓讀者能更好的理解,有更深的領(lǐng)悟。
變壓器
這個(gè)模型最大的意義在于為 NLP 以及 CV、音頻等其他模態(tài)提供了統(tǒng)一的模型架構(gòu),有點(diǎn)類似于 CNN 剛提出時(shí)給 CV 領(lǐng)域帶來(lái)的巨大變革。加上 Transformer,以及基于 Transformer 的各種預(yù)訓(xùn)練模型和其他模態(tài)的成功應(yīng)用,Transformer 對(duì)于多模態(tài)學(xué)習(xí)的推進(jìn)意義深遠(yuǎn)。
然后,盡管Transformer已經(jīng)提出很多年了,但是我們對(duì)于它的真正原理仍然缺乏了解。比如文章標(biāo)題“Attention is all you need”其實(shí)就是錯(cuò)誤的。后續(xù)研究者證明Transformer的成功也離不開MLP、殘差連接等其他組件。attention的作用是聚合序列的信息,而不僅僅是attention本身。
另外,self-attention 相較于 RNN、CNN 等的優(yōu)勢(shì)可能在于它的歸納偏置更具有泛化性,因此經(jīng)過(guò)大規(guī)模訓(xùn)練后,可以學(xué)習(xí)到更豐富、更具有泛化性的知識(shí)。但代價(jià)是其對(duì)數(shù)據(jù)關(guān)鍵信息的捕捉能力下降,需要更多的數(shù)據(jù)和更大的模型來(lái)訓(xùn)練才能達(dá)到理想的效果。
然而 Transformer 的出現(xiàn)給整個(gè) AI 社區(qū)帶來(lái)了新的活力,讓我們發(fā)現(xiàn)在 CNN、RNN 主導(dǎo)的時(shí)代,依然可以設(shè)計(jì)出新的網(wǎng)絡(luò)結(jié)構(gòu)來(lái)大放異彩。這也催生了一系列新的網(wǎng)絡(luò)架構(gòu)設(shè)計(jì),比如純 MLP 模型等等。
以上就是課代表帶來(lái)的課堂筆記啦!筆記雖然簡(jiǎn)單,但畢竟是二手知識(shí),最推薦的還是直接看視頻,嘗嘗牧神的原汁原味。下一期,我們繼續(xù)聽牧神講解大名鼎鼎的BERT,到時(shí)候見~
投稿文章或者交流學(xué)習(xí),備注:昵稱-學(xué)校(公司)-方向,進(jìn)入DL&NLP交流群。
方向很多:機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、python、情緒分析、觀點(diǎn)挖掘、句法分析、機(jī)器翻譯、人機(jī)對(duì)話、知識(shí)圖譜、語(yǔ)音識(shí)別等等。

記得做個(gè)記錄
整理不易,還望給個(gè)在看!