Batch Normalization原理

神经网络训练过程的本质是学习数据的分布,如果训练数据与测试数据的分布不同将大大降低网络的泛化能力;如果某些训练数据的每批batch数据分布也不同,则也大大消耗训练的时间从而使训练变得低效和复杂。 

随着网络的进行,每个隐层的参数变化使得后一层的输入发生变化,从而每一批训练数据的分布也随之改变,致使网络在每次迭代中都需要拟合不同的数据分布,增大训练的复杂度和过拟合的风险。

举个例子,比如6个mini-batch,前4个要求向a方向+0.1,后2个要求a方向-0.2,最终有效梯度为0.1*4-0.2*2=0,还是在原地踏步,极大影响训练的效率。

BN算法解决的就是这样的问题,他通过对每一层的输入增加归一化处理,将所有批数据强制在统一的数据分布下,从而达到加速训练的目的。

BN可以减少过拟合和增加泛化能力,提升训练速度,或梯度爆炸等无法训练的状况时可以尝试BN来解决。

下面看BN的流程:

在神经网络中,我们会在输入层对数据进行归一化,BN则是在每一层输出的时候和下一层输出之间加入了一个归一化层,将输入数据的归一化强制为均值为0,方差为1的分布:

\tilde{x}^{(k)}=\frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}

但这样的数据分布位于0附近,若激活函数是Sigmoid,进行这样变换的数据会处于函数的非饱和区域,近似于线性变换,破坏了这一层变换之前所学习到的特征分布。所以,为了恢复原始数据分布,引入了重构变换以及需要学习的参数\gamma\beta

y^{(k)}=\gamma^{(k)} \tilde{x}^{(k)}+\beta^{(k)},

当γ和β等于数据的方差和均值时,y=x,在BN中,这两个参数是需要学习的,让网络可以学习恢复出原始网络所要学习的特征分布。

所以最后完整的BN前向传导过程公式为:

上述的计算方法用于在训练过程中。在测试时,所使用的均值和标准差是整个训练集的均值和标准差。由于训练集的数量较大,均值和标准差的计算量是很大的,所以一般会使用移动平均法来计算,这里不详述。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值