炼丹知识点·第5期
作者:炼丹笔记
在实践中,在不同阶段对数据进行不同的正则化操作会有非常大的影响,在正确的位置进行正确的正则化操作可以为模型带来巨大的提升。
同时,在CTR预估任务中,Normalization也有着迷之效果,本文作为“炼丹知识点”系列的第5期,我们来聊一聊到底什么是Normalization。
什么是BatchNormalization?
谷歌在2015年就提出了Batch Normalization(BN),该方法对每个mini-batch都进行normalize,下图是BN的计算方式,会把mini-batch中的数据正规化到均值为0,标准差为1,同时还引入了两个可以学的参数,分别为scale和shift,让模型学习其适合的分布。
那么为什么在做过正规化后,又要scale和shift呢?
当通过正规化后,把尺度缩放到0均值,再scale和shift,不是有可能把数据变回"原样"?因为scale和shift是模型自动学习的,神经网络可以自己琢磨前面的正规化有没有起到优化作用,没有的话就"反"正规化,抵消之前的正规化操作带来的影响。
BatchNormalization是对一批样本进行处理, 对一批样本的每个特征分别进行归一化,举个简单的例子,加入我有一批样本, 每个样本有三个特征,,分别是身高,体重,年龄,那么我做归一化的时候,就是对体重做归一化,对身高做归一化,对年龄做归一化,三者之间不会有交叉影响。
什么是LayerNormalization?
LayerNormalization是对一个样本进行处理,对一个样本的所有特征进行归一化,乍一看很没有道理,因为如果对身高体重和年龄一起求一个均值方差,都不知道这些值有什么含义,但存在一些场景却非常有效果——NLP领域。
在NLP中,N个特征都可能表示不同的词,这个时候我们仍然采用BatchNormalization的话,对第一个词进行操作,很显然意义就不是非常大了,因为任何一个词都可以放在第一个位置,而且很多时候词序对于我们对于句子的影响没那么大,而此时我们对N个词进行Normalization等操作可以很好地反映句子的分布。(LN一般用在第三维度,[batchsize, seq_len,dims]),因为该维度特征的量纲是相同的,所以并没有太多区别。
为什么要用Normalization?
01
解决梯度消失问题
拿sigmoid激活函数距离,从图中,我们很容易知道,数据值越靠近0梯度越大,越远离0梯度越接近0,我们通过BN改变数据分布到0附近,从而解决梯度消失问题。
02
解决了Internal Covariate Shift(ICS)问题
先看看paper里对ICS的定义:
由于训练过程中参数的变化,导致各层数据分布变化较大,神经网络就要学习新的分布,随着层数的加深,学习过程就变的愈加困难,要解决这个问题需要使用较低的学习率,由此又产生收敛速度慢,因此引入BN可以很有效的解决这个问题。
03
加速了模型的收敛
和对原始特征做归一化类似,BN使得每一维数据对结果的影响是相同的,由此就能加速模型的收敛速度。
04
具有正则化效果
BatchNormalization层和正规化/归一化不同,BatchNormalization层是在mini-batch中计算均值方差,因此会带来一些较小的噪声,在神经网络中添加随机噪声可以带来正则化的效果。
在CTR问题中的蜜汁效果
在非常多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是有效的?
作者最后分析了一下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-7
- Correct Normalization Matters: Understanding the Effect of Normalization On Deep Neural Network Models For Click-Through Rate Prediction:https://arxiv.org/pdf/2006.12753.pdf