Transformer原文解讀與細(xì)節(jié)復(fù)現(xiàn)
導(dǎo)讀
在Transformer出現(xiàn)以前,深度學(xué)習(xí)的基礎(chǔ)主流模型可分為卷積神經(jīng)網(wǎng)絡(luò)CNN、循環(huán)神經(jīng)網(wǎng)絡(luò)RNN、圖對(duì)抗神經(jīng)網(wǎng)絡(luò)GAN。而Transformer的橫空出世,吸引了越來越多的研究者的關(guān)注:Transformer不僅在NLP領(lǐng)域取得了耀眼的成績(jī),近年來甚至一度屠榜CV領(lǐng)域的各大比賽,熱度超前。所以,基于之前對(duì)Transformer的研究與理解,更基于對(duì)新技術(shù)的好奇與渴求,接下來的幾篇文章我會(huì)從最經(jīng)典的Transformer結(jié)構(gòu)出發(fā),沿著NLP和CV兩大主線,為大家講解幾篇影響力巨大的paper。
前言
Transformer是google的研究團(tuán)隊(duì)在2017年發(fā)表的Attention Is All You Need中使用的模型,經(jīng)過這些年的大量的工業(yè)使用和論文驗(yàn)證,在深度學(xué)習(xí)領(lǐng)域已經(jīng)占據(jù)重要地位。接下來我會(huì)順著論文中的邏輯,來介紹、解釋Transformer的輸入輸出和網(wǎng)絡(luò)結(jié)構(gòu)。
原文鏈接:Attention Is All You Need
Abstract
現(xiàn)在主流的序列轉(zhuǎn)錄模型主要基于是復(fù)雜的循環(huán)結(jié)構(gòu)的RNN和CNN架構(gòu),通過其中的編碼器Encoder和解碼器Decoder來實(shí)現(xiàn)。而本文提出的Transformer完全摒棄了之前的循環(huán)和卷積操作,完全基于注意力機(jī)制,擁有更強(qiáng)的并行能力,訓(xùn)練效率也得到較高提升。
Intro
之前提到過,在Transformer提出以前,主流的NLP模型包括RNN、LSTM、GRU等,這些模型是有以下缺點(diǎn):
- 難以并行
- 時(shí)序中過早的信息容易被丟棄
- 內(nèi)存開銷大
主要原因如下:由于這些網(wǎng)絡(luò)都是由前往后一步步計(jì)算的,當(dāng)前的狀態(tài)不僅依賴當(dāng)前的輸入,也依賴于前一個(gè)狀態(tài)的輸出。即對(duì)于網(wǎng)絡(luò)中的第個(gè)t狀態(tài),與前t-1個(gè)狀態(tài)都有關(guān),使得網(wǎng)絡(luò)必須一步一步計(jì)算;當(dāng)較為重要的信息在較早的時(shí)序中進(jìn)入網(wǎng)絡(luò)時(shí),多次傳播過程中可能保留很少甚至被丟棄;從另一角度來考慮,即使重要的信息沒有被丟棄,而是隨著網(wǎng)絡(luò)繼續(xù)傳遞,那么勢(shì)必會(huì)造成內(nèi)存的冗余,導(dǎo)致開銷過大。 其網(wǎng)絡(luò)流程圖如下圖所示。
所以,作者團(tuán)隊(duì)因勢(shì)利導(dǎo),引出了本文純attention、高并行、高效率的Transformer網(wǎng)絡(luò)結(jié)構(gòu)。原文中是這樣說的:
In this work we propose the Transformer, a model architecture eschewing recurrence and instead relying entirely on an attention mechanism to draw global dependencies between input and output.
Related Work
multi-head
在CNN中,我們會(huì)使用多個(gè)channel來表達(dá)不同的特征模式,Transformer的多頭注意力與多通道有相類似的地方,就是通過不同的head抽取數(shù)據(jù)的不同特征模式。
self-attention
自注意,或者說內(nèi)部注意,是一種將單個(gè)序列的不同位置聯(lián)系起來以計(jì)算序列的表示形式的注意機(jī)制。自注意力機(jī)制在閱讀理解、抽象摘要、文本蘊(yùn)涵和學(xué)習(xí)任務(wù)獨(dú)立的句子表征等任務(wù)中都得到了成功的應(yīng)用,具體的內(nèi)部細(xì)節(jié)在后續(xù)章節(jié)中介紹。
Model
Transformer的模型分為encoder和decoder兩部分,即編碼器和解碼器兩部分。對(duì)于原始輸入(x1,x2,…,xn),編碼器將其轉(zhuǎn)化為機(jī)器可理解的向量(z1,z2,…,zn),解碼器將編碼器的輸出作為輸入,進(jìn)而生成最終的解碼結(jié)果(y1,y2,…,yn)。其模型結(jié)構(gòu)如下圖所示:
輸入
首先,我們來看看編碼器與解碼器的輸入部分。
Transformer 中單詞的輸入表示 x由單詞 Embedding 和位置 Embedding (Positional Encoding) 相加得到。其中,單詞的 Embedding 有很多種方式可以獲取,例如可以采用 Word2Vec、Glove 等算法預(yù)訓(xùn)練得到,也可以在 Transformer 中訓(xùn)練得到;位置 Embedding 表示單詞出現(xiàn)在句子中的位置,因?yàn)?Transformer 不采用 RNN 的結(jié)構(gòu),而是使用全局信息,不能利用單詞的順序信息,而這部分信息對(duì)于 NLP 來說非常重要。所以 Transformer 中使用位置 Embedding 保存單詞在序列中的相對(duì)或絕對(duì)位置。位置 Embedding 用 PE表示,PE 的維度與單詞 Embedding 是一樣的。PE 可以通過訓(xùn)練得到,也可以使用某種公式計(jì)算得到。在 Transformer 中采用了后者,計(jì)算公式如下:
其中,pos 表示單詞在句子中的位置,d 表示 PE的維度 (與詞 Embedding 一樣),2i 表示偶數(shù)的維度,2i+1 表示奇數(shù)維度 (即 2i≤d, 2i+1≤d)。使用這種公式計(jì)算 PE 有以下的好處:
- 使 PE 能夠適應(yīng)比訓(xùn)練集里面所有句子更長(zhǎng)的句子,假設(shè)訓(xùn)練集里面最長(zhǎng)的句子是有 20 個(gè)單詞,突然來了一個(gè)長(zhǎng)度為 21 的句子,則使用公式計(jì)算的方法可以計(jì)算出第 21 位的 Embedding。
- 可以讓模型容易地計(jì)算出相對(duì)位置,對(duì)于固定長(zhǎng)度的間距 k,PE(pos+k) 可以用 PE(pos) 計(jì)算得到。因?yàn)?Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。
Multi-attention(self attention)
結(jié)構(gòu)
上圖是 Self-Attention 的結(jié)構(gòu),在計(jì)算的時(shí)候需要用到矩陣Q(查詢),K(鍵值),V(值)。在實(shí)際中,Self-Attention 接收的是輸入(單詞的表示向量x組成的矩陣X) 或者上一個(gè) Encoder block 的輸出。而Q,K,V正是通過 Self-Attention 的輸入進(jìn)行線性變換得到的。
Q, K, V 的計(jì)算
Self-Attention 的輸入用矩陣X進(jìn)行表示,則可以使用線性變陣矩陣WQ,WK,WV計(jì)算得到Q,K,V。計(jì)算如下圖所示,注意 X, Q, K, V 的每一行都表示一個(gè)單詞。
Self-Attention 的輸出
得到矩陣 Q, K, V之后就可以計(jì)算出 Self-Attention 的輸出了,計(jì)算的公式如下:
公式中計(jì)算矩陣Q和K每一行向量的內(nèi)積,為了防止內(nèi)積過大,因此除以 dk的平方根。Q乘以K的轉(zhuǎn)置后,得到的矩陣行列數(shù)都為 n,n 為句子單詞數(shù),這個(gè)矩陣可以表示單詞之間的 attention 強(qiáng)度。下圖為Q乘以 KT ,1234 表示的是句子中的單詞。
得到[公式] 之后,使用 Softmax 計(jì)算每一個(gè)單詞對(duì)于其他單詞的 attention 系數(shù),公式中的 Softmax 是對(duì)矩陣的每一行進(jìn)行 Softmax,即每一行的和都變?yōu)?1.
得到 Softmax 矩陣之后可以和V相乘,得到最終的輸出Z。
Multi-Head Attention
在上一步,我們已經(jīng)知道怎么通過 Self-Attention 計(jì)算得到輸出矩陣 Z,而 Multi-Head Attention 是由多個(gè) Self-Attention 組合形成的,下圖是論文中 Multi-Head Attention 的結(jié)構(gòu)圖。
從上圖可以看到 Multi-Head Attention 包含多個(gè) Self-Attention 層,首先將輸入X分別傳遞到 h 個(gè)不同的 Self-Attention 中,計(jì)算得到 h 個(gè)輸出矩陣Z。下圖是 h=8 時(shí)候的情況,此時(shí)會(huì)得到 8 個(gè)輸出矩陣Z。文章來源:http://www.zghlxwxcb.cn/news/detail-401242.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-401242.html
到了這里,關(guān)于【Transformer開山之作】Attention is all you need原文解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!