目录

  • 声明
  • 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​=WlT​Hl−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∏l​Wi​
    可以看出,如果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(WlT​Hl−1​)=σl​1​(WlT​Hl−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​σl​1​
    多层累计后的梯度为:
    ∂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∏l​Wi​σi​1​
    可以看出,使用BN后,在反向传播时,使用1σi\frac{1}{\sigma_i}σi​1​对梯度进行了缩放。如果WiW_iWi​较小,则WiTHl−1W_i^TH_{l-1}WiT​Hl−1​较小,则σi{\sigma_i}σi​较小,1σi\frac{1}{\sigma_i}σi​1​较大,Wi1σlW_i\frac{1}{\sigma_l}Wi​σl​1​比WiW_iWi​大,实现了放缩。如果WiW_iWi​较大,也是同理。为什么WiTHl−1W_i^TH_{l-1}WiT​Hl−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的作用及原理相关推荐

  1. Batch Normalization详解(原理+实验分析)

    Batch Normalization详解(原理+实验分析) 1. 计算过程 2. 前向传播过程 3. 反向传播过程 4. 实验分析 4.1 实验一:验证有没有BatchNorm下准确率的区别 4.2 ...

  2. 深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用

    深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用 前言 一.Batch Normalization是什么? 1.1 Interna ...

  3. Batch Normalization的作用

    在深度神经网络训练中,Batch Normalization有诸多非常强大的作用和效果:无论使用哪种激活功能或优化器,BN都可加快训练过程并提高性能:解决梯度消失的问题:规范权重:优化网络梯度流... ...

  4. Batch Normalization原理与实战

    作者:天雨粟 链接:https://zhuanlan.zhihu.com/p/34879333 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 前言 本期专栏主要来从 ...

  5. Batch Normalization深入理解

    Batch Normalization深入理解 1. BN的提出背景是什么? 统计学习中的一个很重要的假设就是输入的分布是相对稳定的.如果这个假设不满足,则模型的收敛会很慢,甚至无法收敛.所以,对于一 ...

  6. 【深度学习】Batch Normalization(BN)超详细解析

    单层视角 神经网络可以看成是上图形式,对于中间的某一层,其前面的层可以看成是对输入的处理,后面的层可以看成是损失函数.一次反向传播过程会同时更新所有层的权重W1,W2,-,WL,前面层权重的更新会改变 ...

  7. 数据处理-Batch Normalization

    今年过年之前,MSRA和Google相继在ImagenNet图像识别数据集上报告他们的效果超越了人类水平,下面将分两期介绍两者的算法细节. 这次先讲Google的这篇<Batch Normali ...

  8. 吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)

    简介和作用 Batch Normalization会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会扩大,工作效果也很好,同时也能使你更容易地训练深层网络. 针对一个单层 ...

  9. Batch Normalization(BN)超详细解析

    单层视角 神经网络可以看成是上图形式,对于中间的某一层,其前面的层可以看成是对输入的处理,后面的层可以看成是损失函数.一次反向传播过程会同时更新所有层的权重W1,W2,-,WL,前面层权重的更新会改变 ...

最新文章

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

热门文章

  1. ustc小道消息20220122
  2. 火爆 GitHub 的《机器学习 100 天》,有人把它翻译成了中文版!
  3. 斯坦福CS231n项目实战(三):Softmax线性分类
  4. VTK修炼之道78:交互与拾取_点拾取
  5. (char*)malloc(sizeof(char))有什么用,为什么要这么写——简单介绍指针
  6. 转sql exists和not exists用法
  7. Oracle 根据字符串的长度排序
  8. Linux期末复习编程题
  9. Netty的引用计数对象
  10. 操作系统(三十二)内存的基础常识