zoukankan      html  css  js  c++  java
  • batch normalization 批归一化 --- 一个硬币的两面

    本文主要是对BN(batch normalization)这篇论文的摘录,加上一些其他论文,辅助理解。

    批归一化是在Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 这篇论文中提出的,主要的思想就是要将每一个隐藏神经元的输入变成是一个均值为0,方差为1的分布,便于加快training过程。

    ----------------------------------作者这么说----------------------------------------------------------------
    具体实施是这样的

    对于每一次的mini-batch会去算一波均值和方差,当然,这些x是针对一个神经元的输入了

    在推断的过程中,也要做归一化,因为推断的时候只有一个样本输入,方差和均值的计算其实是之前的若干个mini-batch的均值和方差的平均

    这个地方需要注意的一点是,方差采用的是无偏估计,对每一个mini-batch,计算出来的方差用的是下面这个式子。不明白的是为什么这个地方采用无偏估计,而之前不采用呢,估计是为了引入noise,有一个类似drop out的作用?

     

    具体在使用的过程中,BN这一层呢,一般是加在非线性层之前,就是relu之类的之前。不过很多人表示,在实际操作中,他们发现BN在relu之后loss可以达到更小值。a lot of debate.....

    对于CNN网络来说,BN是一个feature map共用一个gamma和beta,因为默认不光是一个神经元的输入应该满足同一个分布,而是同一个feature map的都应该满足,所以如果feature map是q*p的大小,对于大小为m的mini-batch而言,其实是计算m*p*q的整个的均值和方差,而不是像之前只要计算m个input值的。

    --------------------------------------------其他论文这么说-------------------------------------------------------------

     下面看到的这个段落来自super resolution中著名的网络EDSR论文,在这篇论文中,作者没有用到BN,他们的说法是因为BN层会让特征被归一化,从而降低变化范围的自由度。他们的实验证明了去掉BN层会让图像细节部分表现更好。并且,他们表示,去掉了BN层之后,GPU的内存使用也被极大地减小了,因为BN层和卷积层占用一样多的内存。

  • 相关阅读:
    Docker简介安装与下载
    ActiveMq安装以及简单的测试
    HashMap源码解析<一>put()方法
    SQL语句查询练习题
    珍藏的数据库SQL基础练习题答案
    MySQL习题及答案
    Hadoop学习1
    数据库简单的实际应用
    数据库基础练习选择题
    数据库练习题
  • 原文地址:https://www.cnblogs.com/sunny-li/p/10088472.html
Copyright © 2011-2022 走看看