批量归一化 Batch Normalization

批量归一化 Batch Normalization

x^(k)=x(k)E[x(k)]Var[x(k)]

想要单位高斯**,那么进行批量归一化,用均值和方差来进行归一化。训练开始时才设置这个值,而不是在权重初始化的时候,以便我们能够在每一层都有很好的单位高斯分布,希望在训练的时候能够一直保持。

批量归一化 Batch Normalization

总结一下:批量归一化的思想

我们提供输入,然后计算小批量均值,对每个输入的小批量都做这个操作。然后计算方差,通过均值和方差进行归一化,然后还有额外的缩放和平移因子。从而改进了整个网络的梯度流,它还具有更高的鲁棒性,它能够在更广泛的学习率和不同初始值下工作。所以人们发现,一旦使用批量归一化,训练会变得更加容易。这就是为什么你应该这样做。

另一个需要指出的是,你也可以把它看做正则化的一种方法,因为每层的输出,每个**值和这些输出都来源于输入X以及批量中被采样的其他样本。因为你将通过这一批样本的经验化均值对输入数据进行归一化,所以,它不在对给定的训练样本提供确定性的值,而是将这些输入放入批中,因为它不再是确定值,就像往X中加入一些抖动,从而实现正则化的效果。

  • Improves gradient flow through the network
  • 改进了整个网络的梯度流
  • Allows higher learning rates
  • 允许更高的学习率
  • Reduces the strong dependence on initialization
  • 在初始化的时候减少强依赖性
  • Acts as a form of regularization in a funny way, and slightly reduces the need for dropout, maybe
  • 看做正则化的一种方法,稍微减少输出的需求

批量归一化 Batch Normalization