Transformer論文逐段精讀【論文精讀】

Transformer是基礎(chǔ)模型,對整個(gè)領(lǐng)域影響很大

標(biāo)題:你只要注意就行了
作者:8個(gè),對文章貢獻(xiàn)均等,星號表示貢獻(xiàn)值,當(dāng)作者比較多時(shí)把每個(gè)作者的貢獻(xiàn)明白寫出來很好
摘要:

1、主流的序列轉(zhuǎn)錄模型,序列轉(zhuǎn)錄:給你一個(gè)序列生成另一個(gè)序列
2、在性能最好的模型里面,通常也會在編碼器和解碼器之間使用注意力機(jī)制
3、簡單架構(gòu),(1)“變形金剛”比較有意思的取名,讓大家更容易記?。?)本模型僅僅用注意力機(jī)制,而沒有用循環(huán)或卷積
4、模型打到28.4 BLEU,BLEU是機(jī)器翻譯里的一個(gè)常用衡量標(biāo)準(zhǔn),英語到德語的翻譯工作,比目前最好的模型好了2個(gè) BLEU
5、Transformer架構(gòu)泛化到別的任務(wù)上面都很好
結(jié)論:

1、把之前所有做序列轉(zhuǎn)錄模型的循環(huán)層全部轉(zhuǎn)換為多頭自注意力機(jī)制,主要是提出這么一個(gè)層
2、在機(jī)器翻譯上,Transformer能夠訓(xùn)練的比其他架構(gòu)快很多,事跡結(jié)果比較好
3、想把這種純基于注意力機(jī)制的模型應(yīng)用到別的任務(wù)上,包括圖片、語音、視頻。使得生成不那么時(shí)序化也是一個(gè)研究方向。
引言:

1、在時(shí)序模型(2017年之前RNN,包括LSTM、GRU)
2、RNN特點(diǎn)(缺點(diǎn)):給你一個(gè)序列,計(jì)算順序是從左往右一步步往前做(假設(shè)是一個(gè)句子,一個(gè)詞一個(gè)詞的看,對第t個(gè)詞會計(jì)算輸出ht,即詞的隱藏狀態(tài),ht由ht-1和當(dāng)前詞本身決定)
(1)難以并行,算ht時(shí)必須保證ht-1輸入完成了(假設(shè)100個(gè)詞,則必須時(shí)序算100步,導(dǎo)致時(shí)間上無法并行)
(2)如果時(shí)序較長,早期的時(shí)序信息在后面可能會丟掉
3、注意力機(jī)制已經(jīng)在RNN的應(yīng)用,transformer之前注意力機(jī)制已經(jīng)成功用在編碼器和解碼器了,主要用在怎么把編碼器的東西有效傳遞給解碼器
4、Transformer不再使用循環(huán)神經(jīng)層,而是純注意力機(jī)制,并行度高,用更短的時(shí)間實(shí)現(xiàn)更好的結(jié)果
相關(guān)工作:

1、如何使用CNN替換RNN來減少時(shí)序計(jì)算
主要問題:CNN對于比較長的序列難以建模。CNN計(jì)算時(shí)每次去看一個(gè)個(gè)比較小的窗口(3x3像素塊)如果兩個(gè)像素相隔較遠(yuǎn)需要很多層卷積才能把兩個(gè)隔得遠(yuǎn)的像素融合起來
Transformer里的注意力機(jī)制:每一次可以看到所有像素,一層就能把一個(gè)序列看到
為了模擬CNN中多輸出通道效果,提出多頭注意力機(jī)制
2、自注意力機(jī)制,之前已經(jīng)有人提到
3、記憶網(wǎng)絡(luò)(2017年研究重點(diǎn))
4、Transformer是第一個(gè)只依賴于自注意力來做encoder-decoder的架構(gòu)模型
模型架構(gòu):
編碼器和解碼器的輸出(m、n)可以不等長
什么叫自回歸?

N x Transformer block
每一個(gè)子層用殘差連接,最后使用layer normalization,

LN和BN對比,為什么在變長的應(yīng)用里不使用BN
BN:每次把一列(1 個(gè) feature)放在一個(gè) mini-batch 里,均值變成 0, 方差變成 1 的標(biāo)準(zhǔn)化。
How:(該列向量 - mini-batch 該列向量的均值)/(mini - batch 該列向量的方差)
訓(xùn)練時(shí):mini-batch 計(jì)算均值;
測試時(shí):使用 全局 均值、方差。
LN:很多時(shí)候和BN一樣,就是BN轉(zhuǎn)置一下

LayerNorm 和 BatchNorm 的例子理解
BatchNorm:n本書,每本書的第一頁拿出來,根據(jù) n 本書的第一頁的字?jǐn)?shù)均值 做 Norm
LayerNorm:針對某一本書,這本書的每一頁拿出來,根據(jù)次數(shù)每頁的字?jǐn)?shù)均值,自己做 Norm

雖然k、v不變,但是隨著q的改變,因?yàn)闄?quán)重分配不一樣導(dǎo)致輸出不同

