作者:魏秀参
链接:https://www.zhihu.com/question/38102762/answer/85238569
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这里分五部分简单解释一下Batch Normalization (BN)。
1. What is BN?
顾名思义,batch normalization嘛,就是“批规范化”咯。Google在ICML文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1. 而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入(即当),从而保证整个network的capacity。(有关capacity的解释:实际上BN可以看作是在原模型上加入的“新操作”,这个新操作很大可能会改变某层原来的输入。当然也可能不改变,不改变的时候就是“还原原来输入”。如此一来,既可以改变同时也可以保持原输入,那么模型的容纳能力(capacity)就提升了。)

关于DNN中的normalization,大家都知道白化(whitening),只是在模型训练过程中进行白化操作会带来过高的计算代价和运算时间。因此本文提出两种简化方式:1)直接对输入信号的每个维度做规范化(“normalize each scalar feature independently”);2)在每个mini-batch中计算得到mini-batch mean和variance来替代整体训练集的mean和variance. 这便是Algorithm 1.

2. How to Batch Normalize?
怎样学BN的参数在此就不赘述了,就是经典的chain rule:

3. Where to use BN?
BN可以应用于网络中任意的activation set。文中还特别指出在CNN中,BN应作用在非线性映射前,即对做规范化。另外对CNN的“权值共享”策略,BN还有其对应的做法(详见文中3.2节)。

4. Why BN?
好了,现在才是重头戏--为什么要用BN?BN work的原因是什么?
说到底,BN的提出还是为了克服深度神经网络难以训练的弊病。其实BN背后的insight非常简单,只是在文章中被Google复杂化了。
首先来说说“Internal Covariate Shift”。文章的title除了BN这样一个关键词,还有一个便是“ICS”。大家都知道在统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如,transfer learning/domain adaptation等。而covariate shift就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同,即:对所有,,但是. 大家细想便会发现,的确,对于神经网络的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能“指示”的样本标记(label)仍然是不变的,这便符合了covariate shift的定义。由于是对层间信号的分析,也即是“internal”的来由。
那么好,为什么前面我说Google将其复杂化了。其实如果严格按照解决covariate shift的路子来做的话,大概就是上“importance weight”(ref)之类的机器学习方法。可是这里Google仅仅说“通过mini-batch来规范化某些层/所有层的输入,从而可以固定每层输入信号的均值与方差”就可以解决问题。如果covariate shift可以用这么简单的方法解决,那前人对其的研究也真真是白做了。此外,试想,均值方差一致的分布就是同样的分布吗?当然不是。显然,ICS只是这个问题的“包装纸”嘛,仅仅是一种high-level demonstration。
那BN到底是什么原理呢?说到底还是为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的栗子:。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。可以说是一种更有效的local response normalization方法(见4.2.1节)。

5. When to use BN?
OK,说完BN的优势,自然可以知道什么时候用BN比较好。例如,在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。

诚然,在DL中还有许多除BN之外的“小trick”。别看是“小trick”,实则是“大杀器”,正所谓“The devil is in the details”。希望了解其它DL trick(特别是CNN)的各位请移步我之前总结的:Must Know Tips/Tricks in Deep Neural Networks
以上。
**************************************************************************************************************************

编辑于 2016-07-06

转载于:https://www.cnblogs.com/Arborday/p/10888670.html

[转] Batch Normalization相关推荐

  1. batch normalization

    20210702 深度学习中的五种归一化(BN.LN.IN.GN和SN)方法简介 https://blog.csdn.net/u013289254/article/details/99690730 h ...

  2. 批标准归一化(Batch Normalization)解析

    1,背景 网络一旦train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训 ...

  3. 【深度学习理论】(4) 权重初始化,Batch Normalization

    各位同学好,最近学习了CS231N斯坦福计算机视觉公开课,讲的太精彩了,和大家分享一下. 1. 权重初始化 1.1 相同的初始化权重 神经网络中的所有权重都能通过梯度下降和反向传播来优化和更新.现在问 ...

  4. 深度神经网络中的Batch Normalization介绍及实现

    之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时,网络中会有BN层,即Batch Normalization,在每个Dense ...

  5. 详解Batch Normalization及其反向传播

    ↑ 点击蓝字 关注视学算法 作者丨风行天上@知乎 来源丨https://zhuanlan.zhihu.com/p/45614576 极市导读 本文介绍了Batch Normalization的过程及其 ...

  6. Batch Normalization的诅咒

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:Sahil Uppal 编译:ronghuaiyang 导读 ...

  7. Batch Normalization应该放在ReLU非线性激活层的前面还是后面?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编辑:CVDaily  转载自:计算机视觉Daily https: ...

  8. 原理解释|直觉与实现:Batch Normalization

    https://www.toutiao.com/a6707566287964340747/ 作者:Harrison Jansma编译:ronghuaiyang 在本文中,我会回顾一下batch nor ...

  9. 秋招必考——Batch Normalization精简解析

    https://www.toutiao.com/a6706087127173562888/ 2019-06-24 21:23:02 什么是Batch Normalization? 批量标准化(BN)指 ...

  10. Batch Normalization——加速深度神经网络收敛利器

    https://www.toutiao.com/a6703399604613808648/ Batch Normalization Batch Normalization 提出自<Batch N ...

最新文章

  1. mysql 唯一索引_MySQL学会用索引,让你数据库的查询速度起飞
  2. Gentoo 安装日记 21 (第一次重启)
  3. IntelliJ IDEA教程之如何clean或者install Maven项目
  4. node webkit(nw.js) 设置自动更新
  5. 初始化java工具失败,“初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException...
  6. mysql集群之keepalived简单搭建
  7. elasticsearch新增_SpringBoot 使用JestClient操作Elasticsearch
  8. 【SQL】分析函数功能-排序
  9. python读音Python怎么读
  10. OpenCV下的图片旋转(转)
  11. Android studio做中国象棋,等级1(简单单人操作)
  12. MD5及pack安装
  13. docker-reviewboard
  14. 【专题5: 硬件设计】 之 【62.案例四:简易空气净化器,完整原理图】
  15. 计算机类绘图的文献,基于计算机CAD绘图探讨论文
  16. vmin、vmax用处
  17. 你的Web系统真的安全吗?
  18. ZOJ1516HDU1507(二分图匹配)
  19. 利用自定义函数实现批量爬取多家公司的新闻
  20. 香港常见问题扫盲贴(港币兑换/签注直飞/刷卡/酒店押金/关税/香港上网)

热门文章

  1. sketchup 255个su常用插件)_[插件课堂] SU.KIT发布了v2020,完美支持SketchUp 2020
  2. mysql grep 提取错误日志_通过grep 获取MySQL错误日志信息的方法
  3. 使用 SQL Server 代理来计划 SSAS 管理任务
  4. vi/vim 基本使用方法
  5. 串口驱动程序_实战microPython(09) 串口UART的使用(下)
  6. 先学python再学c_初学者Python和C先学哪个好?
  7. 找到没使用过的ip地址
  8. Redhat6 网卡设置 IP地址及主机名配置
  9. Spring Data JPA整合Redis缓存的配置
  10. ERP技术在财务信息化转型中应用探讨