深度学习中的 BN (batchNormalization)理解

CNN 三大算子: CONV + BN +RELU

1、为什么 BN

指导思想:
机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的。
具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律。

具体原因:
随着网络加深,数据经过激活层后趋向两侧,梯度趋于消失,分布在敏感激活区域(中间部分)的数据减少。不利于网络收敛。BN 将数据从新拉回标准正态分布。
深度学习中的 BN (batchNormalization)理解

如何 BN

减均值,除方差,乘scale, 加shift
深度学习中的 BN (batchNormalization)理解

3、反归一化

归一化有好有坏,如何取舍,最好让网络自己学习决定

反 Normalize : 乘scale, 加shift

反向操作, 将 normalize 后的数据再扩展和平移. 原来这是为了让神经网络学习扩展参数 gamma, 和 平移参数 β。

这样就可以用学习得到的 gamma 和 belt 来抵消一些 没有用的normalization 的操作.

核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢

BN 缺陷:
但是需要计算均值与方差,不适合动态网络或者RNN。计算均值方差依赖每批次,因此数据最好足够打乱

4、BatchNorm的推理(Inference)过程

问题:推理只输入一个instance, 对其他 batch 数据无感,如何求 mean 和 var ?
方案:用全局统计量代替 Mini-Batch数据的统计量。全局 mean 和 var 在训练过程就统计好,保存。

训练时:
深度学习中的 BN (batchNormalization)理解推理时,等价:

深度学习中的 BN (batchNormalization)理解
所以BN 层有4个参数,保留了2个固定统计参数 和 两个学习参数;只做一次运算,运算速度很快。

BN 运算速度取决节点个数。

上一篇:pytorch学习笔记(10)


下一篇:batchnorm原理及代码详解