Batch Normalization(BN)解决的是Internal Covariate Shift (ICS)的问题。

Internal Covariate Shift在文中定义为
The change in the distribution of network activations due to the change in network parameters during training.

也就是在训练的过程中因为网络参数改变引起网络各层输出的分布改变。

Internal Covariate Shift分为两个部分,Internal和Covariate Shift。

  1. Covariate Shift。Covariate Shift 指在有监督学习中,对训练数据集和测试数据集,边际分布不一致,即,但条件分布一致。通过domain adaptation的方法解决。参考 https://www.quora.com/What-is-Covariate-shift

  2. Internal。注意在网络中前一层的输出是下一层的输入。对某一中间层而言,在训练的过程中,因为前面层的参数不断变化,输出分布变化,对该层的输入分布也不断变化。

对某一中间层而言,输入的分布不断改变,需要不断适应新的分布,学习效率也就不高。

BN希望固定网络的各层输入的分布,以加快训练速度。

白化(whitening)模型的输入可以使得训练收敛更快。神经网络时多层的结构,考虑白化神经网络中各层的输入。

对mini-batch做Normalization

对整个数据集做白化复杂度很高,BN做了两个必要的化简:

  1. instead of whitening the features in layer inputs and outputs jointly, we will normalize each scalar feature independently, by making it have the mean of zero and the variance of 1.

  2. since we use mini-batches in stochastic gradient training, each mini-batch produces estimates of the mean and variance of each activation.

对一个d维的输入x,对每一维分别标准化。比如对第k维

,这里对均值和方差都是从mini-batch求的。

注意到简单地对某个层的输入做标准化会改变这个层地表示。为了解决这个问题,BN对每个激活值引入两个参数,分别做scale和shift,思想是allows the BN transform to represent the identity transformation and preserves the network capacity
(感觉类似于resnet)。即

完整的Batch Normalizing Transform 如下图

反传时的梯度,使用链式法则chain rule求取

测试阶段的BN

测试时,BN的均值和方差用的是训练时记录的。因为测试时均值和方差时固定的,BN层变为一个线性变换。

对卷积层做BN

对conv层的BN和对fc层的BN不同,因为filter在图像上移动,filter weight是整个图像共用的。

为了保持卷积的性质,在conv层中,对同一个feature map不同位置的元素,一起做normalization。比如输入维度[N, C, W, H],那么对N*W*H个元素一起求均值和方差,也就是会有C个均值和方差。

参考 https://stackoverflow.com/questions/38553927/batch-normalization-in-convolutional-neural-network

BN使得可以用较大的学习率训练

通常,大学习率会增大参数,进而增大后续计算的梯度,引起模型爆炸。采用BN层,可以使梯度反传不受参数规模影响。

具体而言,假设有一个标量,对BN层有

即,经过BN处理后的输出,不受标量影响。所以有

  1. ,即,标量不影响反传的梯度。

  2. ,即,大的参数会引起小的梯度。

两个结论公式都可以通过导数是输出对输入的变化率简单得到。

Reference:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
深度学习中 Batch Normalization为什么效果好?

作者:冰糖柠萌

【华为云技术分享】Batch Normalization (BN) 介绍相关推荐

  1. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  2. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  3. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  4. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

  5. 【华为云技术分享】HBase与AI/用户画像/推荐系统的结合:CloudTable标签索引特性介绍

    标签数据已经成为越来越普遍的一类数据,以用户画像场景最为典型,如在电商场景中,这类数据可被应用于精准营销推荐.常见的用户画像标签数据举例如下: 基础信息:如性别,职业,收入,房产,车辆等. 购买能力: ...

  6. 【华为云技术分享】云小课 | 灵活配置权限,满足存储安全(OBS权限管理介绍上篇)

    很多朋友有这样的顾虑:将资源存储在OBS之后,我的数据足够安全吗?能够灵活配置权限吗? 比如,甲只想把存储在OBS中的资源留给自己访问:乙想把资源分享给自己的某个朋友:丙想把资源共享的权限控制在固定时 ...

  7. 【华为云技术分享】在 K8S 大规模场景下 Service 性能如何优化?

    摘要:Kubernetes 原生的 Service 负载均衡基于 Iptables 实现,其规则链会随 Service 的数量呈线性增长,在大规模场景下对 Service 性能影响严重.本文分享了华为 ...

  8. 【华为云技术分享】用人工智能技术推动西安民俗文化,斗鱼超管团队有一套

    摘要:AI成为传统文化发展的助推器,助力传统文化朝着大众化.数字化.个性化.精准化方向发展,赋予传统文化新的生机,延续传统文化新的生命."斗鱼团队"从五个方面进行阐述"纵 ...

  9. 【华为云技术分享】Python大神编程常用4大工具,你用过几个?

    摘要:Python是一种跨平台的编程语言,能够在所有主要的操作系统上,运行你编写的任何Python程序.今天介绍几款常见的工具:Python自带的解释器.文本编辑器(Geany.Sublime Tex ...

最新文章

  1. Spring boot的Spring MVC自动配置原理
  2. 2、Docker 常用操作命令
  3. 最靠谱的解决 Ubuntu 18.04 / Linux mint 19 安装网易云音乐 不能正常点击启动问题
  4. boost::uuid模块实现宽流存档测试序列化 uuid的测试程序
  5. 自适应表格连续字符换行及单行溢出点点点显示
  6. Cachegrind:缓存和分支预测分析器
  7. 【分享】哪些句子一眼就会让你爱上
  8. android.support.v4.app.Fragment和android.app.Fragment区别
  9. 使用ACR122U和Proxmark3复制IC卡
  10. 新路由3 高恪魔改固件+底包
  11. HTML如何设置四边形,css实现三角形和平形四边形
  12. P4409 [ZJOI2006]皇帝的烦恼(20190922B)(乱搞)
  13. 企业办理的icp许可证领取需要什么手续
  14. 维护采购订单审批的特性Characteristic和类Class
  15. 海豚php如何添加节点,python+matplotlib绘制简单的海豚(顶点和节点的操作)
  16. 面向6G网络的太赫兹通信技术研究综述
  17. Day01JAVA入门
  18. Java 根据时间戳计算星座
  19. linux leanote云笔记搭建
  20. CloudCompare源码分析:读取ply文件

热门文章

  1. java 正则提取大于等于号_Java正则表达式
  2. pip更新后怎么还是旧版本_双城SEO优化_百度算法更新后,企业网站外链该怎么发?...
  3. java 全排序_Java排序算法全
  4. asp.net core-5.控制台读取json文件
  5. 20155201 实验四《Java面向对象程序设计》实验报告
  6. Linux 源代码阅读知识点及要求
  7. shell下移动文件
  8. CCF201403-1 相反数
  9. 动态规划——最大子数组和(Leetcode 53)
  10. C语言课后习题(37)