關于Transformer中常遇到的問題解答
來源:知乎
作者:紅豆君??中國科學院大學?計算機碩士
文章經(jīng)過作者同意轉載
1. Transformer如何解決梯度消失問題的?
殘差
? ?2. 為何Transformer中使用LN而不用BN?
BatchNorm是對一個batch-size樣本內的每個特征做歸一化,LayerNorm是對每個樣本的所有特征做歸一化。
形象點來說,假設有一個二維矩陣。行為batch-size,列為樣本特征。那么BN就是豎著歸一化,LN就是橫著歸一化。
它們的出發(fā)點都是讓該層參數(shù)穩(wěn)定下來,避免梯度消失或者梯度爆炸,方便后續(xù)的學習。但是也有側重點。
一般來說,如果你的特征依賴于不同樣本間的統(tǒng)計參數(shù),那BN更有效。因為它抹殺了不同特征之間的大小關系,但是保留了不同樣本間的大小關系。(CV領域)
而在NLP領域,LN就更加合適。因為它抹殺了不同樣本間的大小關系,但是保留了一個樣本內不同特征之間的大小關系。對于NLP或者序列任務來說,一條樣本的不同特征,其實就是時序上字符取值的變化,樣本內的特征關系是非常緊密的。
3. LN的作用是什么?
允許使用更大的學習率,加速訓練。有一定的抗過擬合作用,使訓練過程更加平穩(wěn)
4. 多頭自注意力層中的“多頭”如何理解,有什么作用?
有點類似于CNN的多個卷積核。通過三個線性層的映射,不同頭中的Q、K、V是不一樣的,而這三個線性層的權重是先初始化后續(xù)通過學習得到的。不同的權重可以捕捉到序列中不同的相關性。
5. Transformer是自回歸模型還是自編碼模型?
自回歸模型。
所謂自回歸,即使用當前自己預測的字符再去預測接下來的信息。Transformer在預測階段(機器翻譯任務)會先預測第一個字,然后在第一個預測的字的基礎上接下來再去預測后面的字,是典型的自回歸模型。Bert中的Mask任務是典型的自編碼模型,即根據(jù)上下文字符來預測當前信息。
6. 原論文中Q、K矩陣相乘為什么最后要除以√dk?
當?√dk?特別小的時候,其實除不除無所謂。無論編碼器還是解碼器Q、K矩陣其實本質是一個相同的矩陣。Q、K相乘其實相等于Q乘以Q的轉置,這樣造成結果會很大或者很小。小了還好說,大的話會使得后續(xù)做softmax繼續(xù)被放大造成梯度消失,不利于梯度反向傳播。
7. 原論中編碼器與解碼器的Embedding層的權重為什么要乘以√dmodel??
為了讓embedding層的權重值不至于過小,乘以?√dmodel??后與位置編碼的值差不多,可以保護原有向量空間不被破壞。
8. Transformer在訓練與驗證的時候有什么不同
Transformer在訓練的時候是并行的,在驗證的時候是串行的。這個問題與Transformer是否是自回歸模型考察的是同一個知識點。
9. Transformer模型的計算復雜度是多少?
n2d
n是序列長度,d是embedding的長度。Transformer中最大的計算量就是多頭自注意力層,這里的計算量主要就是QK相乘再乘上V,即兩次矩陣相乘。
QK相乘是矩陣【n d】乘以【d n】,這個復雜度就是n2d。
10. Transformer中三個多頭自注意力層分別有什么意義與作用?
Transformer中有三個多頭自注意力層,編碼器中有一個,解碼器中有兩個。
編碼器中的多頭自注意力層的作用是將原始文本序列信息做整合,轉換后的文本序列中每個字符都與整個文本序列的信息相關(這也是Transformer中最創(chuàng)新的思想,盡管根據(jù)最新的綜述研究表明,Transformer的效果非常好其實多頭自注意力層并不占據(jù)絕大貢獻)。示意圖如下:

解碼器的第一個多頭自注意力層比較特殊,原論文給其起名叫Masked Multi-Head-Attention。其一方面也有上圖介紹的作用,即對輸入文本做整合(對與翻譯任務來說,編碼器的輸入是翻譯前的文本,解碼器的輸入是翻譯后的文本)。另一個任務是做掩碼,防止信息泄露。拓展解釋一下就是在做信息整合的時候,第一個字符其實不應該看到后面的字符,第二個字符也只能看到第一個、第二個字符的信息,以此類推。
解碼器的第二個多頭自注意力層與編碼器的第一個多頭自注意力層功能是完全一樣的。不過輸入需要額外強調下,我們都知道多頭自注意力層是通過計算QKV三個矩陣最后完成信息整合的。在這里,Q是解碼器整合后的信息,KV兩個矩陣是編碼器整合后的信息,是兩個完全相同的矩陣。QKV矩陣相乘后,翻譯前與翻譯后的文本也做了充分的交互整合。至此最終得到的向量矩陣用來做后續(xù)下游工作。
11. Transformer中的mask機制有什么作用
有兩個作用。
對不等長的序列做padding補齊
掩碼防止信息泄露
12. mask機制分別用在了哪里?
結合第十一問。
mask機制的作用1在三個多頭自注意力層中都用了,作用2只用在了解碼器的第一個多頭自注意力層。
to be contiune
看大家點贊量啦!
推薦閱讀
如何看待swin transformer成為ICCV2021的 best paper?
熬了一晚上,我從零實現(xiàn)了Transformer模型,把代碼講給你聽


