Normalization在CTR问题中的迷之效果
最近看到一篇文章非常有意思的文章, 是關于正則化的探討, 作者發現在不同階段對數據進行不同的正則化操作會有非常大的影響,在正確的位置進行正確的正則化操作可以為模型帶來巨大的提升
一元@煉丹筆記本文一共兩塊內容,
第一塊介紹LayerNorm以及BatchNorm的聯系&區別;
第二塊則專注于介紹論文的內容,該篇論文是基于實踐經驗的,
個人覺得非常值得一試。
關于LayerNorm & BatchNorm
BatchNorm
BatchNorm是對一批樣本進行處理, 對一批樣本的每個特征分別進行歸一化,舉個簡單的例子,加入我有一批樣本, 每個樣本有三個特征,,分別是身高,體重,年齡,那么我做歸一化的時候,就是對體重做歸一化,對身高做歸一化,對年齡做歸一化,三者之間不會有交叉影響。
這個看起來很符合直觀的感覺,可以看做是降低每個特征量綱的影響,我們也經常會在CTR等深度模型的MLP部分見到BatchNorm操作。
也正因為如此,
所以BatchNorm會受到Batch size的影響;
當Batchsize小的時候效果往往不是非常穩定.
LayerNorm
LayerNorm是對一個樣本進行處理, 對一個樣本的所有特征進行歸一化,乍一看很沒有道理,因為如果對身高體重和年齡一起求一個均值方差,都不知道這些值有什么含義,但存在一些場景卻非常有效果--NLP領域。
在NLP中,N個特征都可能表示不同的詞,這個時候我們仍然采用BatchNorm的話,對第一個詞進行操作,很顯然意義就不是非常大了,因為任何一個詞都可以放在第一個位置,而且很多時候詞序對于我們對于句子的影響沒那么大,而此時我們對N個詞進行Norm等操作可以很好地反映句子的分布。(LN一般用在第三維度,[batchsize, seq_len,dims]),因為該維度特征的量綱是相同的,所以并沒有太多區別。
背景
在非常多CTR相關的論文中,很多工作主要都Focus在模型結構方面的優化或者引入新的信息等,而這么做往往都忽略了模型中的一些小的模塊的作用,
例如Normalization,在CTR相關的結構中我們發現,大家經常會把BatchNorm放在最后的MLP層, 但是這么做夠嗎?
Normalization是否發揮了最大的作用?
是否是最優的方案?
本文通過大量的系統的實驗,給出了結論:
沒有,還有更好的方案,
本文通過在CTR模型的不同地方加入不同的正則化策略(BatchNorm,LayerNorm等),最終取得了非常好的效果。那究竟是怎么做的呢?
我們繼續往下看,下面的框架很簡單,顯示作者提出模型的核心組成部分VO-LayerNorm,然后是基于此提出的新的NormDNN,最后是實驗驗證部分。
Variance-Only LayerNorm
這是一個經驗得出來的操作,作者在大量的實驗中發現,原始的LayerNorm有些復雜化了,在對其進行不斷的精簡實驗后,作者發現在CTR數據集上的效果并沒有帶來下降,反而更好了。下面我們看看這一步步精簡的操作:
復雜版本LayerNorm
LayerNorm在NLP任務中取得了非常好的效果,但是實踐中,Xu等人發現這個LayerNorm的bias和gain增加了過擬合的風險,并且經過試驗他們發現簡化LayerNorm也可以取的非常不錯的效果。
簡化版的LayerNorm
我們把bias以及gain同時刪除,得到精簡版的LayerNorm,
在大量的實驗中,我們發現簡化版本的LayerNorm并沒有什么性能損失,相反的還可以取的更好的效果。
然后作者在CTR相關的數據集上又進行了大量的實驗,發現對模型效果影響最大的不是re-centering等操作,反而方差帶來的影響更大,于是作者提出了新的LayerNorm。
Variance-Only LayerNorm
此處,作者直接除以了方差,雖然更加精簡了,但是實驗效果卻顯示這么做在CTR數據集上卻可以取得更好的效果。
NormDNN
在不同的地方使用不同形式的Normalization策略會帶來什么樣的影響呢?此處作者主要探索了兩個部分, 特征Embedding部分的Normalization以及MLP部分的Normalization。在大量的實驗之后,作者得到了一種提升最大的方案:
在特征Embedding層的Normalization
在MLP處加入Normalization
此處作者發現在非線性的激活函數之前加入Normalization操作的效果是比先使用激活函數再做Normalization處理要好的。
為什么Normalization是有效的Why
作者最后分析了一下Normalization為什么有效,并繪制了不同的Normalization對于我們均值和方差帶來的影響,從圖中以及實驗中看來,我們發現 Normalization有效的最大一個原因在于方差的影響而不是均值。
同時我們發現很多神經元的輸出大部分在使用Variance-Only LayerNorm之后都會被push輸出一個負數的值,然后被RELU過濾掉,這可以減少噪音帶來的影響,同樣的,我們將Normalization的導數表示為:
實驗
特征Embedding上加入Normalization是否有效?
從上面的實驗中,我們發現,在特征Embedding層加入Normalization都是有效的,而且LayerNorm以及相關的變種是效果相對穩定以及最好的;
Normalization對于MLP的影響
從上面的實驗中,我們發現,在MLP層加入Normalization都是有效的,但是具體選用哪種Normalization需要依據不同的任務進行選擇;
Normalization對于Feature EMbedding & MLP的影響
從上面的實驗中,我們發現,在MLP層以及特征Embedding層都加入Normalization都是比單個加入都有效的,在MLP側加入VO-LN的Normalization往往能取得更好的效果;
Normalization對于數值以及類別特征的 EMbedding的影響
從上面的實驗中,我們發現,對數值的EMbedding使用LayerNorm相關的效果更好,對數值特征使用LayerNorm相關的正則化方法,在MLP處使用VO-LN往往可以取得最好的效果.
NormDNN 與 其他網絡比較
出乎意料,在三個數據集上,我們只需要對不同層做Normalization的處理就可以取得比DeepFM,xDeepFM更好的效果;
NormDNN: Numerical Embedding用LayerNorm相關的處理; Categorical Feature使用BatchNorm相關的處理; 在MLP部分使用VO-LN泛化到其他Deep相關的模型
我們把初始化的方案應用到更加復雜的網絡結構上也都取得了更好的效果;也就是說這種Normalization的方案可以擴充到其他的所有最新網絡結構上
小結
從上面的內容來看,Normalization對于模型的幫助是非常大的; 對Embedding之后的特征進行Normalization(數值Embedding處用LayerNorm相關的Normalization,Categorical部分使用BatchNorm相關的處理,MLP部分使用VO-LN)可以取得非常大的提升;非常值得一試。
一本有仙氣的筆記,記錄了AI的不凡總結
以上是生活随笔為你收集整理的Normalization在CTR问题中的迷之效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标签修正:CVR预估时间延迟问题
- 下一篇: 负样本修正:CVR预估时间延迟问题