在对神经网络进行训练的时候,经常涉及到的一个概念就是batch normalization,那么究竟什么是batch normalization,以及为什么在训练的时候要加入batch normalization呢?以下就是我的一些学习心得。

1、提出batch normalization的原因

(1) 我们在对某个神经网络训练完成之后,需要测试该网络,那么如果我们的训练集数据与测试集数据具有不同的分布,最终的测试结果会有比较大的影响。也就是说我们的模型是基于训练集数据进行训练的,整个训练的过程肯定会受到训练集数据分布的影响,这种分布的影响也会体现到模型的训练中,但如果测试集数据具有与训练集数据不一样的样本,那么我们的模型对于最后的测试集数据的输出结果可能就是错误的。所以我们希望不论是训练还是测试的时候,输入数据的分布最好都是一致并且稳定的,当然一般来说,数据训练集与测试集的数据分布都是一致的,因为如果分布差距很大,那么这就不能看作是同一个问题。

(2)当网络比较深的时候,即使我们将batch规范化成均值为0,单位方差的数据输入,但是后面层的输出就不能保证了,随着网络的深入,后面网络的输出将不再满足均值为0,方差为1。这也就是说网络在训练的时候,每次迭代输入该层网络的数据的分布都不一样,这就使得网络在训练的过程中有点无所适从,相应收敛的速度也会降低,针对这个问题,就考虑是否可以在每一层的输出后面都加一个BN(batch normalization)层,从而使得每层输入数据都是零均值,单位方差的数据,从而可以使得整个网络的收敛更快。

(3)还有一个原因是促使batch normalization提出的又一原因,在卷积神经网络的训练中,往往要对图像进行“白化”处理,这样可以加快网络训练时候的收敛速度。“白化”操作之所以会加快收敛速度,原因是“白化”处理的本质是去除数据之间的相关性,这样就简化了后续数据独立分量的提取过程。

2、什么是batch normalization?

batch normalization其实就是对数据进行规范化,将其分布变成均值为0,单位方差的正太分布。实现这一功能的方法非常简单,公式如下:

但是如果仅仅进行这样的操作,就会降低整个网络的表达能力。距离来说,加入激活函数采用的是sigmoid函数,那么当输入数据满足均值为0,单位方差的分布时,由于sigmoid函数的曲线特性(可见博客《关于激励函数的一些思考》),在0附近的范围内,整个sigmoid曲线接近线性,激励函数的非线性特性就得不到体现,这样整个网络的表达能力会降低,为了改善这个情况,在对数据采用规范化的过程中引入两个参数,对数据进行缩放和平移,具体公式如下:

这两个公式中涉及的均值跟方差都是针对所有数据的,但在实际训练的时候,我们是对训练数据进行洗牌,并随机抽取一个mini-batch进行训练,所以在实际的训练中,我们只是在mini-batch上实现对数据的规范,公式如下:

3、测试时候的batch normalization

那么对每层的输入数据进行batch normalization之后,我们可以更加快速地实现收敛,那么当整个模型训练成功之后,我们需要对网络进行测试,这时候输入的单个的样本,只有一个数据,如何对这个输入样本进行规范呢?

答案就是我们在训练的时候要记住每个mini-batch的均值与方差,然后根据这些数据计算训练集整体的均值与方差,公式如下:

利用整体的均值与方差,实现对单个样本的规范化,然后再输入到训练好的网络中进行测试。

神经网络训练细节之batch normalization相关推荐

  1. 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它!

    点击上方↑↑↑"视学算法"关注我 来源:公众号 量子位 授权转 再见了,批量依赖性(Batch Dependence). 优化神经网络方法千千万,批量归一化(Batch Norma ...

  2. 李飞飞计算机视觉笔记(5)--神经网络训练细节part2

    参数更新算法 动量更新(Momentum) 复习一下SGD公式 W i = W i − l r ∗ g r a d W_i=W_i-lr*grad Wi​=Wi​−lr∗grad 我们在使用SGD时比 ...

  3. Batch Normalization的作用

    在深度神经网络训练中,Batch Normalization有诸多非常强大的作用和效果:无论使用哪种激活功能或优化器,BN都可加快训练过程并提高性能:解决梯度消失的问题:规范权重:优化网络梯度流... ...

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

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

  5. Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作...

    使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...

  6. Batch Normalization函数详解及反向传播中的梯度求导

    摘要 本文给出 Batch Normalization 函数的定义, 并求解其在反向传播中的梯度 相关 配套代码, 请参考文章 : Python和PyTorch对比实现批标准化Batch Normal ...

  7. 卷积神经网络CNN(2)—— BN(Batch Normalization) 原理与使用过程详解

    前言 Batch Normalization是由google提出的一种训练优化方法.参考论文:Batch Normalization Accelerating Deep Network Trainin ...

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

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

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

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

最新文章

  1. mysql 的select语句_MYSQL SELECT语句新手
  2. ssm框架搭建和整合流程
  3. 图论-最长路--关于最长路的探讨2
  4. 《四世同堂》金句摘抄(五)
  5. 前端学习(2914):差值表达式的用法
  6. 科学家调查了72名图灵奖得主背景,却发现计算机专业很难得奖!
  7. RHEL6.2手动封装rpm源码包安装星际译王
  8. OPPO K9 Pro将于9月26日登场:搭载天玑1200旗舰游戏芯
  9. Linux Shell笔记4 正则表达式
  10. ssm游文化推广系统答辩PPT模板
  11. JavaScript中JSON的处理心得
  12. Spring学习总结四——SpringIOC容器四
  13. Http实战之Wireshark抓包分析
  14. jQuery动画高级用法(上)——详解animation中的.queue()函数 http://www.cnblogs.com/hh54188/archive/2011/04/09/1996469.
  15. python如何让文字竖排输出_html中如何让文字竖排显示?总结实现文字竖排样式的多种方法...
  16. 数学一年级应用题_一年级数学下册应用题大全(附带答案)
  17. 2022全新玖五社区系统源码V9.8版
  18. 360城市全景,开启全新城市探索方式
  19. vSphere Client无法连接vSphere server解决一例
  20. 无法从共享目录中映射段 linux,dopen():未作为root用户运行时,“无法从共享对象映射段”...

热门文章

  1. 图集内子图压缩及 ETC2 fallback选项的作用
  2. nginx优化及配置
  3. 6. ZooKeeper访问控制列表
  4. 自己写的sqlHelper 以及读取配置文件
  5. 《机器学习实战》chapter 11 使用apriori算法进行关联分析
  6. NYOJ 123 士兵杀敌(四)
  7. bootstrap全局css样式
  8. 线上日志集中化可视化管理:ELK
  9. Java中String字符串toString()、String.valueOf()、String强转、+ 的区别
  10. iOS 不要使用tag传递TableViewCell的indexPath值