Batch Normalization的作用及原理
目录
- 声明
- BN是什么[1]
- 为什么提出BN[1, 2]
- BN的作用及原理
- 加速训练,提高收敛速度[1]
- 缓解梯度消失(梯度爆炸)[3]
- 缓解过拟合[4]
- 其他相关问题
- BN和激活函数的顺序问题[5]
- 使用ReLU还需要用BN吗[6, 7]
声明
由于学习本篇博客的内容时翻阅了很多资源,如知乎、他人博客等,很多内容已经不记得是在哪学到的了,也没有办法一一列举了,能列举的我尽量列举,如有侵权,请联系我删除,谢谢。
BN是什么[1]
BN是谷歌在这篇文章中提出的。具体的操作是,在每次SGD时,对mini-batch进行规范化操作,使结果的均值为0,方差为1。再经过scale+shift操作,尽量去还原BN前的输出。
为什么提出BN[1, 2]
先看一下论文的题目《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,可以看出,BN的动机是降低Internal Covariate Shift(以下简称ICS)来加速网络训练,下面解释什么是ICS。
在训练过程中,由于不同层的参数是不断变化的,这会导致,对于不同层,输入的分布是不断变化的。随着网络层数的加深,高层输入的分布会与原始输入样本的分布存在较大差异。以上便是ICS问题。
由于ICS问题,模型的优化难度变大,收敛速度慢。
BN的作用及原理
加速训练,提高收敛速度[1]
一方面,BN通过固定层间数据分布的方法,解决了ICS问题,从而提高了模型的训练速度。另一方面,由于BN能够缓解梯度消失(梯度爆炸),可以提高模型的收敛速度。
缓解梯度消失(梯度爆炸)[3]
- 不使用BN
在不使用BN时,对于某一层的前向传播,应有:
Hl=WlTHl−1H_l=W_l^TH_{l-1}Hl=WlTHl−1
那么该层的反向传播梯度为:
∂Hl∂Hl−1=Wl\frac{\partial H_l}{\partial H_{l-1}}=W_l∂Hl−1∂Hl=Wl
多层累计后的梯度为:
∂Hl∂Hk=∏i=k+1lWi\frac{\partial H_l}{\partial H_k}=\prod_{i=k+1}^lW_i∂Hk∂Hl=i=k+1∏lWi
可以看出,如果WiW_iWi总是较小的,经过不断的连乘,梯度呈指数级下降,即梯度消失。反之,如果WiW_iWi总是较大的,会发生梯度爆炸。 - 使用BN
带有BN的前向传播为:
Hl=BN(WlTHl−1)=1σl(WlTHl−1−μl)H_l=BN(W_l^TH_{l-1})=\frac{1}{\sigma_l}(W_l^TH_{l-1}-\mu_l)Hl=BN(WlTHl−1)=σl1(WlTHl−1−μl)
则反向传播的梯度为:
∂Hl∂Hl−1=Wl1σl\frac{\partial H_l}{\partial H_{l-1}}=W_l\frac{1}{\sigma_l}∂Hl−1∂Hl=Wlσl1
多层累计后的梯度为:
∂Hl∂Hk=∏i=k+1lWi1σi\frac{\partial H_l}{\partial H_k}=\prod_{i=k+1}^lW_i\frac{1}{\sigma_i}∂Hk∂Hl=i=k+1∏lWiσi1
可以看出,使用BN后,在反向传播时,使用1σi\frac{1}{\sigma_i}σi1对梯度进行了缩放。如果WiW_iWi较小,则WiTHl−1W_i^TH_{l-1}WiTHl−1较小,则σi{\sigma_i}σi较小,1σi\frac{1}{\sigma_i}σi1较大,Wi1σlW_i\frac{1}{\sigma_l}Wiσl1比WiW_iWi大,实现了放缩。如果WiW_iWi较大,也是同理。为什么WiTHl−1W_i^TH_{l-1}WiTHl−1较小,则σi{\sigma_i}σi较小?举个例子,1,5,10,20,30这组数据的标准差是10.5338,而0.1,0.5,1,2,3这组数据的标准差是1.05338。
缓解过拟合[4]
BN能够缓解过拟合在于引入了noise。对于特定的一层,在某个batch的前向传播过程中,如果添加了BN操作,则会对该层的输出进行normalization,具体如下式:
outputAfter_BN=output−batch_mean(output)batch_variance(output)output_{After\_BN}=\frac{output-batch\_mean(output)}{batch\_variance(output)}outputAfter_BN=batch_variance(output)output−batch_mean(output)
这说明,在每一次训练过程中,即使对于相同的样本,如果在batch中的其他样本发生了变化,batch_mean(output)batch\_mean(output)batch_mean(output)和batch_variance(output)batch\_variance(output)batch_variance(output)就会发生变化。这会导致,相同样本在不同的batch中会产生不同的outputAfter_BNoutput_{After\_BN}outputAfter_BN,相当于对于每个样本都引入了noise。模型为了克服样本的noise,会更加generalize,即降低了过拟合。
其他相关问题
BN和激活函数的顺序问题[5]
现在大多数的模型中都是用BN+ReLU,但是从BN论文的原理上将,其实ReLU+BN似乎能更好的解决ICS问题,下面分析一下两种方式的优缺点。
- BN+ReLU
让ReLU更好的进行特征选择,使其单侧抑制起作用。 - ReLU+BN
更好地解决ICS问题,训练效率更高。
使用ReLU还需要用BN吗[6, 7]
由于ReLU有dead neuron问题,使用BN后可以保证有一定占比的神经元处于激活状态,解决了dying ReLU问题。
[1] https://www.zhihu.com/question/38102762
[2] https://zhuanlan.zhihu.com/p/136701745
[3] https://www.zhihu.com/collection/537883741
[4] https://www.zhihu.com/question/291571486/answer/861428056
[5] https://zhuanlan.zhihu.com/p/113442866
[6] https://www.zhihu.com/question/304603935/answer/544970232
[7] https://www.zhihu.com/question/338802747/answer/784239481
Batch Normalization的作用及原理相关推荐
- Batch Normalization详解(原理+实验分析)
Batch Normalization详解(原理+实验分析) 1. 计算过程 2. 前向传播过程 3. 反向传播过程 4. 实验分析 4.1 实验一:验证有没有BatchNorm下准确率的区别 4.2 ...
- 深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用
深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用 前言 一.Batch Normalization是什么? 1.1 Interna ...
- Batch Normalization的作用
在深度神经网络训练中,Batch Normalization有诸多非常强大的作用和效果:无论使用哪种激活功能或优化器,BN都可加快训练过程并提高性能:解决梯度消失的问题:规范权重:优化网络梯度流... ...
- Batch Normalization原理与实战
作者:天雨粟 链接:https://zhuanlan.zhihu.com/p/34879333 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 前言 本期专栏主要来从 ...
- Batch Normalization深入理解
Batch Normalization深入理解 1. BN的提出背景是什么? 统计学习中的一个很重要的假设就是输入的分布是相对稳定的.如果这个假设不满足,则模型的收敛会很慢,甚至无法收敛.所以,对于一 ...
- 【深度学习】Batch Normalization(BN)超详细解析
单层视角 神经网络可以看成是上图形式,对于中间的某一层,其前面的层可以看成是对输入的处理,后面的层可以看成是损失函数.一次反向传播过程会同时更新所有层的权重W1,W2,-,WL,前面层权重的更新会改变 ...
- 数据处理-Batch Normalization
今年过年之前,MSRA和Google相继在ImagenNet图像识别数据集上报告他们的效果超越了人类水平,下面将分两期介绍两者的算法细节. 这次先讲Google的这篇<Batch Normali ...
- 吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)
简介和作用 Batch Normalization会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会扩大,工作效果也很好,同时也能使你更容易地训练深层网络. 针对一个单层 ...
- Batch Normalization(BN)超详细解析
单层视角 神经网络可以看成是上图形式,对于中间的某一层,其前面的层可以看成是对输入的处理,后面的层可以看成是损失函数.一次反向传播过程会同时更新所有层的权重W1,W2,-,WL,前面层权重的更新会改变 ...
最新文章
- 使用XML作为配置表,WinForm程序读取配置表来动态显示控件
- 世界上手速最快的仿人机器人诞生在韩国!魔术师也要失业了!
- mysql load xml_MySQL的SQL语句 - 数据操作语句(10)- LOAD XML 语句
- 如何保证数据库服务器的安全性
- java xml 文件_Java 对xml文件的读写操作
- 怎么下载并安装python_怎么下载官网python并安装
- [渝粤教育] 广东-国家-开放大学 21秋期末考试财务管理10164k2 (3)
- Ubuntu16.04安装搜狗输入法后有黑边问题的解决方法
- FLEX组件AnyChart实例教程.
- [uboot]在uboot里面添加环境变量使用run来执行
- 修复IE的浮动元素双倍边距Bug
- 潮流设计师创作灵感|是时候设计一下蒸汽波海报了!
- linux系统挂载NTFS格式文件系统
- 关于Nginx的一些优化(突破十万并发)。
- 软件经济工程学重点大纲
- 说出我的故事,献给正在迷茫的你
- 鼠标滑过图片文字遮罩效果
- Google知识集锦
- LSD-SLAM运行过程及报错 “what(): Duration is out of dual 32-bit range“
- 数据可视化分析框架 amCharts 5
热门文章
- USTC English Club Note20171019(2)
- [日常折腾之码上归一]多种编程语言打印当前系统时间
- 《TensorFlow 机器学习方案手册》(附 pdf 和完整代码)
- oracle aced什么资质,ACOUG 中国行—暨Oracle WDP云数据之旅,火热报名中……
- php保存成乱序,PHP实现断点续传乱序合并文件的方法
- tldr一个精简的man手册替代品
- BugkuCTF-Misc:Linux
- JAVA——Map基础知识
- 端口---汇编学习笔记
- Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段