
《Attention is All You need》是NLP的經(jīng)典論文之一。網(wǎng)上對(duì)其科普的文章很多了(參考本文reference),本文對(duì)其中對(duì)一些細(xì)節(jié)及其Tensorflow代碼實(shí)現(xiàn)進(jìn)行了討論。
問(wèn)題
Masked self-attention 什么意思?
Masked的意思就是只能在做self-attention的時(shí)候看不到這個(gè)詞以后的單詞。因?yàn)橐卯?dāng)前的輸出來(lái)預(yù)測(cè)未來(lái)的詞,如果能看到未來(lái)的詞相當(dāng)于系統(tǒng)作弊。
為什么使用Multi-Head?
不同的head可以學(xué)到不同的特征,
為什么使用殘差?
使用殘差以后,公式變成了:
這樣在反向傳播中,對(duì)x求偏導(dǎo)數(shù)對(duì)時(shí)候,就多了一個(gè)常數(shù)。解決了梯度消失的問(wèn)題。
Layer normalization?
Positional Encoding有什么作用?
在單獨(dú)做self-attention的時(shí)候,由于attention的計(jì)算公式?jīng)]有考慮句子中的單詞順序,所以需要在單詞的向量中加入位置信息的編碼。本文采用位置編碼和embedding相加的方式進(jìn)行運(yùn)算。
具體的思路就是使用以下公式:
其中pos表示在句子中的位置,i表示在詞向量中的位置,是詞向量的維度。
舉個(gè)例子(出自Link):
假設(shè)我們的embedding是,
那么我們獲得的結(jié)果就是:
Self-attention計(jì)算為什么要除以
?
self-attention計(jì)算公式如下:
除以的原因是防止在QK計(jì)算乘積的時(shí)候數(shù)值過(guò)大造成上溢出。我們都知道softmax函數(shù)在x越大的時(shí)候越接近與1。不同數(shù)之間計(jì)算的結(jié)果差異就會(huì)變小。除以
可以幫助解決這個(gè)問(wèn)題。
Self-attention和Context-attention的區(qū)別?
Attention和Self-attention 的區(qū)別?
- Attention計(jì)算的是輸出序列隱藏狀態(tài)和每個(gè)輸入隱藏狀態(tài)之間的關(guān)系
- Self-attention計(jì)算的是每個(gè)輸入和輸入序列之間的關(guān)系
Transormer 并行計(jì)算, 哪些步驟是可以并行的?
Encoder和Decoder的連接方式
Transormer優(yōu)勢(shì)?
- 傳統(tǒng)的RNN每一步的輸出都依賴前面的輸出,難以并行;并且預(yù)處理的時(shí)候需要處理成相同長(zhǎng)度的句子。雖然LSTM中引入了forget gate的概念,但是只能記住最近的幾個(gè)輸入,對(duì)于長(zhǎng)句子效果不好。解決了LSTM和RNN的長(zhǎng)距離依賴的問(wèn)題。
- CNN可以并行計(jì)算,但是不能處理變長(zhǎng)的句子問(wèn)題。
- Transformer在計(jì)算self-attention的時(shí)候就是矩陣的相乘,可以進(jìn)行并行。并且計(jì)算了單詞之間的關(guān)系,更容易學(xué)習(xí)到句子中的依賴關(guān)系。
Transformer 缺點(diǎn):
Transformer非常強(qiáng)大,但是還是有很多的缺點(diǎn)。
作者:l1n3x
鏈接:http://www.itdecent.cn/p/bccb409a146f
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。
Reference:
最佳解釋:
-[GIF 動(dòng)畫(huà)展示]
(http://jalammar.github.io/illustrated-transformer/)