Batch Normalization论文阅读笔记
分类:
文章
•
2024-02-01 11:48:58
BN论文
BN优势
BN由来
- 什么是Internal Covariate Shift : 在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”
- 白化 : 就是对输入数据分布变换到0均值,单位方差的正态分布。白化只是作用输入图像。那么对于隐藏层来说,每个隐藏层的输出即为下一层的输入,由此可以延升对每个隐层输出做whiten,所以BN可以理解为对深层神经网络每个隐层神经元的**之做简化版本的白化操作。
BN原理
- 模型训练缓慢一般是由于整体分布在训练过程中逐渐往非线性函数的取值区间的上下限两端靠近,而上下限两端对应的偏导值很小,从而减缓了收敛(以sigmoid为例)。
- BN通过将输入强行拉回均值为0方差为1的正态分布,使得**落在非线性函数的线性区域,即对输入比较敏感的区域。从而在一定程度上避免梯度消失的问题。图像解释更加直观,可以参照【深度学习】深入理解Batch Normalization批标准化
- BN使得**落在非线性函数的线性区域,这会导致网络表达能力下降(多层线性叠加其实等效一层线性,无法拟合强表达能力的函数)。因此BN对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift),通过引入可学习的两个变量,使得分布并不是总是遵循标准正太,从而引入非线性。其实核心思想就是具体应该是标准正太还是偏向原始分布让模型自己去学习。
BN一些细节点
- 训练的时候
- 预测的时候
- 由于预测的时候输入是单个样本,此时如何BN呢?对训练过程中记录的所有Batch的均值和方差取期望得到整体数据的均值和方差,以此参数来计算;同时由于每个神经元已经又训练好的scale和shift参数,直接用就行。
- CNN中的BN
- 假设输入的维度为(n,h,w,c),n表示batch-size,h,w为高宽,c为通道数;针对CNN,bn是在n,h,w这三个维度计算均值和方差的;因为在CNN中BN也采用了权值共享的策略,将每个feature map看成一个特征,通道数即为特征的个数。假如某一层卷积层有6个特征图,每个特征图的大小是100*100,这样就相当于这一层网络有6*100*100个神经元,如果采用BN,就会有6*100*100个参数γ、β,这样岂不是太恐怖了。因此卷积层上的BN使用,其实也是使用了类似权值共享的策略,把一整张特征图当做一个神经元进行处理。
- BN解决梯度弥散的公式化解释

- 加了BN后,BP不会受到w的尺度影响。比如前向有:
,则反向为:
- 加了BN后:
参考
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- 【深度学习】深入理解Batch Normalization批标准化
- Batch Normalization 学习笔记
- 深度学习中 Batch Normalization为什么效果好?