Batch Normalization

Batch Normalization, 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法, 也是优化神经网络的一种方法

发现问题


如上图所示,在神经网络中, 数据分布对训练会产生影响. 比如某个神经元 x 的值为1, 某个 Weights 的初始值为 0.1, 这样后一层神经元计算结果就是 Wx = 0.1; 又或者 x = 20, 这样 Wx 的结果就为 2. 现在还不能看出什么问题, 但是, 当我们加上一层激励函数, 激活这个 Wx 值的时候, 问题就来了. 如果使用 像 tanh 的激励函数, Wx 的激活值就变成了 ~0.1 和 ~1, 接近于 1 的部已经处在了 激励函数的饱和阶段, 也就是如果 x 无论再怎么扩大, tanh 激励函数输出值也还是 接近1. 换句话说, 神经网络在初始阶段已经不对那些比较大的 x 特征范围 敏感了.

BN添加位置的探究

Batch normalization 的 batch 是批数据, 把数据分成小批小批进行随机梯度下降(stochastic gradient descent). 而且在每批数据进行前向传递的时候, 对每一层都进行 normalization 的处理(Batch Normalization 就被添加在每一个全连接和激励函数之间.)

我们假设所有的激活函数都是relu,也就是使得负半区的卷积值被抑制,正半区的卷积值被保留。而bn的作用是使得输入值的均值为0,方差为1,也就是说假如relu之前是bn的话,会有接近一半的输入值被抑制,一半的输入值被保留。

所以bn放到relu之前的好处可以这样理解:bn可以防止某一层的激活值全部都被抑制,从而防止从这一层往前传的梯度全都变成0,也就是防止梯度消失。(当然也可以防止梯度爆炸)

BN的效果

如下图所示,没有 normalize 的数据 使用 tanh 激活以后, 激活值大部分都分布到了饱和阶段, 也就是大部分的激活值不是-1, 就是1, 而 normalize 以后, 大部分的激活值在每个分布区间都还有存在. 再将这个激活后的分布传递到下一层神经网络进行后续计算, 每个区间都有分布的这一种对于神经网络就会更加有价值. Batch normalization 不仅仅 normalize 了一下数据, 还进行了反 normalize 的手续(防止normalize没有用,对normalize的效果进行抵消).

BN算法

如下图所示,我们引入一些 batch normalization 的公式.但是公式的后面还有一个反向操作, 将 normalize 后的数据再扩展和平移. 原来这是为了让神经网络自己去学着使用和修改这个扩展参数 gamma, 和 平移参数 β, 这样神经网络就能自己慢慢琢磨出前面的 normalization 操作到底有没有起到优化的作用, 如果没有起到作用, 我就使用 gamma 和 belt 来抵消一些 normalization 的操作.

流程:

  1. 首先计算对与每一批次的每个通道的均值μ和方差σ方 (所求到的均为向量,向量的维度为通道的数量,每个通道对应一个结果)
  2. 其次进行标准化处理,得到均值为0方差为1的数据
  3. 在进行调整(或者说抵消),γ调整方差,β调整均值(这两个参数通过反向传播学习得到γ初始值为1,β初始值为0)

计算实例:

在使用BN时需要注意

  • 训练时将training参数设置为True,验证时将training参数设置为False(使用历史统计的均值和方差,不需要重新计算),在pytorch中可通过model.train()和model.eval()设置
  • batch_size尽可能设大一点(过小则表现效果很差),设的越大求得均值和防擦好越接近整个训练集的均值和方差
  • BN放在卷积层和激活层(Relu)之间,卷积层不要使用偏置bias

注意:

  • μ和σ是在正向传播中统计得到的, γ和β是在反向传播训练中得到的

Batch Normalization解析相关推荐

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

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

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

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

  3. 【深度学习】Batch Normalization(BN)超详细解析

    单层视角 神经网络可以看成是上图形式,对于中间的某一层,其前面的层可以看成是对输入的处理,后面的层可以看成是损失函数.一次反向传播过程会同时更新所有层的权重W1,W2,-,WL,前面层权重的更新会改变 ...

  4. Batch Normalization(BN)超详细解析

    单层视角 神经网络可以看成是上图形式,对于中间的某一层,其前面的层可以看成是对输入的处理,后面的层可以看成是损失函数.一次反向传播过程会同时更新所有层的权重W1,W2,-,WL,前面层权重的更新会改变 ...

  5. 神器:多卡同步的Batch Normalization

    作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...

  6. A Strong Baseline and Batch Normalization Neck for Deep Person Re-identification(论文笔记)(2019CVPR)

    论文链接:<A Strong Baseline and Batch Normalization Neck for Deep Person Re-identification> Abstra ...

  7. 一文搞懂BN的原理及其实现过程(Batch Normalization)

    1. 在讲BN之前我要向大家提出几个问题,就是为什么要引入BN呢?在神经网络训练的时候输入图片不是引入了image normalization吗?所以BN到底是什么呢? Batch Normaliza ...

  8. BN(Batch Normalization):批量归一化

    现在的神经网络通常都特别深,在输出层像输入层传播导数的过程中,梯度很容易被激活函数或是权重以指数级的规模缩小或放大,从而产生"梯度消失"或"梯度爆炸"的现象,造 ...

  9. 7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)

    文章目录 七种normalization 1. Normalization 动机 原理 优点 缺点 2. Batch Normalization 动机 原理 优点 缺点 3. Layer Normal ...

最新文章

  1. engineering equation solver_欧洲留学|爱尔兰圣三一大学不可错过的高薪专业工程学Msc.Engineering|爱尔兰最佳工程课程!...
  2. 反恐精英代码_反恐精英20周年,为什么沙漠2(dust2)地图玩家们一直玩不腻?...
  3. BZOJ.1143.[CTSC2008]祭祀(Dilworth定理 最大流ISAP)
  4. Marketing Cloud extension field technical name
  5. typeahead有什么作用_typeahead使用配置参数。
  6. centos6.5安装python3.6
  7. Java调用WeChat's API总结
  8. matlab 矩阵动态,matlab – 如何以块为单位动态重塑矩阵?
  9. TOMCAT报错解决
  10. unity IEnumerator 协程的理解
  11. LSI存储论坛:6Gb SAS让DAS焕发新活力?
  12. 写一篇meta分析要多少时间?如何写好一篇Meta分析,你需要这样做
  13. 当耐克用上了AI、AR技术,你的鞋也要放飞自我了?Just Do It !
  14. Java初学之人机猜拳游戏
  15. 卖动感单车能帮助keep走出变现困境吗?
  16. c语言算法集,【二级C语言】数据结构算法集---C  语言实现
  17. 微服务 2.0 技术栈选型手册
  18. html5 scrollheight,JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记...
  19. 1w存银行一年多少利息_每年拿出1万元存在银行,5年之后本金和利息一共是多少?...
  20. 部署 WVP+ZLMediaKit 实现大华摄像头接入

热门文章

  1. 游戏王,查卡器,编号,开源,代码,OCG,程序
  2. P-touch Editor 批量打印标签
  3. 原生JavaScript获取某一段时间内的所有日期列表
  4. 闪光桐人の实习日记(2023年2月20-24日)
  5. 人工蜂群算法怎样添加路径
  6. 计算机课学生电脑怎么打开任务管理器,Win7系统电脑打开任务管理器的几种方法-电脑自学网...
  7. Python爬取新浪微博评论数据,写入csv文件中
  8. JAVA微信公众号推送信息
  9. 在计算机领域中 ascii码,在计算机领域中,ascii码用一个字节来干什么
  10. Codeforces1422 F.Boring Queries(根号分治+线段树+可持久化线段树)