深度学习——BatchNormalization layer

神经网络在训练过程中往往会遇到一些问题:
问题1: 随着网络训练,浅层的权重发生变化,导致深层的输入变化很大。因此每层必须根据每批输入的不同分布重新调整其权重。这减缓了模型训练。如果我们可以使层的输入分布更相似,那么网络可以专注于学习类别之间的差异。不同批次分布的另一个影响是梯度弥散。梯度弥散是一个大问题,特别是对于S形激活函数(sigmoid)。如果g(x)表示sigmoid激活函数,随着 |x| 增加,g’(x)趋于0
在这里插入图片描述
问题2:当输入分布变化时,神经元输出也会变化。这导致神经元输出偶尔波动到S形函数的可饱和区域。在那里,神经元既不能更新自己的权重,也不能将梯度传递回先前的层。那么我们该如何保证神经元输出到不饱和区域?如果我们可以将神经元输出限制在零附近的区域,我们可以确保每个层在反向传播期间都会返回一个有效的梯度。这将减少训练时间和提高准确率。

在这里插入图片描述
使用批量规范(BN)作为解决方案批量标准化减轻了不同层输入对训练的影响。通过归一化神经元的输出,激活函数将仅接收接近零的输入。这确保了梯度的有效回传,解决了第二个问题
在这里插入图片描述

批量归一化将层输出转换为单位高斯分布。当这些输出通过激活功能馈送时,层激活也将变得更加正常分布。
由于上一层的输出是下一层的输入,因此层输入的变化在不同批次输间的变化将显着减少。通过减少层的输入的变化分布,我们解决了第一个问题。
数学解释通过批量归一化,我们为每个激活函数寻找均值为0,方差为1的分布作为输入。在训练期间,我们将激活输入x减去批次均值μ以实现零中心分布。
在这里插入图片描述
接下来,我们取x并将其除以批处理方差和一个小数字,以防止除以零σ+ε。这可确保所有激活输入分布方差为1。
在这里插入图片描述

最后,我们将得到的x进行线性变换。这样尽管在反向传播期间网络发生了变化,但仍能确保保持这种标准化效果。
在这里插入图片描述

在测试模型时,我们不使用当前批次均值或方差,因为这会破坏模型。相反,我们计算训练群体的移动均值和方差估计值。这些估计值是训练期间计算的所有批次平均值和方差的平均值。
批标准化的好处1.有助于减少具有可饱和非线性函数的网络中的消失梯度问题。通过批标准化,我们确保任何激活函数的输入不会进入饱和区域。批量归一化将这些输入的分布转换为0-1高斯分布。
2.正则化模型Ioffe和Svegeddy提出了这一主张,但没有就此问题进行深入探讨。也许这是归一化层输入的结果?
3.允许更高的学习率通过防止在训练期间消失梯度的问题,我们可以设置更高的学习率。批量标准化还降低了对参数标度的依赖性。大的学习速率可以增加层参数的规模,这导致梯度在反向传播期间被回传时放大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值