跟李沐讀論文之——Transformer

情感導師 7522

 添加導師LINE:jaqg

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單幹貨

以下文章來源於SimpleAI ,作者郭必揚

標題+作者

跟李沐讀論文之——Transformer

標題:Attention Is All You Need

發表:NIPS-2017

機構:Google

Comments by Li Mu: 8個作者都是共同貢獻,這在計算機論文中很少見。但是為了解釋為什麼有這麼多共同一作,論文在腳註中清楚了寫明了每個人在這個工作中的貢獻,確實大家都擔得上「共同貢獻」這一說。

摘要

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

本文提出了一個新的簡單的網絡架構——Transformer,完全基於attention機制。

Comments by Li Mu: 這是個好名字,跟「變形金剛」表達相同

貢獻:網絡簡單,且跟之前的網絡結構都不一樣,不使用rnn或cnn的單元。並行度更好,訓練快很多。在機器翻譯上取得了更好的效果。

Comments by Li Mu: 最開始Transformer是在機器翻譯的背景上提出的,這是個小領域,因此可能最初並沒有收到廣泛關注。後面Transformer開始在各種其他領域大顯神通,到最近在vision上面也表現優異,才真正火出圈了

結論

本文提出的Transformer是第一個純基於attention的序列轉錄模型,使用multi-head self-attention替代了之前的rnn結構。

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

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

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

最後代碼開源在tensor2tensor庫裡面。

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

Intro(導言)

介紹了傳統的RNN,CNN以及encoder-decoder架構。分析了RNN的缺點:1. 難以並行 2. 容易遺忘。再介紹了attention機制。最後提出了一個全新的架構Transformer。

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

Background(相關工作)

為了提高對序列數據的計算效率,很多工作都使用卷積神經網絡作為基礎的building block來進行模型構建,從而實現並行的計算。然而,CNN是通過滑動窗口來提取特徵,所以對於長距離的關係較難捕捉。但CNN還有一個優點——多通道機制,使得模型可以從多個角度去提取數據的特徵。

所以Transformer借用了多通道的思想,設計了多頭的注意力機制

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

模型

序列模型中較好的是encoder-decoder架構。

要點:

encoder把輸入序列處理得到中間表示,然後decoder讀入這個中間表示,處理後得到輸出序列;

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

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

Transformer依然是一個encoder-decoder的架構,但它主要組成是self-attentionpoint-wise fully connected layer,結構如下:

Comments by Li Mu: 這個圖畫的很好,在神經網絡的時代,畫圖是一個重要的技能。然而這個圖屬於那種「不明覺厲」的圖,很好看,但是不容易看懂。

Encoder

Encoder由N=6個一模一樣的層組成;

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

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

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

Comments by Li Mu: 總之,Encoder就倆超參數:N和d。這種設計直接影響了後面各種基於Transformer的模型設計,比如BERT,GPT等等,都主要調節這兩個參數。

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

Batch Norm就是把一個batch的tensor,按照feature的每個維度(即按照列)去進行規範化(均值0方差1)

Layer Norm則是在batch內逐個樣本去做規範化

我們在序列化數據中更常使用的是Layer Norm,因為序列的長度會變化,如果使用batch norm的話,可能導致均值方差波動很大,從而影響效果,而layer norm則是逐個樣本去進行的,就不會受影響。

Decoder

跟Encoder一樣由N=6個一模一樣的層構成;

每個層,包含3個子層,相比於Encoder中的設計,多了一個multi-head attention layer;

為了防止Decoder在處理時看到未來的信息,這裡對self-attention做了進一步的處理,即使用了一個mask機制,在t時刻時把後面的單元都mask掉,從而不會attend到未來的信息。

逐個看看每個sub-layer:

Scaled Dot-product Attention

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

這裡的attention機制,相比於經典的Dot-product Attention其實就是多了一個scale項。這裡的作用是啥呢?當d比較小的時候,要不要scale都無所謂,但是當d比較大時,內積的值的範圍就會變得很大,不同的內積的差距也會拉大,這樣的話,再經過softmax進一步的擴大差距,就會使得得到的attention分布很接近one-hot,這樣會導致梯度下降困難,模型難以訓練。在Transformer中,d=512,算比較大了,因此需要進行scaling。

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

Multi-Head Attention