2 種常見的注意力機(jī)制:
1、加性的注意力機(jī)制(它可以處理你的 query 和 key 不等長的情況)
2、點(diǎn)積 dot-product 的注意力機(jī)制 (本文采用 scaled,? sqrt(dk) ),所以你可以看到它的名字它叫做 scale 的。
選用 dot-product 原因:兩種注意力機(jī)制其實(shí)都差不多, 點(diǎn)乘實(shí)現(xiàn) 簡單、高效,兩次矩陣乘法計(jì)算。
scale dot-product? sqrt(dk)? 原因 :當(dāng)dk不是很大的時(shí)候,除不除無所謂;當(dāng)dk比較大時(shí),相對差距就比較大,導(dǎo)致值最大的那一個(gè)做出來softmax值會更加靠近1,剩下的值會靠近于0,這時(shí)梯度就會比較小,跑不動

怎么做mask:避免在 t 時(shí)刻,看到 t 時(shí)刻以后的輸入。
假設(shè)Q和K等長,都為n,時(shí)間上能對應(yīng)起來,對于第t時(shí)刻qt,做計(jì)算時(shí)應(yīng)該只看k1,...kt-1,不要看kt及其之后的東西,因?yàn)閗t在當(dāng)前時(shí)刻還沒有,在注意力機(jī)制中qt會和K中所有k1,...kt,...kn計(jì)算,算出來之后我們要保證計(jì)算權(quán)重的時(shí)候不要用到后面的東西。
把 t 時(shí)刻以后 qt 和 kt 的值換成一個(gè)很大的負(fù)數(shù),如 1 ^ (-10),進(jìn)入 softmax 后,權(quán)重為0。 --> 和 V 矩陣做矩陣乘法時(shí),沒看到 t 時(shí)刻以后的內(nèi)容,只看 t 時(shí)刻之前的 key - value pair。
與其做一個(gè)單個(gè)的注意力函數(shù),不如說把整個(gè) query、key、value 整個(gè)投影 project 到 1個(gè)低維,投影 h 次。 然后再做 h 次的注意力函數(shù),把每一個(gè)函數(shù)的輸出 拼接在一起,然后 again projected,會得到最終的輸出。


3 種 不一樣的注意力層
encoder 的注意力層
假設(shè)句子長度是 n,encoder 的輸入是一個(gè) n 個(gè)長為 d 的向量。
encoder 的注意力層,有三個(gè)輸入,它分別表示的是key、value 和 query。
一根線過來,它復(fù)制成了三下:同樣一個(gè)東西,既 key 也作為 value 也作為 query,所以叫做自注意力機(jī)制。key、value 和 query 其實(shí)就是一個(gè)東西,就是自己本身。
decoder 的 masked multi-head attention
在解碼器的時(shí)候,后面的東西要設(shè)置成0

decoder 的 multi-head attention?
不再是 self-attention。
key - value 來自 encoder 的輸出。

query 是來自 decoder 里 masked multi-head attention 的輸出。

圖中紅色方塊:encoder 的輸出?value 和 key 。
encoder 最后一層的輸出: n 個(gè) 長為 d 的向量。
圖中綠色方塊:decoder 的 masked multi-head attention + Add & Norm 的輸出是 m 個(gè) 長為 d 的向量。
圖中藍(lán)色方塊:decoder 的輸出
根據(jù) query 算 輸出: value 的加權(quán)和 (權(quán)重 取決于 紅色方塊 和 綠色方塊 的相似度)
3.3 Position-wise Feed-Forward Networks
作用在最后一個(gè)維度的 MLP

最簡單情況:沒有殘差連接、沒有 layernorm、 attention 單頭、沒有投影??春?RNN 區(qū)別。

RNN 跟 transformer 異:如何傳遞序列的信息
RNN 是把上一個(gè)時(shí)刻的信息輸出傳入下一個(gè)時(shí)候做輸入。Transformer 通過一個(gè) attention 層,去全局的拿到整個(gè)序列里面信息,再用 MLP 做語義的轉(zhuǎn)換。
RNN 跟 transformer 同:語義空間的轉(zhuǎn)換 + 關(guān)注點(diǎn)
用一個(gè)線性層 or 一個(gè) MLP 來做語義空間的轉(zhuǎn)換。
關(guān)注點(diǎn):怎么有效的去使用序列的信息。
3.4 Embeddings and Softmax
embedding:將輸入的一個(gè)詞、詞語 token 映射成 為一個(gè)長為 d 的向量。學(xué)習(xí)到的長為 d 的向量 來表示整個(gè)詞、詞語 token。
embedding:將輸入的一個(gè)詞、詞語 token 映射成 為一個(gè)長為 d 的向量。學(xué)習(xí)到的長為 d 的向量 來表示整個(gè)詞、詞語 token。
本文 d = 512
編碼器、解碼器、最后 softmax 之前的 3 個(gè) embedding 共享權(quán)重。--> 訓(xùn)練更簡單。
3.5 Positional Encoding
Why? attention 不會有時(shí)序信息。
順序會變,但是值不會變,有問題!
在處理時(shí)序數(shù)據(jù)的時(shí)候,一句話里面的詞完全打亂,那么語義肯定會發(fā)生變化,但是 attention 不會處理這個(gè)情況。 --> 加入時(shí)序信息
How:RNN 把上一時(shí)刻的輸出 作為下一個(gè)時(shí)刻的輸入,來傳遞時(shí)序信息。
How:attention 在輸入里面加入時(shí)序信息 --> positional encoding
計(jì)算機(jī)表示一個(gè) 32 位的整數(shù):32個(gè) bit,每個(gè) bit 上有不同的值來表示。

