Batch Normalization

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$:为数值计算稳定性添加
  • BN可以视为whitening的简化

    • 简化计算过程:避免过高的运算代价、时间
    • 保留数据信息:未改变网络每层各特征之间相关性
  • BN层引入可学习参数$\gamma, \beta$以恢复数据表达能力

    • Normalization操作缓解了ICS问题,使得每层输入稳定 ,也导致数据表达能力的缺失
    • 输入分布均值为0、方差为1时,经过sigmoid、tanh激活 函数时,容易陷入其线性区域
    • $\gamma = \sqrt {Var(z)}, \beta = E(z)$时为等价变换 ,并保留原始输入特征分布信息
  • Whitening:白化,对输入数据变换使得各特征同均值、 同方向、不相关,可以分为PCA白化、ZCA白化

训练

  • 规范化在每个神经元内部非线性激活前$z=Wu$进行,而不是 [也]在上一层输出$u$上进行,即包含BN最终为

    • $act$:激活函数
    • 偏置$b$:可以被省略,BN中减去均值
    • $u$的分布形状可以在训练过程中改变
    • 而$u$两次正则化无必要
    • $z=Wu$分布更可能对称、稠密、类似高斯分布
  • 以batch统计量作为整体训练样本均值、方差估计

    • 每层均需存储均值、方差的移动平均统计量用于测试时 归一化测试数据
  • 对卷积操作,考虑卷积特性,不是只为激活函数(即卷积核) 学习$\gamma, \beta$,而是为每个feature map学习 (即每个卷积核、对每个特征图层分别学习)

预测

  • 预测过程中各参数(包括均值、方差)为定值,BN仅仅对数据 做了线性变换

    • 使用训练总体的无偏统计量对测试数据归一化 (训练时存储)

    • 还可以使用样本指数加权平均统计量

用途

  • BN通过规范化输入数据各维度分布减少ICS,使得网络中每层 输入数据分布相对稳定
  • 实现网络层与层之间的解耦

    • 方便迁移学习
    • 加速模型学习速度:后层网络无需不断适应输入分布变化, 利于提高神经网络学习速度
  • 降低模型对网络超参数、初始值敏感度,使得网络学习更加稳定

    • 简化调参过程
    • 允许使用更大的学习率提高学习效率
    • $a$:假设某层权重参数变动$a$倍
    • 激活函数函数输入不受权重$W$放缩影响
    • 梯度反向传播更稳定,权重$W$的Jacobian矩阵将包含接近 1的奇异值,保持梯度稳定反向传播
  • 允许网络使用饱和激活函数(sigmoid、tanh等),而不至于 停滞在饱和处,缓解梯度消失问题

    • 深度网络的复杂性容易使得网络变化积累到上层网络中, 导致模型容易进入激活函数梯度饱和区
  • 有正则化作用,提高模型泛化性能,减少对Dropout的需求

    • 不同batch均值、方差有所不同,为网络学习过程增加随机 噪声
    • 与Dropout关闭神经元给网络带来噪声类似,一定程度上 有正则化效果

Layer Normalization

层归一化:假设非线性激活前的输入随机变量分布接近,可以直接 基于每层所有非线性激活前输入估计均值、方差

  • $h^l$:第$l$隐层激活前值
  • $\mu^l, \sigma^l$:第$l$隐层对应LN均值、方差 (标量,是同层神经元激活前值统计量)
  • 相对于BN,其适应范围更广

    • 循环神经网络中,BN无法处理长于训练序列的测试序列
    • BN无法应用到在线学习、超大分布式模型任务,此时训练 batch较小,计算的均值、方差无法有效代表训练总体
  • LN假设非线性激活前输入随机变量分布接近,而CNN网络中图像 边缘对应kernel大量隐藏单元未被激活,假设不成立,所以 CNN网络中LN效果没有BN效果好

激活函数

指数类

Sigmoid

将实数映射到(0, 1)区间

  • $z= wx+b$
  • 用途

    • 隐层神经元输出
    • 二分类输出
  • 缺点

    • 激活函数计算量大,BP算法求误差梯度时,求导涉及除法
    • 误差反向传播时容易出现梯度消失
    • 函数收敛缓慢

Hard_Sigmoid

计算速度比sigmoid激活函数快

  • $z= wx+b$

Softmax

