batch normalization_Normalization在CTR问题中的迷之效果!

Correct Normalization Matters:Understanding the Effect of Normalization On Deep Neural Network Models For CTR Prediction

bc7e4426495998096701f426ee047457.png 0617f9f3fb1bb7c8646cf6376285822a.gif

最近看到一篇文章非常有意思的文章, 是关于正则化的探讨, 作者发现在不同阶段对数据进行不同的正则化操作会有非常大的影响,在正确的位置进行正确的正则化操作可以为模型带来巨大的提升, 本文一共两块内容,第一块介绍LayerNorm以及BatchNorm的联系&区别;第二块则专注于介绍论文的内容,该篇论文是基于实践经验的,个人觉得非常值得一试。

  1. LayerNorm 和 BatchNorm的介绍;
  2. 论文的解读
90cf1b5e3c16f51e3eb2c441d170984d.gif

关于LayerNorm & BatchNorm

b27cb566086b8f1757f46cdf4de29f68.gif 09b003023d1f0943a9cd704050452e69.gif

BatchNorm

BatchNorm是对一批样本进行处理, 对一批样本的每个特征分别进行归一化,举个简单的例子,加入我有一批样本, 每个样本有三个特征,,分别是身高,体重,年龄,那么我做归一化的时候,就是对体重做归一化,对身高做归一化,对年龄做归一化,三者之间不会有交叉影响。

893cff24bae8bbff6115e77c5bd75cbd.png

这个看起来很符合直观的感觉,可以看做是降低每个特征量纲的影响,我们也经常会在CTR等深度模型的MLP部分见到BatchNorm操作。也正因为如此,所以BatchNorm会受到Batch size的影响;当Batchsize小的时候效果往往不是非常稳定.

09b003023d1f0943a9cd704050452e69.gif

LayerNorm

LayerNorm是对一个样本进行处理, 对一个样本的所有特征进行归一化,乍一看很没有道理,因为如果对身高体重和年龄一起求一个均值方差,都不知道这些值有什么含义,但存在一些场景却非常有效果--NLP领域。

d6ad6379b2d1e9e2960e8b7ba93753c4.png

在NLP中,N个特征都可能表示不同的词,这个时候我们仍然采用BatchNorm的话,对第一个词进行操作,很显然意义就不是非常大了,因为任何一个词都可以放在第一个位置,而且很多时候词序对于我们对于句子的影响没那么大,而此时我们对N个词进行Norm等操作可以很好地反映句子的分布。(LN一般用在第三维度,[batchsize, seq_len,dims]),因为该维度特征的量纲是相同的,所以并没有太多区别

90cf1b5e3c16f51e3eb2c441d170984d.gif

论文解读

b27cb566086b8f1757f46cdf4de29f68.gif 09b003023d1f0943a9cd704050452e69.gif

背景

在非常多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数据集上却可以取得更好的效果。

09b003023d1f0943a9cd704050452e69.gif

NormDNN

在不同的地方使用不同形式的Normalization策略会带来什么样的影响呢?此处作者主要探索了两个部分, 特征Embedding部分的Normalization以及MLP部分的Normalization。在大量的实验之后,作者得到了一种提升最大的方案:

  1. 对于数值类的特征,我们使用Variance-Only LayerNorm或者LayerNorm;
  2. 对于类别特征,我们使用BatchNorm;
  3. 对于MLP部分,我们使用LayerNorm;
在特征Embedding层的Normalization

假设我们有个域,我们原始的embedding可以表示为:

,

表示每个field的embedding的维度;

我们在该基础上加入Normalization,得到

,

此处的可以是LayerNorm,BatchNorm等。

在MLP处加入Normalization

此处作者发现在非线性的激活函数之前加入Normalization操作的效果是比先使用激活函数再做Normalization处理要好的。

为什么Normalization是有效的Why

作者最后分析了一下Normalization为什么有效,并绘制了不同的Normalization对于我们均值和方差带来的影响,从图中以及实验中看来,我们发现 Normalization有效的最大一个原因在于方差的影响而不是均值。

185f0640446ceb189fb3a7541be4fade.png

同时我们发现很多神经元的输出大部分在使用Variance-Only LayerNorm之后都会被push输出一个负数的值,然后被RELU过滤掉,这可以减少噪音带来的影响,同样的,我们将Normalization的导数表示为:

从上面的式子中我们也发现我们的Normalization对于是非常敏感的。

09b003023d1f0943a9cd704050452e69.gif

实验

特征Embedding上加入Normalization是否有效?

43ce06b8883f7ce35ee2a80dd0346e7a.png

从上面的实验中,我们发现,在特征Embedding层加入Normalization都是有效的,而且LayerNorm以及相关的变种是效果相对稳定以及最好的;

Normalization对于MLP的影响

c389848bf8aef62bef5bb9051ee8d99c.png

从上面的实验中,我们发现,在MLP层加入Normalization都是有效的,但是具体选用哪种Normalization需要依据不同的任务进行选择;

Normalization对于Feature EMbedding & MLP的影响

a929579fff1fda7f84f37557e935946b.png

从上面的实验中,我们发现,在MLP层以及特征Embedding层都加入Normalization都是比单个加入都有效的,在MLP侧加入VO-LN的Normalization往往能取得更好的效果;

Normalization对于数值以及类别特征的 EMbedding的影响

27c7c3b23e37282d8a911844c4002ae1.png

从上面的实验中,我们发现,对数值的EMbedding使用LayerNorm相关的效果更好,对数值特征使用LayerNorm相关的正则化方法,在MLP处使用VO-LN往往可以取得最好的效果.

NormDNN 与 其他网络比较

73d43c037c1fc918000e376432df1bb6.png

出乎意料,在三个数据集上,我们只需要对不同层做Normalization的处理就可以取得比DeepFM,xDeepFM更好的效果;

NormDNN: Numerical Embedding用LayerNorm相关的处理; Categorical Feature使用BatchNorm相关的处理; 在MLP部分使用VO-LN

泛化到其他Deep相关的模型

5e795b7bc9b6144e2330685024bee1de.png

我们把初始化的方案应用到更加复杂的网络结构上也都取得了更好的效果;也就是说这种Normalization的方案可以扩充到其他的所有最新网络结构上;

09b003023d1f0943a9cd704050452e69.gif

小结

从上面的内容来看,Normalization对于模型的帮助是非常大的; 对Embedding之后的特征进行Normalization(数值Embedding处用LayerNorm相关的Normalization,Categorical部分使用BatchNorm相关的处理,MLP部分使用VO-LN)可以取得非常大的提升;非常值得一试。

43053297d024c0a94132792ba9108048.gif

参考文献

a3b4e141a17d6445b1f3d5fe034ca1ab.gif
  1. batchNormalization与layerNormalization的区别:https://zhuanlan.zhihu.com/p/113233908
  2. NLP中 batch normalization与 layer normalization:https://zhuanlan.zhihu.com/p/74516930
  3. 深度学习中的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
我们和Datawhale一起建立的竞赛群已成立

在社群中,交流、讨论和组队算法赛事。

如果加入了之前的社群,请不需要重复添加!

3319ec13d43798b3e4c73d43e1c76d21.png

d7c6fc339ec30bc4482a7f515e7e6344.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值