Correct Normalization Matters:Understanding the Effect of Normalization On Deep Neural Network Models For CTR Prediction
最近看到一篇文章非常有意思的文章, 是关于正则化的探讨, 作者发现在不同阶段对数据进行不同的正则化操作会有非常大的影响,在正确的位置进行正确的正则化操作可以为模型带来巨大的提升, 本文一共两块内容,第一块介绍LayerNorm以及BatchNorm的联系&区别;第二块则专注于介绍论文的内容,该篇论文是基于实践经验的,个人觉得非常值得一试。
- 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
假设我们一个Batch有H个样本, ,那么我们的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。在大量的实验之后,作者得到了一种提升最大的方案:
- 对于数值类的特征,我们使用Variance-Only LayerNorm或者LayerNorm;
- 对于类别特征,我们使用BatchNorm;
- 对于MLP部分,我们使用LayerNorm;
在特征Embedding层的Normalization
假设我们有个域,我们原始的embedding可以表示为:
,
表示每个field的embedding的维度;
我们在该基础上加入Normalization,得到
,
此处的可以是LayerNorm,BatchNorm等。
在MLP处加入Normalization
此处作者发现在非线性的激活函数之前加入Normalization操作的效果是比先使用激活函数再做Normalization处理要好的。
为什么Normalization是有效的Why
作者最后分析了一下Normalization为什么有效,并绘制了不同的Normalization对于我们均值和方差带来的影响,从图中以及实验中看来,我们发现 Normalization有效的最大一个原因在于方差的影响而不是均值。
同时我们发现很多神经元的输出大部分在使用Variance-Only LayerNorm之后都会被push输出一个负数的值,然后被RELU过滤掉,这可以减少噪音带来的影响,同样的,我们将Normalization的导数表示为:
从上面的式子中我们也发现我们的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)可以取得非常大的提升;非常值得一试。
参考文献
- batchNormalization与layerNormalization的区别:https://zhuanlan.zhihu.com/p/113233908
- NLP中 batch normalization与 layer normalization:https://zhuanlan.zhihu.com/p/74516930
- 深度学习中的Normalization模型:https://www.jiqizhixin.com/articles/2018-08-29-7Correct Normalization Matters: Understanding the Effect of Normalization On Deep Neural Network Models For Click-Through Rate Prediction:https://arxiv.org/pdf/2006.12753.pdf
在社群中,交流、讨论和组队算法赛事。
如果加入了之前的社群,请不需要重复添加!