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

標題 + 作者

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

李牧點評:這幅圖畫得非常好,在神經網絡時代,畫圖是一項重要的技能,不過這幅圖屬于那種“強大而不知其所以然”的,看上去很好看,但理解起來卻不容易。
編碼器
李牧點評:簡單來說,Encoder只有兩個超參數:N和d。這個設計直接影響了后續各種基于Transformer的模型的設計,比如BERT、GPT等,主要都是對這兩個參數進行調整。
【插曲】牧神小課堂-什么是Layer Norm:

我們更多使用Layer Norm是在序列化數據上,因為序列的長度會變化,如果使用batch norm,均值方差可能會波動很大,從而影響效果,而layer norm是針對一個樣本進行的,不會受到影響。
解碼器逐個查看每個子層:縮放點積注意力機制
我們在 Transformer 中使用的注意力機制是 Scaled Dot-product Attention。Q、K、V 的維度如下圖所示:

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

多頭注意力機制
原始的SDP Attention可學習的參數很少,作者發現可以先通過一個線性層將原始向量投影到多個低維空間中,然后并行進行SDP Attention操作并concatenate起來,可以達到更好的效果。這和CNN中的多通道機制類似,先將一個向量投影成多個較低維向量,相當于分成了多個視角,然后對每個視角都進行attention。這樣模型的學習能力和潛力就會大大提升。另外由于這里的降維是參數化的,模型可以根據數據學習到最有用的視角。

點式前饋網絡
這里的名字只是花哨,其實就是一個簡單的MLP。唯一要注意的是這個MLP的修飾詞——Point-wise,意思是它對每個位置(單詞)分別獨立地進行處理。我在之前的文章《》中畫了一張圖:

逐點前饋圖
即MLP只作用于最后一個維度,具體公式為:
穆申后來還畫了一張圖來總結:

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

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

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

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