炼丹知识点:秘制Normalization

每天给你送来NLP技术干货!


 知识点 

作者:炼丹笔记

    在实践中,在不同阶段对数据进行不同的正则化操作会有非常大的影响,在正确的位置进行正确的正则化操作可以为模型带来巨大的提升。

    同时,在CTR预估任务中,Normalization也有着迷之效果,我们来聊一聊到底什么是Normalization。

什么是BatchNormalization?

d514c23567b1363dae7a016096ad3a15.png

    谷歌在2015年就提出了Batch Normalization(BN),该方法对每个mini-batch都进行normalize,下图是BN的计算方式,会把mini-batch中的数据正规化到均值为0,标准差为1,同时还引入了两个可以学的参数,分别为scale和shift,让模型学习其适合的分布。

f9871fd3a9075c134921dfc173c9d55e.png

    那么为什么在做过正规化后,又要scale和shift呢?

    当通过正规化后,把尺度缩放到0均值,再scale和shift,不是有可能把数据变回"原样"?因为scale和shift是模型自动学习的,神经网络可以自己琢磨前面的正规化有没有起到优化作用,没有的话就"反"正规化,抵消之前的正规化操作带来的影响。

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

f84fdee15eb910373b36aae2617337dd.png

什么是LayerNormalization?

5e223e02aa5b1290424901828f8c39e0.png

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

5bf5088396ad6cf2c3b6f10d5a15cead.png

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

为什么要用Normalization?

321c432cba35d883379036119677a755.png

01

解决梯度消失问题

    拿sigmoid激活函数距离,从图中,我们很容易知道,数据值越靠近0梯度越大,越远离0梯度越接近0,我们通过BN改变数据分布到0附近,从而解决梯度消失问题。

b59ef6b394708f16d95af56dcef60174.png

02

解决了Internal Covariate Shift(ICS)问题

    先看看paper里对ICS的定义:

b9b254c969e10ac77abf0c2ee54e87b6.png

    由于训练过程中参数的变化,导致各层数据分布变化较大,神经网络就要学习新的分布,随着层数的加深,学习过程就变的愈加困难,要解决这个问题需要使用较低的学习率,由此又产生收敛速度慢,因此引入BN可以很有效的解决这个问题。

03

加速了模型的收敛

    和对原始特征做归一化类似,BN使得每一维数据对结果的影响是相同的,由此就能加速模型的收敛速度。

2898f278bf8106b301f96b522e36ef92.png

04

具有正则化效果

    BatchNormalization层和正规化/归一化不同,BatchNormalization层是在mini-batch中计算均值方差,因此会带来一些较小的噪声,在神经网络中添加随机噪声可以带来正则化的效果。

在CTR问题中的蜜汁效果

150cc5ec485b7a37288c9b9d69accb41.png

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

c5cf374ab3f57399a0ecd5a85dd446c6.gif

NormDNN

f3e75ed4bfd644c4e29ea15937f7aa30.png

在不同的地方使用不同形式的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是有效的?

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

24f552fbec6934efb4938d82758f4272.png

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

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

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

575ca3096614c2373eeb54c6d9e0c0f7.png

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

Normalization对于MLP的影响

e034d094a03451a722f0da7df966be7e.png

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

Normalization对于Feature EMbedding & MLP的影响

041683f9a4fef8cf57759e31c22ecf5b.png

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

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

e9038813b8a67bea3079973db80d1220.png

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

NormDNN 与 其他网络比较

404402bac07cfcfd245cf47624b3957c.png

9abce06cdadde17eef28bba852859e94.png

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

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

泛化到其他Deep相关的模型

cc8b99b4809790612545b60f795b1e60.png

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

小结

219b813f5756c5c284bede787e49fa41.png

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

参考资料

ade1973d3d37ea22cf033af0f11bbfd2.png

  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-7

  4. 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


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

70444362767a242e99cdc7f277e63b8b.png

记得备注呦

整理不易,还望给个在看!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值