批量规范化层batch normalization(BN)

1.为什么需要批量归一化

⾸先,数据处理的⽅式通常会对最终结果产⽣巨⼤影响。在数据预处理中,我们的第⼀步是标准化(数据归一化)输⼊特征X,使其平均值为0,⽅差为1。直观地说,这种标准化可以很好地与我们的优化器配合使⽤,因为它可以将参数的量级进⾏统⼀
第⼆,对于典型的多层感知机或卷积神经⽹络。当我们训练时,中间层中的变量(例如,多层感知机中的仿射变换输出)可能具有更⼴的变化范围:不论是沿着从输⼊到输出的层,跨同⼀层中的单元,或是随着时间的推移,模型参数的随着训练更新变幻莫测。批量规范化的发明者⾮正式地假设,这些变量分布中的这种偏移可能会阻碍网络的收敛。直观地说,我们可能会猜想,如果⼀个层的可变值是另⼀层的100倍,这可能需要对学习率进⾏补偿调整。
第三,更深层的⽹络很复杂,容易过拟合。这意味着正则化变得更加重要

在实际训练中,可以

1)使整个神经网络各层的中间输出值更加稳定,

2)批量规范化被认为可以使优化更加平滑,加快优化速度,使用更高的学习率

在某一层之前数据为X1,在该层之后数据为X2,X1与X2的分布有很多种可能,会有很多大数量级的偏移,为了更容易进行优化,需要批量归一化层。

批量归一化是对数据分布的主动进行居中,作用于后一层,也可将其认为一个独立的层,在训练过程中使用一定批量的样本归一化处理后再乘以比例系数加上比例偏移。

批量归一层是在前向计算时起作用,

 µ^B是⼩批量B的样本均值, σ^B是⼩批量B的样本标准差。应⽤标准化后,⽣成的⼩批量的平均
值为0和单位⽅差为1。由于单位⽅差是⼀个主观的选择,因此我们通常包含 拉伸参数(scale) γ和偏移参数(shift) β,使批量归一化后的形状与x相同。请注意, γ和β是需要与其他模型参数学习的参数

为避免标准差为0,一般计算标准差时会加上一个小常量

数据预处理可以视作对所有数据的批量归一化

一些理论证明,批量规范化最适应50 ∼ 100范围中的中等批量⼤小
 

2.批量规范化层的不同表现形式及不同功能

批量规范化层在”训练模式“(通过⼩批量统计数据规范化)和“预测模式”(通过数据集统计规范化)中的功能不同。在训练过程中,我们⽆法得知使⽤整个数据集来估计平均值和⽅差,所以只能根据每个⼩批次的平均值和⽅差不断训练模型。⽽在预测模式下,可以根据整个数据集精确计算批量规范化所需的平均值和⽅差。

全连接层与卷积层中的不同:每一通道分别进行批量归一化

全连接层只有一个通道,是对一定批量样本的特征进行批量归一化;

卷积层是分别对每个通道上一定批量样本进行批量归一化

避免方差为零导致分母为零,在计算方差时一般加上一定值作为噪声

实际使用要点:

  • 批量归一化层的位置:在卷积层或全连接层之后,激活函数之前;
  • batch normalization可以替代卷积层及全连接层中的偏置操作
  • pytorch中对全连接层使用nn.BatchNorm1d(channel_num), 对卷积层使用nn.BatchNorm2d(channel_num),传入通道数

 直观地说,批量规范化被认为可以使优化更加平滑。 然而,我们必须小心区分直觉和对我们观察到的现象的真实解释。 回想一下,我们甚至不知道简单的神经网络(多层感知机和传统的卷积神经网络)为什么如此有效。 即使在暂退法和权重衰减的情况下,它们仍然非常灵活,因此无法通过常规的学习理论泛化保证来解释它们是否能够泛化到看不见的数据

小结:

  • 在模型训练过程中,批量规范化利用小批量的均值和标准差,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定。

  • 批量规范化在全连接层和卷积层的使用略有不同。

  • 批量规范化层和暂退层一样,在训练模式和预测模式下计算不同。

  • 批量规范化有许多有益的副作用,主要是正则化。另一方面,”减少内部协变量偏移“的原始动机似乎不是一个有效的解释

对比使用batchnorm和不使用的lenet模型,加入BN层后初始损失较小,优化收敛速度较快,在10个轮次后获得的精度更高

 另外还获知BN层具有以下特点,分别对其进行实验:

(1) 可以使用更高的学习率。如果每层的scale不一致,实际上每层需要的学习率是不一样的,同一层不同维度的scale往往也需要不同大小的学习率,通常需要使用最小的那个学习率才能保证损失函数有效下降,Batch Normalization将每层、每维的scale保持一致,那么我们就可以直接使用较高的学习率进行优化。

当把学习率调至10时,没有BN层的模型损失无法下降;而使用BN层后,可以正常优化

 

  (2) 移除或使用较低的dropout。 dropout是常用的防止overfitting的方法,而导致overfit的位置往往在数据边界处,如果初始化权重就已经落在数据内部,overfit现象就可以得到一定的缓解。论文中最后的模型分别使用10%、5%和0%的dropout训练模型,与之前的40%-50%相比,可以大大提高训练速度。

  (3) 降低L2权重衰减系数。 还是一样的问题,边界处的局部最优往往有几维的权重(斜率)较大,使用L2衰减可以缓解这一问题,现在用了Batch Normalization,就可以把这个值降低了,论文中降低为原来的5倍。

  (4) 取消Local Response Normalization层。 由于使用了一种Normalization,再使用LRN就显得没那么必要了。而且LRN实际上也没那么work。

  (5) 减少图像扭曲的使用。 由于现在训练epoch数降低,所以要对输入数据少做一些扭曲,让神经网络多看看真实的数据


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值