Internal Covariate Shift
ICS:由于网络参数变化,引起内部节点(输入)数据分布发生变化的过程
网络中层与层之间高度耦合,具有强关联性
- 网络中任意层都可以视为单独网络
- 上层输入可视为作为当前层外部输入
随训练进行,网络中参数不断发生改变
- 任意层中参数变化会导致之后层输入发生改变
- 高层需要不断适应输入分布的改变,即其输入分布性质影响
该层训练
- 由此导致模型训练困难
负面影响
- 还可以使用非饱和激活函数ReLU等避免陷入梯度饱和区
Batch Normalization
Batch Normalization:规范化batch数据,使样本各维度
标准化,即均值为0、方差为1
- $B$:mini-batch
- $z, y$:某层输入向量、规范化后输入向量
(即以个神经元中激活前标量值$z=Wx+b$为一维)
- $\odot$:逐元素乘积
- $E(x)$:均值使用移动平均均值
- $Var(x)$:方差使用移动平均无偏估计
- $\gamma, \beta$:待学习向量,用于恢复网络的表示能力
- $\epsilon$:为数值计算稳定性添加
- Whitening:白化,对输入数据变换使得各特征同均值、
同方向、不相关,可以分为PCA白化、ZCA白化
训练
规范化在每个神经元内部非线性激活前$z=Wu$进行,而不是
[也]在上一层输出$u$上进行,即包含BN最终为
- $act$:激活函数
- 偏置$b$:可以被省略,BN中减去均值
- $u$的分布形状可以在训练过程中改变
- 而$u$两次正则化无必要
- $z=Wu$分布更可能对称、稠密、类似高斯分布
以batch统计量作为整体训练样本均值、方差估计
- 每层均需存储均值、方差的移动平均统计量用于测试时
归一化测试数据
对卷积操作,考虑卷积特性,不是只为激活函数(即卷积核)
学习$\gamma, \beta$,而是为每个feature map学习
(即每个卷积核、对每个特征图层分别学习)
预测
用途
- BN通过规范化输入数据各维度分布减少ICS,使得网络中每层
输入数据分布相对稳定
实现网络层与层之间的解耦
- 方便迁移学习
- 加速模型学习速度:后层网络无需不断适应输入分布变化,
利于提高神经网络学习速度
降低模型对网络超参数、初始值敏感度,使得网络学习更加稳定
- 激活函数函数输入不受权重$W$放缩影响
- 梯度反向传播更稳定,权重$W$的Jacobian矩阵将包含接近
1的奇异值,保持梯度稳定反向传播
允许网络使用饱和激活函数(sigmoid、tanh等),而不至于
停滞在饱和处,缓解梯度消失问题
- 深度网络的复杂性容易使得网络变化积累到上层网络中,
导致模型容易进入激活函数梯度饱和区
有正则化作用,提高模型泛化性能,减少对Dropout的需求
- 不同batch均值、方差有所不同,为网络学习过程增加随机
噪声
- 与Dropout关闭神经元给网络带来噪声类似,一定程度上
有正则化效果
Layer Normalization
层归一化:假设非线性激活前的输入随机变量分布接近,可以直接
基于每层所有非线性激活前输入估计均值、方差
- $h^l$:第$l$隐层激活前值
- $\mu^l, \sigma^l$:第$l$隐层对应LN均值、方差
(标量,是同层神经元激活前值统计量)