LayerNorm#
對 sample 裡面的所有 dim 進行 norm, 讓每個 embedding 的分佈接近:
Var[x]+ϵx−E[x]∗γ+β其中 ϵ 為固定常數(1e-5), γ 以及 β 兩個可學習參數避免 overfitting
Pre-norm, Post-norm#
transformer在 FFN 之後的 Add&Norm Layer, 若先進行 add 才做 norm 則為 post-norm, 反之為 pre-norm
早期的 Transformer 多使用 post-norm, 近代的研究則比較多使用 pre-norm, pre-norm 的優勢在梯度傳播時較為穩定(因為在做完 norm 之後才做殘差連接), post-norm 則是模型的效果會更好
且 pre-norm 的模型在 fine-tune 時表現相較 post-norm 會更好
RMSNorm#
給定一個輸入向量 a=(a1,a2,…,an), 先算RMS:
RMS(a)=n1∑i=1nai2
然後除以這個 RMS, 再乘上 gi:
aˉi=RMS(a)ai⋅gi
pRMSNorm(partial RMSNorm)#
只用前面 p% 的維度來估計 RMS (e.g. p=6.25%), 進一步省計算, 效果仍相近
實作上還會在分母加一個很小的 ϵ 防止除零:
aˉi=n1∑kak2+ϵai⋅gi
與 LayerNorm 的比較#
RMSNorm(aˉi=ai/r, r=n1∑kak2)的 Jacobian 是:
∂aj∂aˉi=r1(δij−n1aˉiaˉj)
LayerNorm (多減一個 μ) 的 Jacobian 是:
∂aj∂aˉi=σ1(δij−n1−n1aˉiaˉj)
只差一個 −n1 項 (∂μ/∂aj=1/n)
把那個 −n1 項代進反向傳播 ∂aj∂L=∑i∂aj∂aˉi∂aˉi∂L,它對每個 j 的貢獻是:
−nσ1∑i∂aˉi∂L
但其實這項是在做 re-centering, 沒辦法控制梯度的量級, 只能在常數範圍上縮小, RMSNorm 只留 re-scaling, 避免計算均值的額外成本