batch normolization

简单总结

  • 实现

    • 在激活层进行均值0方差1的初始化
  • 作用

    • 加速收敛
    • 防止梯度弥散
    • 改变分布,改变漂移现象
    • 降低过拟合

前言

深度网络训练问题:
    从输出到输入,反向传播过程中,使用误差估计逐层更新参数时,这种误差估计假设之前的层到本层之间的权重都是固定的。
    因为所有的层在跟新过程中权重都会改变,所以这个跟新过程永远在追求一个动态的目标。

Training Deep Neural Networks is complicated by the fact that the distribution of each layer’s inputs changes during training, as the parameters of the previous layers change. and makes it notoriously hard to train models with saturating nonlinearities(饱和非线性模型).

层网络输出与输入分布不同

    对于神经网络的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能“指示”的样本标记(label)仍然是不变的,


Batch Normalization

1. What is BN?

    在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1
    “scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入

    change in the distribution of inputs during training as “internal covariate shift” (内部协变量转换)
    covariate shift就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同

边缘概率: 这类仅与单个随机变量有关的概率称为边缘概率
条件概率: 表示在条件Y=b成立的情况下,X=a的概率,记作P(X=a|Y=b)

BN 作用解释
  • 加速收敛
    使得后一层网络不必不断去适应底层网络中输入的变化,从而实现了网络中层与层之间的解耦,更加有利于优化的过程,提高整个神经网络的学习速度。
  • 控制过拟合
    归一化后,网络不再对那些跨度比较大的特征强依赖,所以控制过拟合
  • 降低网络对初始化权重不敏感
    在神经网络中,我们经常会谨慎地采用一些权重初始化方法(例如Xavier)或者合适的学习率来保证网络稳定训练。当学习率设置太高时,会使得参数更新步伐过大,容易出现震荡和不收敛
  • 允许使用较大的学习率
    Using batch normalization makes the network more stable during training.
  • 减少梯度消失的概率
    由于网络的深度与复杂性,很容易使得底层网络变化累积到上层网络中,导致模型的训练很容易进入到激活函数的梯度饱和区;通过normalize操作可以让激活函数的输入数据落在梯度非饱和区,缓解梯度消失的问题
    关于梯度弥散,大家都知道一个简单的栗子: 0. 9 30 = 0.04 0.9^{30}=0.04 0.930=0.04。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大
  • 增强泛化性能
    由于我们使用mini-batch的均值与方差作为对整体训练样本均值与方差的估计,尽管每一个batch中的数据都是从总体样本中抽样得到,但不同mini-batch的均值与方差会有所不同,这就为网络的学习过程中增加了随机噪音,与Dropout通过关闭神经元给网络训练带来噪音类似,在一定程度上对模型起到了正则化(泛化)的效果
Why does BatchNorm work?

    it reparametrized the underlying optimization problem to make its landscape significantly more smooth.

    减少了 Internal Covariate Shift(内部神经元的数据分布差异), 使得每一层的输出都可以规范化到一个标准高斯分布上.

    防止数据在进入激活函数activation时其分部大多在未激活区,如ReLU的负数区域,sigmoid的趋近于1的区域,这些区域在计算梯度时都为0,无法达到后向传播的功能


局限

局限1:如果Batch Size太小,则BN效果明显下降。
当BatchSize小于8的时候开始对分类效果有明显负面影响。之所以会这样,是因为在小的BatchSize意味着数据样本少,因而得不到有效统计量,也就是说噪音太大。

局限2:对于有些像素级图片生成任务来说,BN效果不佳;
对于有些输入输出都是图片的像素级别图片生成任务,比如图片风格转换等应用场景,使用BN会带来负面效果,这很可能是因为在Mini-Batch内多张无关的图片之间计算统计量,弱化了单张图片本身特有的一些细节信息。

局限3:训练时和推理时统计量不一致
采用Mini-Batch内实例来计算统计量,这在训练时没有问题,但是在模型训练好之后,在线推理的时候会有麻烦。因为在线推理或预测的时候,是单实例的,不存在Mini-Batch,所以就无法获得BN计算所需的均值和方差,一般解决方法是采用训练时刻记录的各个Mini-Batch的统计量的数学期望,以此来推算全局的均值和方差

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值