Batch Normalization,拆开来看,第一个单词意思是批,出现在梯度下降的概念里,第二个单词意思是标准化,出现在数据预处理的概念里。

我们先来看看这两个概念。

数据预处理

方法很多,后面我会在其他博客中专门讲,这里简单回忆下

归一化,x-min/max-min,

标准化,包括标准差标准化,x-mean/std,极差标准化,x-mean/(max-min),

中心化,x-mean,

白化,pac-->归一化

梯度下降

梯度下降中 mini batch sgd 是比 sgd 更好的一种方法,因为min batch是平均梯度,使得梯度更平稳,容易收敛,而且batch能够并行计算,减少运算。

我们知道,在机器学习中,梯度下降是要归一化的,因为如果不归一化,y在各个维度上的量纲不一样,使得y的图形不规则,扁平或者瘦高,这样在求梯度时经常会歪歪曲曲,一般会陷入局部最优。

图示如下

神经网络也是用的梯度下降,从这点来看,也是需要数据预处理的。

独立同分布 IID

在机器学习中有这个概念,意思是训练数据和测试数据需要服从同样的分布,这样才有意义,很好理解。

但是在深度学习中,训练和测试都是图片(cnn为例,图片为例),似乎不牵扯IID。

那这根batch normalization 有什么关系呢?

因为在神经网络中有层的概念,每一层都有输入,每一层的输入是上一层的输出,而输出是经过非线性函数的,非线性函数的取值都有特定的区间,这就和原始的输入在数据分布上存在很大不同,

此时需要用一定的方法统一数据分布。

神经网络的训练问题

神经网络层数越深,越是难以训练,收敛速度越来越慢,为什么呢?下面我以sigmoid函数为例简要说明。(后面我会专门写一篇激活函数的博客,详细阐述)

在数学建模时一般会要求样本服从正态分布,正态分布标准化后就是标准正态分布。图像如下

可以看到标准正态分布95%的概率落在 [-2, 2] 之间

sigmoid 函数的特点是在绝大多数x上(除了-2到2的区间)取值要么无限接近于1,要么无限接近于0,而且,这种情况下其梯度无限接近于0,这就是神经网络梯度消息的本质,这也是sigmoid函数很难作为深度神经网络的激活函数的原因。

而 batch normalization 的作用是把x规范到0附近,此时其梯度很大,收敛很快。

scale and shift

batch normalization 虽然增加了梯度,但是同时我们发现,当x在0附近时,其函数非常接近于线性,这大大降低了模型的表达能力。

为了解决这个问题,作者又提出了 scale and shift,即y=scale*x+shift,这相当于是把数据从0向左或向右平移了一段并拉伸或压缩,使得y处于线性和非线性的交界处,这样既保证了较大的梯度,也保留了模型的非线性表达能力。

scale 和 shift 通过训练学习到。

到这基本就讲完 batch normalization 的原理了,下面看看具体怎么使用。

使用方法

之前讲到batch normalization使得神经网络每一层的输入变得规范,也就是说它是把 wx+b 变得规范,即用在线性变换之后,非线性变换之前。如图

总体计算方法如下

这里在标准化时分母加了个ε,是防止分母为0。

总结

batch normalization的优点

1. 提高神经网络的训练效率,避免梯度消失

2. 使得神经网络不依赖于初始值,方便调参

3. 抑制过拟合,降低dropout的使用,提高泛化能力

batch normalization的缺点

1. batch normalization 仍然有很多地方科学理论无法解释

2. batch大小对其效果影响很大,batch 很小时,其梯度不够稳定,收敛变慢,极端情况就是 sgd

参考资料:

https://www.cnblogs.com/guoyaohua/p/8724433.html

https://www.zhihu.com/question/38102762

https://blog.csdn.net/whitesilence/article/details/75667002

https://blog.csdn.net/liangjiubujiu/article/details/80977502

