為什么要layer Norm 糠亩?
隨著網絡層數(shù)增加栏笆,特征分布會變化,為了保持特征分布的穩(wěn)定性烟很,加速收斂
layer Norm 和 Batch Norm 的區(qū)別?
都是 均值0 方差1 蜡镶,layer是以樣本維度計算(比如:一句話雾袱,一個用戶),batch是以batch*單列特征為單位進行歸一化
e.g. 推薦系統(tǒng)中: 【樣本】年齡|性別|商品屬性
NLP中:【樣本】token1|token2|...
Batch 顧名思義是對一個batch進行操作官还。假設我們有 10行 3列 的數(shù)據(jù)芹橡,即我們的batchsize = 10,每一行數(shù)據(jù)有三個特征望伦,假設這三個特征是【身高林说、體重煎殷、年齡】。那么BN是針對每一列(特征)進行縮放腿箩,例如算出【身高】的均值與方差豪直,再對身高這一列的10個數(shù)據(jù)進行縮放。體重和年齡同理珠移。這是一種“列縮放”弓乙。
而layer方向相反,它針對的是每一行進行縮放钧惧。即只看一筆數(shù)據(jù)暇韧,算出這筆所有特征的均值與方差再縮放。這是一種“行縮放”浓瞪。
細心的你已經看出來懈玻,layer normalization 對所有的特征進行縮放,這顯得很沒道理乾颁。我們算出一行這【身高涂乌、體重、年齡】三個特征的均值方差并對其進行縮放英岭,事實上會因為特征的量綱不同而產生很大的影響骂倘。但是BN則沒有這個影響,因為BN是對一列進行縮放巴席,一列的量綱單位都是相同的。
那么我們?yōu)槭裁催€要使用LN呢诅需?因為NLP領域中漾唉,LN更為合適。
如果我們將一批文本組成一個batch堰塌,那么BN的操作方向是赵刑,對每句話的第一個詞進行操作。但語言文本的復雜性是很高的场刑,任何一個詞都有可能放在初始位置般此,且詞序可能并不影響我們對句子的理解。而BN是針對每個位置進行縮放牵现,這不符合NLP的規(guī)律铐懊。
https://zhuanlan.zhihu.com/p/74516930
image.png
為什么加殘差網絡?
1)解決深度加深時瞎疼,梯度消失的問題科乎。盡管上述LN可以緩解。
2)還存在網絡退化問題:
在神經網絡可以收斂的前提下贼急,隨著網絡深度增加茅茂,網絡的表現(xiàn)先是逐漸增加至飽和捏萍,然后迅速下降
decoder的第一個attn模塊為什么要 masked_fill(mask == 0, -1e9) 呢?
每個時刻只能用前一時刻的數(shù)據(jù)空闲,防止未來數(shù)據(jù)作弊
attn里為什么要有softmax操作令杈?
權重歸一化
多頭相比單頭的好處?
從不同方向做attn碴倾,可以表達更多的信息逗噩,類似隨機森林思想
- 方便會回憶 http://www.reibang.com/p/b40deff0ca63
- 方便回憶 代碼實戰(zhàn):基于Transformer模型的機器翻譯 11:30encoder 19:54 decoder
代碼:http://nlp.seas.harvard.edu/2018/04/03/attention.html
seq2seq + attn 局限性:
- LSTM,必然存在梯度的問題
- LSTM影斑、序列形式的數(shù)據(jù)给赞,線性計算
transformer核心:
- 如何解決長依賴的
- self-attn、encoder 矫户、 decoder 區(qū)別片迅?
- 如何encode 單詞順序,因為不是序列模型皆辽?
ENCODER 結構
輸入單詞:Thinking柑蛇、 Machine
輸出:當前語境下的向量表示, Z1驱闷、 Z2
Q K V
Q和K目的耻台,用于計算當前詞在當前上下文中的影響
divide by 根號dk 作用:縮小score的絕對值,防止softmax時空另,exp的計算會變極端盆耽,成為1或者0
整體框架的好處:矩陣化計算可并行;不依賴梯度計算
多頭的目的:希望不同組的QKV扼菠,能捕獲不同維度的關系摄杂;類似 決策樹組成隨機森林
得到的權重score矩陣,維度為 單詞數(shù)×(單詞數(shù)×多頭數(shù))