美文网首页
BatchNormalizaion

BatchNormalizaion

作者: VanJordan | 来源:发表于2019-04-14 20:45 被阅读0次

    OverView

    • 神经网络就是一个函数,是一个从XY的映射函数,在一个学习到了X分布的函数后,如果对输入的X进行稍微的改动,那么显而易见必须要重新训练网络以适应新输入的分布才能有一个很好的效果,这个输入的不一致性就叫做covariance shift。如果将每一层都看成一个函数,参数的变化导致每一层的输入分布会发生改变,进而上层的网络需要不停地去适应这些分布变化,使得我们的模型训练变得困难,学习的速度变慢。上述这一现象叫做Internal Covariate Shift,一个较规范的定义:在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift,而BatchNormalizaiont就是用来reduce internal covariance shift的。

    为什么要做BN

    • 使用BN的好处是可以使用更高的学习率,同时还有抗Overfitting的作用,因为于dropout类似,他在隐层加入了noise(使用可训练的参数对原始分布进行估计),因此如果使用了BN的话可以使用更少的Dropout率。
    • BN是通过对上一个激活层的输出减去batch 的均值以及除以一个batch的方差。但是这样的放缩平移有一个问题就是底层的部分原来是学习到东西的,现在做了normalization以后相当于把学习到的东西又丢失了,因此BN还有一个终极大杀招就是做一个denormalization,可以,这样就有点像gamble max tricks一样将随机的部分放到了外边,BN做的就是把每一层学习到的分布特征使用两个可学习的变量存储然后“恢复”原来的分布特征,即scale后的输出再乘以gamma(标准差)加上beta(均值),因此数据特定的分布是通过可学习变量来保存的。
    • 因此如果是在一个已经预训练好的模型比如VGG中加入BN的话应该计算好合适的betagamma,让加了BN以后的数据的输出和原始的数据的输出是一样的。

    测试阶段的BN

    • 在使用BN训练好模型后,保留了每组的mini-batch训练数据在每层中的均值和方差,然后算出整个训练数据的方差和均值来对test数据进行归一化。
    • 得到每个特征的均值和方差的无偏估计以后对test数据采用同样的normalization方法,另外,除了采用整体样本的无偏估计外。吴恩达在Coursera上的Deep Learning课程指出可以对train阶段每个batch计算的mean/variance采用指数加权平均来得到test阶段mean/variance的估计。

    关于为什们要使用参数进行denormalization的一点理解

    • 首先如果直接放缩到0,1那么就会损失底层layer学习到的关于分布的特征信息,而如果直接使用原始的分布那么每一个batch的数据分布变化会太大,导致学习不好。而加入了可学习的参数以后相当denormalization对两者做了一个平衡,而且可学习参数是每个batch都是一样的相当于全局的平均,因此可以有一个比较好的效果。

    相关文章

      网友评论

          本文标题:BatchNormalizaion

          本文链接:https://www.haomeiwen.com/subject/ptdswqtx.html