Batch Normalization 引出的一系列问题的更多相关文章

  1. 神经网络之 Batch Normalization

    知乎 csdn Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce ...

  2. 图像分类(二)GoogLenet Inception_v2:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

    Inception V2网络中的代表是加入了BN(Batch Normalization)层,并且使用 2个 3*3卷积替代 1个5*5卷积的改进版,如下图所示: 其特点如下: 学习VGG用2个 3* ...

  3. 转载-通俗理解BN(Batch Normalization)

    转自:参数优化方法 1. 深度学习流程简介 1)一次性设置(One time setup)          -激活函数(Activation functions) - 数据预处理(Data Prep ...

  4. 《RECURRENT BATCH NORMALIZATION》

    原文链接 https://arxiv.org/pdf/1603.09025.pdf Covariate 协变量:在实验的设计中,协变量是一个独立变量(解释变量),不为实验者所操纵,但仍影响实验结果. ...

  5. 【转载】 详解BN(Batch Normalization)算法

    原文地址: http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce ------------------------------- ...

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

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

  7. Batch Normalization 详解

    一.背景意义 本篇博文主要讲解2015年深度学习领域,非常值得学习的一篇文献:<Batch Normalization: Accelerating Deep Network Training b ...

  8. Batch Normalization详解

    目录 动机 单层视角 多层视角 什么是Batch Normalization Batch Normalization的反向传播 Batch Normalization的预测阶段 Batch Norma ...

  9. 深度学习(二十九)Batch Normalization 学习笔记

    Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce 一.背景意义 ...

随机推荐

  1. OSPF - 1,基础

    1,OSPF知识点a)在OSPF中,如果是环回口宣告进OSPF,不管宣告时配置的是多少位掩码,路由器收到的都是32位.(EIGRP配了多少位就收到多少位).好处:EIGRP中,在PING包发起时如果在 ...

  2. ionic3 打包一个已签名的apk

    1 进入ionic官方文档,点击左边导航菜单,找到INTRO下的Deploying2 终端进入项目目录(根据项目环境定是否需要root权限)3 运行命令ionic cordova build andr ...

  3. Spring Boot 获得帮助

    如果你在使用 Spring Boot 的时候遇到了问题,我们很乐意为你提供帮助. 请访问 IX. How-to指南 中的内容 — 在这个指南中为常见的多数问题提供了解决方案. 学习更多有关 Sprin ...

  4. 用where导致group by分组字段的索引失效

    把两个单独的索引合并成一个组合索引,即把where条件字段的索引和group by的分组字段索引组合成一个. 如果分组的字段需要用函数处理,可以用索引函数 Generated Column(函数索引) ...

  5. apiCloud 三方分享,微信好友分享,微信朋友圈分享,QQ分享,微博分享

    首先查看我的这篇有关三方登录的博客,地址是http://www.cnblogs.com/gqx-html/p/8303567.html,配置完三方数据后可以从上一篇文章中的链接跳转到各个登录查看api ...

  6. 数组<-->变量

    /** * *数组与变量之间转换 **/ $name='jb51'; $email='jb51@jb51.net'; $info=compact('name','email'); print_r($i ...

  7. js字符串转日期兼容性

    今天遇到个bug,安卓上是好的,ios就不行.然后我就把可能用到的值都打印出来,发现日期比较一项在苹果机上就显示false,而谷歌浏览器是true.突然回忆起以前开发遇到过类似的问题,都是出在字符串转 ...

  8. CF-339D-线段树

    http://codeforces.com/problemset/problem/339/D 给出一个序列.每次更改其中一个值然后询问序列的f(),序列的f()定义为: 每相邻两个元素按位或得到长度减 ...

  9. WDA基础十三:常用模板管理

    常用的模板一般是SMW0和OAOR,根据不同需求来的. WAD有个不好的地方就是不支持GUI上的OLE和DOI,所以需要做转换,下面是常用的方式: FUNCTION ZCRM_DOWNLOAD_TEM ...

  10. 使用virustotal VT 查询情报——感觉远远没有微步、思科好用,10万条数据查出来5万条都有postives >0的记录,尼玛!!!

    1399 git clone https://github.com/VirusTotal/c-vtapi.git 1400 cd c-vtapi/ 1402 sudo apt-get install ...