神经网络训练细节之batch normalization
在对神经网络进行训练的时候,经常涉及到的一个概念就是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相关推荐
- 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它!
点击上方↑↑↑"视学算法"关注我 来源:公众号 量子位 授权转 再见了,批量依赖性(Batch Dependence). 优化神经网络方法千千万,批量归一化(Batch Norma ...
- 李飞飞计算机视觉笔记(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时比 ...
- Batch Normalization的作用
在深度神经网络训练中,Batch Normalization有诸多非常强大的作用和效果:无论使用哪种激活功能或优化器,BN都可加快训练过程并提高性能:解决梯度消失的问题:规范权重:优化网络梯度流... ...
- 【深度学习理论】(4) 权重初始化,Batch Normalization
各位同学好,最近学习了CS231N斯坦福计算机视觉公开课,讲的太精彩了,和大家分享一下. 1. 权重初始化 1.1 相同的初始化权重 神经网络中的所有权重都能通过梯度下降和反向传播来优化和更新.现在问 ...
- Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作...
使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...
- Batch Normalization函数详解及反向传播中的梯度求导
摘要 本文给出 Batch Normalization 函数的定义, 并求解其在反向传播中的梯度 相关 配套代码, 请参考文章 : Python和PyTorch对比实现批标准化Batch Normal ...
- 卷积神经网络CNN(2)—— BN(Batch Normalization) 原理与使用过程详解
前言 Batch Normalization是由google提出的一种训练优化方法.参考论文:Batch Normalization Accelerating Deep Network Trainin ...
- 深度神经网络中的Batch Normalization介绍及实现
之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时,网络中会有BN层,即Batch Normalization,在每个Dense ...
- Batch Normalization——加速深度神经网络收敛利器
https://www.toutiao.com/a6703399604613808648/ Batch Normalization Batch Normalization 提出自<Batch N ...
最新文章
- mysql 的select语句_MYSQL SELECT语句新手
- ssm框架搭建和整合流程
- 图论-最长路--关于最长路的探讨2
- 《四世同堂》金句摘抄(五)
- 前端学习(2914):差值表达式的用法
- 科学家调查了72名图灵奖得主背景,却发现计算机专业很难得奖!
- RHEL6.2手动封装rpm源码包安装星际译王
- OPPO K9 Pro将于9月26日登场:搭载天玑1200旗舰游戏芯
- Linux Shell笔记4 正则表达式
- ssm游文化推广系统答辩PPT模板
- JavaScript中JSON的处理心得
- Spring学习总结四——SpringIOC容器四
- Http实战之Wireshark抓包分析
- jQuery动画高级用法(上)——详解animation中的.queue()函数 http://www.cnblogs.com/hh54188/archive/2011/04/09/1996469.
- python如何让文字竖排输出_html中如何让文字竖排显示?总结实现文字竖排样式的多种方法...
- 数学一年级应用题_一年级数学下册应用题大全(附带答案)
- 2022全新玖五社区系统源码V9.8版
- 360城市全景,开启全新城市探索方式
- vSphere Client无法连接vSphere server解决一例
- 无法从共享目录中映射段 linux,dopen():未作为root用户运行时,“无法从共享对象映射段”...
热门文章
- 图集内子图压缩及 ETC2 fallback选项的作用
- nginx优化及配置
- 6. ZooKeeper访问控制列表
- 自己写的sqlHelper 以及读取配置文件
- 《机器学习实战》chapter 11 使用apriori算法进行关联分析
- NYOJ 123 士兵杀敌(四)
- bootstrap全局css样式
- 线上日志集中化可视化管理:ELK
- Java中String字符串toString()、String.valueOf()、String强转、+ 的区别
- iOS 不要使用tag传递TableViewCell的indexPath值