BatchNorm的一些理解

原文: https://blog.csdn.net/malefactor/article/details/51476961 by 张俊林
参考: https://blog.csdn.net/yinruiyang94/article/details/78002342

Internal Covariate Shift:

如果ML系统实例集合(x,y)中的输入值X的分布老是变,这不符合IID假设啊,那您怎么让我稳定的学规律啊,这不得引入迁移学习才能搞定吗,我们的ML系统还得去学习怎么迎合这种分布变化啊。

IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。

之前的研究表明如果在图像处理中对输入图像进行白化(Whiten)操作的话——所谓白化,就是对输入数据分布变换到0均值,单位方差的正态分布——那么神经网络会较快收敛,

训练深层神经网络收敛越来越慢的本质原因:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致后向传播时低层神经网络的梯度消失

输入减去均值除以方差也就是使输入数据的均值为0方差为1标准正太分布,可以加快该网络的训练速度

这时的a用一句不是那么官方的话来讲,是‘参差不齐’的,为了仍然可以达到‘均值为0,方差为1’的效果,我们要在这一隐层的操作中加一点东西:

z = wx + b
μ = (z的平均)
σ2 = (z的方差)
z_norm = (z - μ) / √(σ2 + ε)
在这里分母加一个ε的目的是为了防止分母为0。
然而我们又不希望隐层的输入的均值永远为0,方差永远为1,也许有不同的均值和方差得到的分布更有意义。
因此我们要做到的不是让均值为0,方差为1,而是要控制均值和方差的大小,这也是我在上边一段中将‘均值为0,方差为1’打引号的原因。

z = γ · z_norm + β
如果γ = √(σ2 + ε), β = μ,则z就是等于z_norm,因此我们可以通过这个式子得到最终可以控制均值和方差的z。
最后在这个z上套上一个激活函数:

a = g(z)。
OK,到这里,一个加上Batch Norm的神经元就完整的完成了。
除了之前的神经网络中存在的参数w和b,在这里我们又多了两个参数γ和β。这两个参数也和w、b一样,需要梯度下降算法来优化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值