強(qiáng)烈推薦!臺大李宏毅自注意力機(jī)制和Transformer詳解!

Self-attention
對于輸入Seg中向量不確定多的情況,Self-attention會考慮所有向量。
(且可以多次交替使用)

Self-attention的輸入是一組向量,輸出也是一組向量,但考慮了整個seq產(chǎn)生的。步驟如下:
1、判斷哪個和a1的關(guān)聯(lián)性

求關(guān)聯(lián)性的方法 點(diǎn)積和相加:

點(diǎn)積法:將兩個向量分別乘以權(quán)重矩陣,再進(jìn)行點(diǎn)積。
2、把a(bǔ)1乘以W叫query,把a(bǔ)3-a4乘W叫key,計算出每個的關(guān)聯(lián)性α,再用softmax得到α'。

3、然后再將所有向量v * α,再求和得到b
用矩陣相乘來理解一下:

多頭注意力模型
相關(guān)有很多種,所以可能不止一個q,不同的q負(fù)責(zé)不同種類的相關(guān)性。有幾個q就自然有幾個k和v。
以兩個head為例:

得到多個b,在將其接起來傳到下一層。
位置編碼
沒有包含位置信息,但有時位置資訊有時很重要。如第一個詞一般不是動詞。
所以,給每個位置加一個位置向量e,然后把e加到a上。
最早的論文中用的vector e:

但也可以學(xué)出來,如多種e的比較:

語音中使用Attention:
seg很長,而Attention矩陣的大小是L^2。
所以長序列的語音問題,會只取一小個范圍。
圖像中使用Attention:
把一張圖片看做vector set,即1×3向量的集合。
CNN也可以看做一種簡化版的self-attention(只考慮感受野內(nèi)的相關(guān)性)。
Self-attention是CNN的廣義。Self-attention彈性更大,可以從更大的數(shù)據(jù)量中得到好處。
Self-Attention vs RNN:

都會把序列扔給FC,Self-Attn考慮了整個Seq,RNN只有左邊的,但其實(shí)RNN也可以用雙向的,即Bi-RNN。
RNN中遠(yuǎn)距離的信息傳遞要經(jīng)過一段時間。且RNN無法并行化,而Self-Attn可以并行處理。
運(yùn)算速度上Self-Attn大于RNN。
圖(Graph)中使用Self-Attetion:
邊已經(jīng)揭示了點(diǎn)的關(guān)聯(lián)性,所以可以選擇只計算邊的頂點(diǎn)間的關(guān)聯(lián)性。這也是一種GNN的變體。
//疑問:是否可以把注意力層理解為一個具有一定RNN功能的CNN層?
Transformer
一個Seq2Seq模型
輸入一個序列,輸出一個序列,輸入輸出序列的長度都不確定,由機(jī)器自己決定。
如:語音辨識,機(jī)器翻譯,語音翻譯(有些語言連文字都沒有),聊天機(jī)器人,甚至文法剖析、多標(biāo)簽分類和目標(biāo)識別。
如臺語語音辨識、合成
硬train一發(fā)
大部分NLP都可以看做Seq2Seq。

架構(gòu)
Encoder 和 Decoder架構(gòu)
Encoder:給一排向量,輸出一排向量
Encoder的一個Block(在自注意力和FC上加了residual,并且使用了layer norm):

更具體地,Encoder的結(jié)構(gòu):

Decoder:
Autoregressive
Decoder會把自己的輸出當(dāng)做下一個輸入。輸入時加一個BEGIN符號。

Transformer的Decoder和Encoder的差別只在于中間部分,以及最后多了一個Softmax。
Decoder中的Masked,即在算bi時,不考慮i之后的aj。這樣更接近于decoder的運(yùn)作方式。

decoder如何決定輸出序列的長度?
用特殊符號END表示"斷"。讓機(jī)器產(chǎn)生END的概率最大時表示結(jié)束。

AT vs NAT
NAT會給多個BEGIN,一次性生成完成完整的句子(注意位置嵌入的作用)。要由特殊方法判斷終止。
NAT可以平行化,可以控制輸出長度(在語音中可以據(jù)此控制說話速度)。但NAT通常不如AT。

Cross attention
decoder產(chǎn)生一個q,去和encoder的輸出a'做注意力,結(jié)果進(jìn)入FC。(原論文中decoder中每一層都是用encoder最后一層輸出,但也可以變化)

每產(chǎn)生一個字就是從幾千個字中進(jìn)行的分類問題。訓(xùn)練時希望所有的字(含END)的交叉熵最少。
訓(xùn)練decoder時會給正確答案來訓(xùn)練,即teacher forcing。

Copy Mechanism:輸出從輸入中復(fù)制一部分,如聊天機(jī)器人、摘要。
Guided Attention:強(qiáng)迫要看到所有輸入,要求機(jī)器有固定的方式,如訓(xùn)練時Attention必須從左到右。在語音辨識和語音合成中用。
Beam Search:每次找最多的是Greedy Decoding。可能開始選的不好,但是后面很好。Beam Search就是尋找這些路徑的方法,但Beam Search有時有用、有時沒用,因?yàn)橛袝r找出分?jǐn)?shù)最高的路不一定就是最好的,如需要一些創(chuàng)造力、沒有單一答案的任務(wù)(如故事補(bǔ)全、語音合成,TTS加noise才能產(chǎn)生正常的聲音,加入一些隨機(jī)性反而是人類覺得較好的)
BLEU score:最小化交叉熵 ≠ 最大化BLEU score。但是BLEU無法微分!方法:當(dāng)遇到無法optimize,就把它當(dāng)做RL硬做!

訓(xùn)練和測試不一致(Exposure Bias):
一步錯步步錯
方案是給encoder的輸入加一些噪聲,稱為Scheduled Sampling,在Transformer中為了不傷害其并行性會有一定改變。
