Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
1. 摘要
训练深层的神经网络非常困难,因为在训练的过程中,随着前面层数参数的改变,每层输入的分布也会随之改变。这需要我们设置较小的学习率并且谨慎地对参数进行初始化,因此训练过程比较缓慢。
作者将这种现象称之为 internal covariate shift,通过对每层的输入进行归一化来解决这个问题。
引入 BN 后,我们可以不用太在意参数的初始化,同时使用更大的学习率,而且也会有正则化的效果,在一些情况下可以不用再使用 Dropout。
2. 介绍
因为网络中每一层的输入都受到前面所有层参数的影响,因此参数的一个小的改变将会随着网络加深而被逐渐放大。在这样的情况下,每一层网络都需要一直去适应新的输入分布,训练过程也就变得很慢。
考虑如下的网络计算
\(F_1\) 和 \(F_2\) 是任意的变换,\(\Theta_1\) 和 \(\Theta_2\) 是需要学习的参数。学习 \(\Theta_2\) 可以看作是输入 \(x=F_1(u, \Theta_1)\) 被传入子网络
因此,如果 \(x\) 的分布保持不变的话, \(\Theta_2\) 就不用去重新适应来补偿 \(x\) 分布的变化。
另一方面,如果我们采用 Sigmoid 激活函数的话,随着网络加深,我们很容易落入到饱和区域,容易产生梯度消失现象,减缓训练过程。但是,如果我们能够确保非线性输入的分布维持稳定的话,优化就不容易陷入到饱和区域,从而能够加速训练。
3. 小批量归一化
针对每一层的所有输入进行白化代价非常高并且不是处处可微,因此作者进行了两个必要的简化。
第一,我们独立地归一化一层中的每一个特征,让它们具有零均值标准方差。针对一个 \(d\) 维的输入 \(x=(x^{(1)}...x^{(d)})\),我们将分别对每一维进行归一化。
但是,这样简单地归一化每个输入会改变当前层网络的表达能力。比如,归一化 Sigmoid 函数的输入将会使它们落入激活函数的线性区域。为了解决这个问题,我们要保证嵌入到网络中的变换能够表示恒等变换。对此,我们引入一对参数 \(\gamma^{(k)}, \beta^{(k)}\) 来对归一化后的值再进行缩放和平移。
这样,通过设定 \(\gamma^{(k)}=\sqrt {Var[x^{(k)}]}, \beta^{(k)}=E[x^{(k)}]\) ,如果原始激活值是最优的话,我们也能够恢复到原有状态。
第二,用小批量样本来产生对每个激活值均值和方差的估计。针对 \(m\) 个样本的小批量,归一化变换如下所示:
在训练过程中,我们需要计算 BN 变换参数的梯度来进行反向传播,根据链式法则,有
因此,BN 在网络中引入了对激活值的归一化,并且是一个可微的变换。这样,每一层都可以在同样的分布上持续学习而不用担心内部偏移问题,所以可以加速训练过程。最后,在归一化后学习到的仿射变换允许网络表示恒等变换,因此也保留了网络的容量也即表示能力。
4. 测试
虽然对小批量的激活值进行归一化在训练时是非常有效的,但在测试时却是不必要也不可取的,我们想让输出只确定地依赖于输入。因此,一旦训练好了一个网络,我们用训练时总体的均值和方差来进行归一化。
忽略 \(\epsilon\),这些归一化后的激活值就具有了和训练时一样的零均值和标准方差。我们采用无偏的方差估计
期望是根据训练过程中所有大小为 \(m\) 的小批量样本计算的,\(\sigma_B^2\) 代表它们的方差。同时,我们使用滑动平均来跟踪训练过程中每个小批量的均值和方差。
5. 在全连接和卷积网络中引入 BN
针对全连接网络,我们在非线性之前加入 BN 变换,对 \(x=Wu+b\) 进行归一化。注意到,偏置 \(b\) 可以被忽略,因为在后序的减去均值的过程中它的作用被抵消了。因此,就变成了
\[z=g(Wu+b) \to z=g(BN(Wu))\]
对于 \(x\) 的每一个维度我们学习一对参数 \(\gamma^{(k)}, \beta^{(k)}\) 。
针对卷积网络,我们想要归一化保持卷积的特性,因此,不同样本的所有位置的同一个特征图用同样的方式进行归一化。对于一个大小为 \(m\) 的小批量样本和大小为 \(p×q\) 的特征图,有效的小批次为
\[m'=m\cdot pq\]
对于每一个特征图我们学习一对参数 \(\gamma^{(k)}, \beta^{(k)}\) 。
6. BN 允许更高的学习率
在传统的网络中,太高的学习率可能会导致梯度消失或者爆炸,也会使网络陷入在糟糕的局部最优解。但引入 BN 后,它会阻止参数的小的变化被放大成激活值和梯度的更大变化或者次优变化,比如说不会让训练陷入到非线性的饱和区域。
BN 也使得训练对参数的规模更适应。正常情况下,大的学习率会增大参数,然后放大反向传播的梯度导致模型爆炸。但是,引入 BN 后,反向传播不受参数的规模影响。实际上,对于标量 \(a\),有
\[x_i = Wu_i\]
\[\mu = \frac{1}{m}\sum_{i=1}^{m}x_i\]
\[\sigma^2 = \frac{1}{m}\sum_{i=1}^{m}(x_i-\mu)^2\]
\[\hat x_i = \frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}}\]
\[y_i =\gamma \hat x_i+\beta=BN[Wu_i]\]
所以,\(BN[Wu] = BN[(aW)u]\),\(\hat x_i\) 求取时分子分母都放大 \(a\) 倍。反向传播时,有
\[\frac{\partial BN[(aW)u]}{\partial x} = \frac{1}{a} \cdot \frac{\partial BN[Wu]}{\partial x}\]
\[\tag{1}\frac{\partial BN[(aW)u]}{\partial u} = \frac{\partial BN[Wu]}{\partial u}\]
\[\tag{2}\frac{\partial BN[(aW)u]}{\partial (aW)} = \frac{1}{a} \cdot \frac{\partial BN[Wu]}{\partial W}\]
由式 (1) 可以看到,参数的规模不影响梯度的反向传播。而且,由式 (2) 知,较大的参数将会获得较小的梯度,BN 能够稳定参数的增长。
7. BN 的正则化效果
当使用 BN 进行训练时,小批次中的一个样本会与其他样本结合在一起被传入网络中,网络不再会为某个给定的训练样例生成确定值。在实验中,作者发现这种效应有利于网络的泛化。引入 BN 后,Dropout 可以被移除或减少作用。
8. 加速 BN 网络的训练
仅仅在网络中添加 BN 不能充分利用这种方法的优越性,除此之外,作者采用了以下策略:
- 增大学习率
- 移除 Dropout
- 减小 L2 正则化权重
- 加快学习率衰减
- 移除局部响应归一化
- 更彻底地打乱训练数据,防止同样的数据总出现在同一个批次中
- 减少光度畸变
9. 实验结果
可以看到,在 MNIST 数据集上,引入 BN 后网络网络收敛很快,并且输入的分布更加稳定。
在 ImageNet 数据集上,引入 BN 后很快就达到了原来 Inception 网络取得的准确率。
获取更多精彩,请关注「seniusen」!
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift的更多相关文章
- Batch normalization:accelerating deep network training by reducing internal covariate shift的笔记
说实话,这篇paper看了很久,,到现在对里面的一些东西还不是很好的理解. 下面是我的理解,当同行看到的话,留言交流交流啊!!!!! 这篇文章的中心点:围绕着如何降低 internal covari ...
- Deep Learning 27:Batch normalization理解——读论文“Batch normalization: Accelerating deep network training by reducing internal covariate shift ”——ICML 2015
这篇经典论文,甚至可以说是2015年最牛的一篇论文,早就有很多人解读,不需要自己着摸,但是看了论文原文Batch normalization: Accelerating deep network tr ...
- 图像分类(二)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* ...
- 论文笔记:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
ICML, 2015 S. Ioffe and C. Szegedy 解决什么问题(What) 分布不一致导致训练慢:每一层的分布会受到前层的影响,当前层分布发生变化时,后层网络需要去适应这个分布,训 ...
- Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift(BN)
internal covariate shift(ics):训练深度神经网络是复杂的,因为在训练过程中,每层的输入分布会随着之前层的参数变化而发生变化.所以训练需要更小的学习速度和careful参数初 ...
- Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换
批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...
- 深度学习网络层之 Batch Normalization
Batch Normalization Ioffe 和 Szegedy 在2015年<Batch Normalization: Accelerating Deep Network Trainin ...
- 【深度学习】深入理解Batch Normalization批标准化
这几天面试经常被问到BN层的原理,虽然回答上来了,但还是感觉答得不是很好,今天仔细研究了一下Batch Normalization的原理,以下为参考网上几篇文章总结得出. Batch Normaliz ...
- 解读Batch Normalization
原文转自:http://blog.csdn.net/shuzfan/article/details/50723877 本次所讲的内容为Batch Normalization,简称BN,来源于<B ...
随机推荐
- java实现zabbix接口开发
API:https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/user/login 如果你使用jar包开发的话,会出现*** ...
- SQLServer禁用、启用外键约束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ---启用or禁用指定表所有外键约束 alter table PUB_STRU NOCHECK constrai ...
- VS2017 编译 QT5.10.1 X64位 静态库 MT
参考文章 https://blog.csdn.net/Devout_programming/article/details/78827112 准备工作* Supported compiler (Vis ...
- linux的用户管理相关配置文件
Linux的管理命令的本质不过是对配置文件/etc相关文件的修改罢了
- Delphi Android USB Interface with the G2
来源:http://www.bverhue.nl/g2dev/?p=65 Delphi Android USB Interface with the G2 Leave a reply I first ...
- 项目-高性能TcpServer - 目录
1.项目-高性能TcpServer - 1.网络通信协议 https://blog.csdn.net/arno1988/article/details/82463225 2.项目-高性能TcpServ ...
- A1033
找出最小开销. 思路: 出发点的加油站编号设为0,终点的加油站编号设为n,其他加油站编号按距离依次排序. 如果0号加油站的距离!=0,则无法出发,行驶距离为0. 从起点开始,寻找规则为,如果存在油价小 ...
- ubuntu 和windows 分别在anaconda上安装tensorflow
windows下 的anaconda安装tensorflow: 在Anaconda Prompt中:conda install tensorflow python=3.5一直下载失败.总结一下原因可能 ...
- [Java算法分析与设计]--链式堆栈的设计
在上篇文章当中,我们实现了底层为数组的顺序栈.在我之前的文章中也提到过:以数组为数据结构基础在存储数据方面需要一整块连续的内存来存放数据,一旦遇到需要可以动态扩展的功能需求时如果数据量大可能会给虚拟机 ...
- 20155216 2016-2017-2 《Java程序设计》第二周学习总结
教材学习内容总结 类型 short占2字节 int占4字节 long占8字节 byte占1字节,可表示-128~127的整数 char占2字节 boolean不考虑占字节 float占4字节 doub ...