批量归一化 BN层

        现在几乎所有的卷积神经网络都或多或少使用了BN。特别是要做很深的神经网络,必须要用这个BN层。一般来讲,梯度会是比较小的数值,反向传播到越底层,梯度越小,这就导致了一个问题:顶层梯度大些,收敛快,底层梯度小,迭代收敛慢。但是,卷积神经网络中一般底层抽取的是一些边缘,简单的纹理信息等,而上层抽取的特征一般是由底层这些融合而来。那么,当上层收敛快时,下层收敛慢,下层一有一点改变,上层就白训练了。因此我们希望在学习底部层的时候避免改变顶部层,从而有了批量归一化。

        BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。

        批量归一化(BN)的思想:把每一个mini-batch小批量数据的均值和方差固定住。具体为先对输入BN层的数据 x_{i} 求均值和方差,

求均值,方差

这里求方差时需要加上一个小的大于0的常量\epsilon,目的是避免方差为0。

        接下来,对输入数据 x_{i} 进行调整得到输出x_{i+1}

变换输入得到输出

这里的 \gamma 和 \beta 都是可学习参数,当我们直接对输入数据减均值除以标准差,相当于输出变成一个均值为0方差为1的分布,可能有时变成这样的标准正态分布不是太好,那么我们就可以去学习一个新的均值 \beta(对数据偏移),新的方差\gamma(对数据缩放),这样控制数据变化不太大,最终的目的都是希望底层的变化小,对顶层影响小,就可以尽量避免改变顶部层。

        BN层的作用位置(批量归一化是一个线性变换):

BN层的作用位置

         对于全连接层,BN作用在特征维,假设一个二维矩阵,每一行是一个样本,每一列是一个特征,那么它会对每一列做前文提到的操作:1 对某一列数据求均值方差 2 对这列数据进行调整,减均值除以标准差,用学到的\gamma 和 \beta作用一下。对于卷积层,BN作用于通道维,对于一个输入/输出卷积层的数据,设数据大小为(批量大小*图像高*图像宽*通道数),那我们对每一个通道的“批量大小*图像高*图像宽”个数据求均值方差再调整。

        批量归一化的好处:本质上是对每个小批量数据加入噪音从而控制了模型复杂度,观察下式

变换输入得到输出

这里 \hat{\mu}_{B} 和 \hat{\sigma}_{B} 可以理解为噪音,因为这两个数是在每一个随机采样的小批量上计算得来,减均值相当于做了一个随机偏移,除以标准差相当于随机缩放。也正因此,BN层没必要和丢弃法一起用。(丢弃法dropout也是一个正则化方法,控制模型复杂度避免过拟合)

        总结,

总结

使用了BN层后允许学习率可以调比较大,加快收敛速度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值