【深度学习】batch normalization和layer normalization区别

举报
山顶夕景 发表于 2022/01/24 00:26:57 2022/01/24
【摘要】 @[toc] 零、基础知识铺垫“独立同分布”的数据能让人很快地发觉数据之间的关系,因为不会出现像过拟合等问题。一般在模型训练之前,需要对数据做归一化。为了解决ICS问题,即internal covarivate shift(内部协变量漂移)问题,即数据分布会发生变化,对下一层网络的学习带来困难。在深度神经网络中,层与层相互之间是存在直接或间接影响的,某一层的微小变动就可能导致其他层的“剧烈震...

@[toc]

零、基础知识铺垫

“独立同分布”的数据能让人很快地发觉数据之间的关系,因为不会出现像过拟合等问题。

一般在模型训练之前,需要对数据做归一化。为了解决ICS问题,即internal covarivate shift(内部协变量漂移)问题,即数据分布会发生变化,对下一层网络的学习带来困难。

在深度神经网络中,层与层相互之间是存在直接或间接影响的,某一层的微小变动就可能导致其他层的“剧烈震荡”,导致相应网络层落入饱和区【sigma函数中当x<-6或x>6时,梯度值接近0,BP过程中低层神经网络梯度消失】,导致模型的训练困难,这种现象称为“Internal Covariate Shift”。为了减小这种层与层之间的影响,学者们考虑从直观的数据分布上进行处理,将批量数据标准化到~N(0,1)分布,使得每层的输入数据分布范围可控。

一、batch normalization

batch normalization是对一批样本的同一纬度特征做归一化。如下图我们想根据这个batch中的三种特征(身高、体重、年龄)数据进行预测性别,首先我们进行归一化处理,如果是Batch normalization操作则是对每一列特征进行归一化,如下图求一列身高的平均值。

BN特点:强行将数据转为均值为0,方差为1的正态分布,使得数据分布一致,并且避免梯度消失。而梯度变大意味着学习收敛速度快,能够提高训练速度

batch_size为m,网络在向前传播时,网络 中每个神经元都有m个输出,BN就是将每个神经元的m个输出进行归一化处理,看到BN原论文中的伪代码:

即有两个步骤:

  • 标准化:求得均值为0,方差为1的标准正态分布 x ˉ i \bar{x}_{i}
  • 尺度变换和偏移:获得新的分布 y i y_i 。均值为 β \beta ,方差为 γ \gamma (其中偏移 β \beta 和尺度变换 γ \gamma 为需要学习的参数)。该过程有利于数据分布和权重的互相协调。

特别的,令 γ \gamma = 1, β \beta = 0 等价于只有标准化过程;令 γ \gamma = σ \sigma β \beta = μ \mu 等价于没有添加BN层

二、layer normalization

而layer normalization是对单个样本的所有维度特征做归一化。如下表中,如果是Layer normalization则是对每一行(该条数据)的所有特征数据求均值。

三、应用场景

3.1 两者的区别

  • 从操作上看:BN是对同一个batch内的所有数据的同一个特征数据进行操作;而LN是对同一个样本进行操作。
  • 从特征维度上看:BN中,特征维度数=均值or方差的个数;LN中,一个batch中有batch_size个均值和方差。

如在NLP中上图的C、N、H,W含义:
N:N句话,即batchsize
C:一句话的长度,即seqlen
H,W:词向量维度embedding dim

3.2 BN和LN的关系

  • BN 和 LN 都可以比较好的抑制梯度消失和梯度爆炸的情况。BN不适合RNN、transformer等序列网络,不适合文本长度不定和batchsize较小的情况,适合于CV中的CNN等网络;
  • 而LN适合用于NLP中的RNN、transformer等网络,因为sequence的长度可能是不一致的。
  • 栗子:如果把一批文本组成一个batch,BN就是对每句话的第一个词进行操作,BN针对每个位置进行缩放就不符合NLP的规律了。

3.3 小结

(1)经过BN的归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程。
(2)归一化技术就是让每一层的分布稳定下来,让后面的层能在前面层的基础上“安心学习”。BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来(但是BN没有解决ISC问题)。LayerNorm则是通过对Hidden size这个维度归一。

Reference

(1)https://blog.csdn.net/shanglianlm/article/details/85075706
(2)https://blog.paperspace.com/busting-the-myths-about-batch-normalization/
(3)https://arxiv.org/abs/1803.08494
(4)实验过程1:https://zhuanlan.zhihu.com/p/452827651
(5)实验过程2:https://zhuanlan.zhihu.com/p/440954334
(6)PyTorch学习之归一化层(BatchNorm、LayerNorm、InstanceNorm、GroupNorm)
(7)BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结
(8)Batch Normalization 论文阅读

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。