原本的SDP Attention,沒什麼可學習的參數,作者發現,我們可以先把原本的向量,通過線性層隱射到多個低維的空間,然後再並行地進行SDP Attention操作,在concat起來,可以取得更好的效果。這類似於CNN中的多通道機制。一個向量先隱射成多個更低維的向量,相當於分成了多個視角,然後每個視角都去進行Attention,這樣模型的學習能力和潛力就會大大提升,另外由於這裡的降維都是參數化的,所以讓模型可以根據數據來學習最有用的視角。

Point-wise Feed-forward Networks

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

point-wise feed-forward示意圖

即MLP只是作用於最後一個維度,具體公式是:

沐神後面也畫圖總結了一下:

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

Transformer是通過attention來全局地聚合序列的信息,然後通過MLP進行語義空間的轉換;

RNN則是通過把上一時刻的信息傳入下一時刻的單元,來使用序列信息,但也是通過MLP進行語義空間轉換。所以二者本質區別在於如何使用序列的信息。

Embedding和softmax層

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

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

Position Encoding

由於self-attention實際上是不考慮序列順序的,只是單純把各個position的信息進行聚合,無論順序怎麼改變,對於self-attention來說都是一樣的。因此,這裡特意設計了position encoding這種東西,來添加位置信息。

具體的,文章使用的是周期不同的sin和cos函數來計算得到每個position的Embedding:

其中pos是具體位置的index,i則是具體的dimension。總之,這裡給每個位置,都構造了一個長尾的向量,來作為該position也就是某個具體token的位置表示。

最後,這個position encoding是直接跟embedding相加,輸入到模型中。

為啥使用Self-Attention

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

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

上圖中,sequential operations衡量的是在處理序列的時候的並行複雜度,越小說明並行度越高;max path length則表示序列中任意兩個點傳遞信息的最大距離。

Self-attention的主要優勢在於並行度高(相比RNN)、信息距離短(相比RNN和CNN)。而在複雜度方面,其實沒有明顯優勢:

self-attention每層的複雜度是,是因為有n個position,每個position都要計算n次attention,在計算attention的時候,是進行維度為d的內積,所以複雜度是n * n * d;

RNN層的複雜度是,因為有n個position,每個position會經過一個線性變化(矩陣乘法),變換的複雜度是d * d,因此最終複雜度是n * d * d;

CNN實際上跟RNN類似,但因為往往涉及到多個kernel,所以多乘了一個k。但一般在NLP中k也不大,所以沒有大差別。

在NLP中,往往n和d都會比較大,所以這三者的計算複雜度沒有質的差別。

Comments by Li Mu: 看起來應該Transformer在計算效率上會比CNN、RNN更快,但我們現在體會到的Transformer的模型卻不是這樣的,為啥呢?實際上是因為self-attention對整個模型的假設更少,所以我們往往需要更大量的數量、更大的模型才能夠訓練出跟CNN、RNN同樣的效果來。這就導致現在基於Transformer的模型都特別大特別貴。

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

訓練細節&超參數

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

學習率使用了warmup,先增強後減。

使用了兩種正則化:

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

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

下表則是展示了不同的模型結構(超參數)的性能差別:

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

沐神點評

寫作上

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

Transformer

這個模型的最大意義在於給NLP屆乃至CV、audio等其他模態的數據提供了統一的模型架構,有點類似於CNN剛提出時對CV領域的巨大變革。有了Transformer,以及現在各種基於Transformer的預訓練模型、其他模態的成功運用,Transformer對於多模態學習的進步有着深遠的意義。

然後,縱使Transformer已經提出了多年,我們對Transformer的真正原理依然缺乏理解。例如,文章的標題Attention is all you need實際上也是不對的,後續的研究者已經證明Transformer的成功對於MLP、residual connection等其他組件也是缺一不可的,attention的作用就是對序列的信息做了聚合,並不是attention一個人起了全部作用。

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

但Transformer的出現,給了整個AI屆新的活力,讓我們發現在CNN、RNN統治的時代,我們依然可以設計出新的網絡結構發光發熱,因此也帶動了一系列新的網絡架構設計,比如純MLP的模型等等。

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

評論列表

頭像
2024-09-07 21:09:12

兩個人的感情往往都是當局者迷,找人開導一下就豁然開朗了

頭像
2024-04-21 10:04:17

求助

頭像
2023-11-22 16:11:04

發了正能量的信息了 還是不回怎麼辦呢?

 添加導師LINE:jaqg

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單幹貨

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