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,前面层权重的更新会改变 ...
最新文章
- Centos6.X升级glibc解决“libc.so.6 version GLIBC_2.14 not found”报错问题
- word 2007 文档中添加文件
- ES6新增数据类型符号(2):共享符号与知名符号
- spring—aop
- mysql解决编码问题
- 用AXIS2发布WebService的方法 使用eclipse插件生成服务端和客户端
- 人工智能机器学习算法
- 应用统计学学什么科目_统计学考研初试都要考哪些科目?
- Mac屏幕截图软件SnapNDrag激活教程分享
- amaze ui 的使用
- 防火墙开放21端口linux,linux防火墙开放80,3306,21,443端口
- HTML+CSS实现按钮手风琴效果 | 青训营笔记
- Oracle--使用同义词
- 微信支付 postman_小刘同学微信支付接入全笔记
- Linux实用技巧——paste横向合并文件内容
- 微信小程序运行及更新机制
- TTL,RTT,MSL的定义
- 京东必考JVM 问题诊断快速入门
- 东北天(ENU)和北东地(NED)
- 隔空投送找不到_为什么苹果的隔空投送突然搜不到对方了?