BatchNorm学习笔记

一、背景

1.独立同分布(IID)假设

  机器学习领域有个很重要的假设,IID独立同分布假设,就是假设训练集和测试集满足独立同分布,这是通过训练集获得的模型能够在测试集获得好的效果的一个基本保障。

2.白化处理

  所谓白化处理是通过变换将数据变成均值为0,方差为1的数据。在训练前对数据白化处理,性能一般会有提升。

3.Internal Covariate Shift(ICS)问题

  • 每个batch数据经过隐藏层的激活函数后,激活前后的数据可能不再同分布,随着网络层数的加深,这种差异会不断叠加,会越来越大。
  • 每一层参数的更新,会导致深层输入数据发生变化,深层数据发生变化,会导致深层参数变化,正所谓牵一发而动全身。

4.ICS导致的问题

  • 深层参数要不断适应新的数据分布,降低学习速度
  • 数据可能会变大或变小,从而进入饱和区(如:sigmoid),梯度消失,从而模型无法收敛。
  • 每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。

二、BatchNorm(BN)

  BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
在这里插入图片描述

  • 第一步是计算出当前batch的每个channel的均值;
  • 第二步是计算出当前batch的每个channel的方差;
  • 第三步是将数据归一化成正态分布,公式中的eplison是一个很小的正数,为了防止分母为0;

  通过前三步的操作,保证了每一层输入数据是同分布的,落入饱和区的数据也被拉回了线性区(如:sigmoid),但是模型的非线性是模型表达能力强的一个重要原因,因此,将数据拉回线性区会降低模型的表达能力。基于此就有了第四步操作。

  • 第四步操作是将正太分布进行一个偏移(gamma和bata),从某种意义上来说,就是在线性和非线性之间做一个权衡,gamma和bata是神经网络在训练时训练所得。

三、BN在训练和测试的区别

  在训练时,可以计算出batch的均值和方差,迭代训练过程中,均值和方差一直在发生变化。但是在测试时,均值和方差是固定的,它们在训练过程中就被确定下来。因为测试时一般是单个数据测试,不是一个batch测试,没有batch的均值和方差可言。

四、BN层在网络中的一般位置

  一般在Conv层或FC层之后,非线性变换激活层之前插入BN层。

五、BN的优点

  • BN将隐藏层输入数据的分布从饱和区拉到了非饱和区,减小了梯度消失,提升了训练速度,收敛过程大大加快。
  • Batchnorm本身上也是一种正则的方式(主要缓解了梯度消失),可以代替其他正则方式如dropout等。BN正则效果的理解:BN是通过对系统参数搜索空间进行约束来增加系统鲁棒性,压缩搜索空间,改善系统的结构合理性,这会带来一系列的性能改善。
  • 调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。
  • 做归一化时,每次都会减去均值,即去除直流分量,所以网络中卷积等的偏置可以去掉了。

六、BN的缺点

  BN依赖于batch的大小,当batch值很小时,计算的均值和方差不稳定。

参考:

4.BN推导
详解深度学习中的Normalization,BN/LN/WN
BatchNorm的原理及代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值