• 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层和卷积层占用一样多的内存。

  • 相关阅读:
    Remote Procedure Call (RPC) Locator与X3
    Delphi的悬浮窗口
    改变CSS样式
    JavaScript 打印Web页面指定区域的信息
    判断页面元素存在与否
    如何处理HTML标签属性
    jQuery 获取和设置表单元素
    如何添加/移除CSS类
    处理网页内容
    正则表达式 收集
  • 原文地址:https://www.cnblogs.com/sunny-li/p/10088472.html
Copyright © 2020-2023  润新知