深度学习 | BN层原理浅谈

深度学习 | BN层原理浅谈


一. 背景

    神经网络在训练时,由于内存限制,各框架都会设置batch和epoch的概念来进行训练。

    每个batch内采样的训练数据的分布各不相同,那么网络就要在每次迭代都去学习以适应不同的分布。对于深度学习这种包含很多隐层的网络结构,各隐层学到的权重等参数都在不停的变化,导致隐层的输入分布老是变来变去,产生了所谓的“Internal Covariate Shift”(内部协变量偏移)现象,

    使用更好的参数初始化或者使用较低的分辨率能够一定程度上缓和这个问题,但是会大大降低网络的训练速度,为了保证隐层分布稳定及训练速度,Batch Nomalization算法随之而来;

二. BN层作用

(1)将每一隐层参数都归一化至均值0、方差为1,输出至下一隐层;

(2)加速网络收敛速度,可以使用较大的学习率来训练网络

(3)改善梯度弥散

(4)提高网络的泛化能力

(5)BN层一般用在线性层和卷积层后面,而不是放在非线性单元后

三. 计算原理

    BN层对每一个batch内样本的features中计算其均值 μ \mu μ和方差σ,然后对每一个x​减去均值除以标准差,最后利用超参数 γ \gamma γ β \beta β进行仿射变换,即可得到最终的BN输出y,具体过程如下:

在这里插入图片描述

1.计算样本均值。
2.计算样本方差。
3.样本数据标准化处理。
4.进行平移和缩放处理。引入了 γ \gamma γ β \beta β两个参数。来训练γ和β两个参数。引入了这个可学习重构参数 γ \gamma γ β \beta β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。

四. 注意事项

为什么BN层一般用在线性层和卷积层的后面,而不是放在激活函数后

因为激活函数一般为非线性,非线性单元的输出分布形状会在训练过程中发生变化,归一化无法消除它的方差偏移,相反的,全连接和卷积层的输出一般是一个对称的,非稀疏的一个分布,更加类似于高斯分布,对他们进行归一化会产生更加稳定的分布。例如Relu激活函数,如果输入的数据是一个高斯分布,经过Relu输出的数据小于0的被抑制,就不是高斯分布了。

为什么BN能抑制过拟合(有争议)

BN每个batch采样的数据都不一样,但是每次的batch的数据都会被局部均值和方差作用,可以认为是引入了噪声,增强了过拟合能力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值