BN 小结

  1. 问题: 即使使用He initialization和ELU, 也不能保证在训练过程中, 出现梯度消失/爆炸
  2. 原因: 在训练过程中, 随着上层的参数发生改变, 每层输入的分布也会随之改变 (内部协变量偏移问题)
  3. 解决方法: 在训练过程中, 对每层输入激活函数前加入一个运算, 用来对输入进行标准化(均值(shifting), 方差(scaling))
    • 因此, 每层会多两个参数, 这两个参数通过训练时的小批量样本进行计算
  4. 预测: 在测试过程中, 使用全部的训练样本计算出经验均值和方差, 然后对测试数据归一化
    • 因此, BN层一共四个参数, 训练过程的(scale, offset), 测试过程的(mean, std)
  5. 非常有效的解决梯度消失问题, 对初始化方法不敏感, 明显的提高训练时间
    • BN也有正则化效果, 使得不用依赖其他的正则化方法(Dropout)
  6. 不足: 训练和测试时的计算量增大, 因此对于预测时间有要求的时候需要考虑
    • 训练时要计算小批量训练样本的offset和scale
    • 测试时要计算经验均值和方差, 并对测试数据标准化
  7. 其他
    1. 简单点说: BN就是对每层的输入进行中心化和标准化
    2. BN会加大训练时的计算量, 但是收敛过程会更快(迭代的次数更少)
    3. BN相当于在两层网络的中间加入一个标准化处理层, 用来解决输入与输出方差的差异
    4. ReLU和None activity function不需要scale(下层权重会受影响)

你可能感兴趣的:(BN 小结)