BianC的日常

  • 首页
  • 机器学习
  • 摄影作品
  • 算法拾遗
  • 热爱生活
海的一边
分享科研与生活
  1. 首页
  2. 机器学习
  3. 正文

Batch Normalization 批量标准化

2021-06-24 558点热度 2人点赞 0条评论

batch normalization自从2015年由谷歌提出来之后,被广泛应用于神经网络的训练之中。例如在resnet中,作者在卷积层和激活函数之间应用了BN,从而提高模型的训练速度和平稳性。

BN简单来讲就是在激活函数前对输入的向量进行普通的标准化操作,不管它是来自于全连接层的输出还是卷积层的输出,都可以通过BN来进行标准化。

../_images/resnet-block.svg

resnet block中使用了BN

一般情况下,普通的数据标准化是原始值减去样本均值,除以样本方差。也就是$\hat{x}_i = \frac{x_i - \mu}{\sigma} $,其中$\mu = \frac{1}{m}\sum{x_i}$,$\sigma^2 = \frac{1}{m}\sum{x_i - \mu}$。这时原始数据的均值为0,方差为1。这样的可以使极端数据的影响在总体中的差异性变小。

显然在一个batch里,我们神经网络某一层的输出集合就可以看作是一批新的样本,对其进行normalization是很合理的事情。Batch Norm跟上面提到的普通Norm的区别有两点:一是BN没有用全体样本集合来进行norm,这是因为我们在进行mini-batch进行随机梯度下降时,只用了batch里的一个批次的数据,如果使用全体样本进行norm,那相当于引入了信息泄露,所以BN只在当前的batch中进行norm。第二点是BN在标准的norm之后,还通过引入两个参数进行扰动。具体形式是:
$ \hat{ x }_ i ^{(k)} = \frac{ x_{ i } ^ {(k)}-\mu^{(k)}}{ \sqrt{ {\sigma^{(k)}}^{2} + \epsilon}}$,其中$k \in [1,d]$,是对输入特征的每一个维度分别进行norm,$\epsilon$是一个任意的小常数,为了防止为0的情况;进一步通过一个变换,$ y _ { i } ^ {(k)} = \gamma^{(k)} \hat{x}_{ i } ^ {(k)} + \beta ^ {(k)} $,这里的$\gamma$和$\beta$就是用于扰动的参数,目的是在一定程度上保留其输出的差异性,恢复网络的表示能力,这两个参数可以通过学习进行调整(参与反传)。明明通过BN进行了标准化,却又通过引入$\gamma$和$\beta$来“逆”标准化,就很有意思。

这里需要再注意一点,在BN的时候,

标签: 暂无
最后更新:2021-07-06

superbianc

弱水三千,只取一瓢

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 海的一边. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

京ICP备2021021901号-1