什么是“批量标准化”?为什么要用呢?它如何影响预测?

时间:2016-12-21 18:30:04

标签: machine-learning neural-network deep-learning normalization caffe

最近,许多深层架构使用“批量规范化”进行培训。

什么是“批量标准化”?它在数学上做了什么?它以什么方式帮助培训过程?

培训期间如何使用批次标准化?它是插入模型的特殊层吗?我需要在每一层之前标准化,还是只需要一次?

假设我使用批量标准化进行训练。这会影响我的测试时间模型吗?我应该用“部署”网络中的其他/等效层/操作替换批量规范化吗?

关于批量标准化的

This question仅涵盖了这个问题的一部分,我的目标是希望得到更详细的答案。更具体地说,我想知道批量标准化的培训如何影响测试时间预测,即“部署”网络和网络的TEST阶段。

4 个答案:

答案 0 :(得分:4)

批量标准化适用于可能遭受有害漂移的层。数学很简单:找到每个分量的均值和方差,然后应用标准变换将所有值转换为相应的Z分数:减去均值并除以标准差。这可以确保组件范围非常相似,这样他们每个人都有机会影响训练增量(在反支柱中)。

如果您正在使用网络进行纯测试(无需进一步培训),那么只需删除这些图层;他们已经完成了自己的工作。如果你在测试/预测/分类时进行训练,那么就把它们留在原地;这些操作根本不会损害你的结果,并且几乎不会减慢前向计算的速度。

至于Caffe的细节,Caffe真的没什么特别的。计算是一个基本的统计过程,与任何框架都是相同的代数。当然,对支持向量和矩阵数学的硬件进行一些优化,但这些优化只需要利用芯片的内置操作。

回应评论

如果你能承受一点额外的训练时间,是的,你想要在每一层进行标准化。在实践中,不那么频繁地插入它们 - 例如,每1-3次插入 - 都可以正常工作。

你可以在部署中忽略这些因为他们已经完成了他们的工作:当没有反向传播时,没有权重漂移。此外,当模型在每个批次中只处理一个实例时,Z分数始终为0:每个输入都是批次的平均值(即整个批次)。

答案 1 :(得分:2)

作为Prune's answer的补充,在测试期间,批量标准化层将使用来自不同训练迭代的平均channel_wise_bn_layer值来标准化其输入(减去平均值并除以标准偏差)。

原来google's batch normalization paper只说它应该是移动平均法,但没有提供更全面的解释。 caffe和tensorflow都使用指数移动平均法。

根据我的经验,simple moving average method通常优于指数移动平均法,至于验证准确度(可能需要更多实验)。对于比较,您可以参考here(我尝试了batch norm中的两个移动平均方法实现,与BVLC/caffe中的UITesting Failure - Failed to get snapshot within 15.0s 层进行了比较。

答案 2 :(得分:1)

值得this link有一个在cifar10分类网中使用"BatchNorm"图层的示例。

具体来说,它会在TRAINTEST阶段之间拆分:

layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: false
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  include {
    phase: TRAIN
  }
}
layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: true
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  include {
    phase: TEST
  }
}

答案 3 :(得分:1)

批量归一化解决了一个叫做“内部协变量移位”的问题。 要了解它为什么有帮助,您首先需要了解协变量偏移实际上是什么。

“协变量”只是输入“特征”的另一个名称,通常写成 X。协变量偏移意味着特征的分布在训练/测试数据的不同部分是不同的,打破了大多数使用的 iid 假设毫升。此问题在医疗数据(您有来自一个年龄段的训练样本,但您想对来自另一个年龄段的数据进行分类)或金融(由于市场条件变化)中经常发生。

“内部协变量偏移”是指在神经网络中发生的协变量偏移,即从(比如说)第 2 层到第 3 层。发生这种情况是因为,随着网络的学习和权重的更新,a网络中的特定层发生了变化。这会迫使更高层适应这种漂移,从而减慢学习速度。

BN 有助于使网络中间层之间流动的数据看起来像白化数据,这意味着您可以使用更高的学习率。由于 BN 具有正则化效果,这也意味着您通常可以移除 dropout(这很有帮助,因为 dropout 通常会减慢训练速度)。