BatchNormalization总结

104 篇文章 4 订阅
37 篇文章 3 订阅

1、Internal Covariate Shift现象

网络在训练过程中,中间层的权重在不断发生变化,导致该层输出数据的分布发生改变,这种数据分布的改变称为’Internal Covariate Shift’。

2、BatchNormalization算法

为了解决Internal Covariate Shift现象,Sergey Ioffe and Christian Szegedy提出了BatchNormalization算法,This operation simply zero-centers and normalizes each input, then scales and shifts the result using two new parameter vectors per layer: one for scaling, the other for shifting,具体步骤如下所示:
在这里插入图片描述

  • μ B μ_B μB是输入均值向量,该向量元素个数等于输入个数(或者输入通道数),该值是在一个batch上计算得到的;
  • σ B σ_B σB是输入标准差向量,该向量元素个数等于输入个数(或者输入通道数),该值是在一个batch上计算得到的;
  • m B m_B mB是batch size大小;
  • x ^ ( i ) \hat{x}^{(i)} x^(i)是一个批次中第i个输入实例的零中心和归一化后的值;
  • γ为缩放因子向量,该向量元素个数等于输入个数(或者输入通道数),在训练过程中不断学习更新;
  • β为平移因子向量,该向量元素个数等于输入个数(或者输入通道数),在训练过程中不断学习更新;
  • z ( i ) z^{(i)} z(i)是一个批次中第i个输入实例经过缩放和平移后的结果。

在推理过程中,输入的batch size可能很小,甚至是1,因此求得的均值和标准差不具有代表性,实际此时输入的均值 μ B和标准差σ B实际采用的是整个训练集的均值和标准差,而这两个值在训练过程中是随着训练的推进逐渐迭代更新的,而不是训练完后再在整个数据集上计算均值和标准差,这两个在训练过程中不断迭代更新的均值和标准差分别称为moving_mean, moving_variance,是由训练集决定的,不需训练

3、BatchNormalization层的参数量

由以上所述可知,一个BatchNormalization层涉及到的参数包含在四个矩阵(向量)中,分别是gamma, beta, moving_mean, moving_variance,这四个矩阵的元素数都是相同的,即等于输入个数(或者输入通道数),其中一半是可训练的,而另一半是不需要训练的。

4、BatchNormalization层的计算量

将上面的3式代入4式,可以整理成 z ( i ) = a x + b z^{(i)} = ax+b z(i)=ax+b的形式,在模型部署的时候,推理框架往往是先把a和b提前计算出来,这样推理到BN层时,直接代入ax+b公式,可以减少一部分计算量。对于一个输入特征图大小为W*H的BN层来说,每个通道要进行计算量为 W ∗ H ∗ ( 1 + 1 ) W*H*(1+1) WH(1+1), 括号中的两个1分别表示一次加法和一次乘法,如果输入特征图的通道数为C,那么一共计算量为:

FLOPs = 2*C*W*H

C是BatchNormalization层的输入通道数,W和H分别是BatchNormalization层输入特征图的宽和高分辨率,2指的是包括乘法和加法。

实际应用中往往将BatchNormalization层合并到卷积层,而不单独考虑其计算量。

5、BatchNormalization层的优点

  • BatchNormalization提高了模型的泛化能力,采用BatchNormalization层后,可以考虑去掉较早的dropout或l2等正则化方法;
  • 提高训练速度,采用BatchNormalization层后。可以设置一个较大的初始学习率,而且在此基础上的训练速度也会大大提高。

6、BN层和卷积层的融合

假设卷积层的输出为conv(x), BN层的输出为BN(x),则conv(x)和BN(x)可分别表示为:
在这里插入图片描述
在这里插入图片描述

将conv(x)代入到BN层计算公式并进行整理可得:
在这里插入图片描述
下面进行进一步整理,令:
在这里插入图片描述
在这里插入图片描述
这样,卷积层和BN层融合后的结果就可以表示为:
在这里插入图片描述
这时可以发现卷积层和BN层融合后的结果这表示为一个新的卷基层,这个新的卷积层的权重为 W f u s e d W_{fused} Wfused,偏置为 B f u s e d B_{fused} Bfused

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值