《Attention is All You need》是NLP的經(jīng)典論文之一。網(wǎng)上對其科普的文章很多了(參考本文reference)允粤,本文對其中對一些細節(jié)及其Tensorflow代碼實現(xiàn)進行了討論剃袍。
問題
Masked self-attention 什么意思浦马?
Masked的意思就是只能在做self-attention的時候看不到這個詞以后的單詞。因為要用當前的輸出來預測未來的詞订雾,如果能看到未來的詞相當于系統(tǒng)作弊。
為什么使用Multi-Head?
不同的head可以學到不同的特征矛洞,
為什么使用殘差洼哎?
使用殘差以后,公式變成了:
這樣在反向傳播中沼本,對x求偏導數(shù)對時候噩峦,就多了一個常數(shù)。解決了梯度消失的問題抽兆。
Layer normalization?
Positional Encoding有什么作用识补?
在單獨做self-attention的時候,由于attention的計算公式?jīng)]有考慮句子中的單詞順序辫红,所以需要在單詞的向量中加入位置信息的編碼凭涂。本文采用位置編碼和embedding相加的方式進行運算祝辣。
具體的思路就是使用以下公式:
其中pos表示在句子中的位置,i表示在詞向量中的位置导盅,是詞向量的維度较幌。
舉個例子(出自Link):
假設(shè)我們的embedding是,那么我們獲得的結(jié)果就是:
Self-attention計算為什么要除以白翻?
self-attention計算公式如下:
除以的原因是防止在QK計算乘積的時候數(shù)值過大造成上溢出乍炉。我們都知道softmax函數(shù)在x越大的時候越接近與1。不同數(shù)之間計算的結(jié)果差異就會變小滤馍。除以可以幫助解決這個問題岛琼。
Self-attention和Context-attention的區(qū)別?
Attention和Self-attention 的區(qū)別巢株?
- Attention計算的是輸出序列隱藏狀態(tài)和每個輸入隱藏狀態(tài)之間的關(guān)系
- Self-attention計算的是每個輸入和輸入序列之間的關(guān)系
Transormer 并行計算槐瑞, 哪些步驟是可以并行的?
Encoder和Decoder的連接方式
Transormer優(yōu)勢阁苞?
- 傳統(tǒng)的RNN每一步的輸出都依賴前面的輸出困檩,難以并行;并且預處理的時候需要處理成相同長度的句子那槽。雖然LSTM中引入了forget gate的概念悼沿,但是只能記住最近的幾個輸入,對于長句子效果不好骚灸。解決了LSTM和RNN的長距離依賴的問題糟趾。
- CNN可以并行計算,但是不能處理變長的句子問題甚牲。
- Transformer在計算self-attention的時候就是矩陣的相乘义郑,可以進行并行。并且計算了單詞之間的關(guān)系丈钙,更容易學習到句子中的依賴關(guān)系非驮。
Transformer 缺點:
Transformer非常強大,但是還是有很多的缺點雏赦。
作者:l1n3x
鏈接:http://www.reibang.com/p/bccb409a146f
來源:簡書
簡書著作權(quán)歸作者所有劫笙,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。
Reference:
最佳解釋:
-[GIF 動畫展示]
(http://jalammar.github.io/illustrated-transformer/)