主要用于多分类神经网络输出

  • $z_i = w_i x + b_i$:$(w_i, b_i)$组数同分类数量,和输入 $x$维度无关

  • $K$:分类数目

  • 工程意义:指数底

    • 可导$max$:拉开数值之间差距
    • 特征对输出结果为乘性:即$z_i$中输入增加会导致输出 随对应权重倍数增加
    • 联合交叉熵损失避免导数溢出,提高数值稳定性
  • 理论意义:概率论、最优化

    • softmax符合最大熵原理
    • 假设各标签取值符合多元伯努利分布,而softmax是其 link functiond的反函数#todo
    • 光滑间隔最大函数
  • Softmax回归参数$(w_i, b_i$$冗余,可以消去一组

Softplus

  • $z = wx + b$

Tanh

双曲正切函数

  • $z = wx + b$
  • $\frac{\partial tanh(z)}{\partial z} = (1 - tanh(z))^2$ :非常类似普通正切函数,可以简化梯度计算

线性类

Softsign

ReLU

Rectfied Linear Units:修正线性单元

LeakyReLU

Leaky ReLU:带泄露的修正线性

  • $\alpha$:超参,建议取0.01
  • 解决了$z < 0$时进入死区问题,同时保留了ReLU的非线性特性

Parametric ReLU

PReLU:参数化的修正线性

  • $\alpha$:自学习参数(向量),初始值常设置为0.25,通过 momentum方法更新

ThreshholdReLU

带阈值的修正线性

Linear

线性激活函数:不做任何改变

线性指数类

Exponential Linear Unit

Elu:线性指数

  • $\alpha$:超参
  • $x \leq 0$时,$f(x)$随$x$变小而饱和
    • ELU对输入中存在的特性进行了表示,对缺失特性未作定量 表示
  • 网络深度超超过5层时,ELU相较ReLU、LReLU学习速度更快、 泛化能力更好

Gausssion Error Liear Unit

GELU:ReLU的可导版本

Selu

可伸缩指数线性激活:可以两个连续层之间保留输入均值、方差

  • 正确初始化权重:lecun_normal初始化
  • 输入数量足够大:AlphaDropout
  • 选择合适的$\alpha, scale$值

梯度消失

激活函数导数太小($<1$),压缩误差(梯度)变化

Dropout

Dropout

Dropout训练时根据随机隐藏部分神经元、对应连接边避免 过拟合

固定概率丢弃

Dropout最简单方法:设置固定概率p,对每个神经元以概率p判定 是否需要保留

  • $d(x)$:丢弃函数
  • $m \in {0, 1}^d$:丢弃掩码,通过概率为p的伯努利 分布随机生成
  • $p$可以设置为0.5,对大部分网络、任务比较有效

    • 此时随机生成多的网络最具多样性
  • 训练时

    • 激活神经元数量为原来的p倍
    • 每个batch分别进行drop,相当于对每个batch都有独特网络
  • 测试时

    • 所有神经元都被激活,造成训练、测试时网络输出不一致, 需将每个神经元输出乘p避免
    • 也相当于把不同网络做平均
  • 在预测时,类似bagging技术将多个模型组合

    • 只是类似,各个drop后的子网并不独立,在不同子网中相同 神经元的权重相同
    • 多个模型组合组合可以一定程度上抵消过拟合
    • 因为在训练时子网中部分神经元被drop,剩余部分权重相较 完全网络有$\frac 1 {1-p}$,所以在完整网络中,各部分 权重需要$ * (1-p)$
  • 讲道理应该是隐藏部分神经元而不是连接,否则会使神经元偏向 某些输入,还不如隐藏部分神经元,这样可以让神经元随机降低 样本权重,理论上能减弱过拟合

丢弃方法

  • 输入层神经元丢弃率更接近1,使得输入变化不会太大

    • 输入层神经元丢失时,相当于给数据增加噪声,提高网络 稳健性
  • 循环神经网络丢弃

    • 不能直接丢弃隐状态,会损害循环网络在时间维度上的记忆 能力
    • 简单方法:可以考虑对非循环连接进行随机丢弃
    • 变分丢弃法:根据贝叶斯对丢弃法是对参数的采样解释, 采样参数需要每个时刻保持不变
      • 需要对参数矩阵的每个元素随机丢弃
      • 所有时刻使用相同的丢弃掩码

解释

  • 集成学习解释

    • 每次丢弃,相当于从原网络采样得到子网络
    • 每次迭代,相当于训练不同的子网络,共享原始网络参数
    • 最终网络可以近似看作是集成了指数个不同网络的组合模型
  • 贝叶斯学习解释

    • 对需要学习的网络$y = f(x, \theta)$,贝叶斯学习假设 参数$\theta$为随机向量
    • 设先验分布为$q(\theta)$,贝叶斯方法预测为

    • $f(x, \theta_m)$:第$m$次应用丢弃方法的网络
    • $\theta_m$:对全部参数的采样