神经网络中的批量归一化

Posted

技术标签:

【中文标题】神经网络中的批量归一化【英文标题】:batch normalization in neural network 【发布时间】:2015-07-10 20:03:08 【问题描述】:

我对 ANN 还是很陌生,我只是在阅读批量标准化论文 (http://arxiv.org/pdf/1502.03167.pdf),但我不确定我是否了解他们在做什么(更重要的是,为什么它有效)

假设我有两层 L1 和 L2,其中 L1 产生输出并将它们发送到 L2 中的神经元。批量归一化只取 L1 的所有输出(即每个神经元的每个输出,得到一个全连接网络的|L1| X |L2| 数字的整体向量),将它们归一化为平均值为 0 和 SD 为 1,然后将它们喂给 L2 中各自的神经元(加上他们在论文中讨论的 gamma 和 beta 的线性变换)?

如果确实如此,这对 NN 有何帮助?常数分布有什么特别之处?

【问题讨论】:

【参考方案1】:

在网络的标准 SGD 训练期间,输入到隐藏层的分布会发生变化,因为它之前的隐藏层也在不断变化。这被称为协变量偏移,可能是一个问题;例如,参见here。

众所周知,如果训练数据被“白化”,即以每个分量具有高斯分布并且独立于其他分量的方式进行变换,神经网络的收敛速度会更快。参见论文中引用的论文 (LeCun et al., 1998b) 和 (Wiesler & Ney, 2011)。

作者的想法是现在不仅将这种白化应用于输入层,还应用于每个中间层的输入。在整个输入数据集上执行此操作太昂贵了,因此他们改为批量执行。他们声称这可以大大加快训练过程,也可以作为一种正则化。

【讨论】:

以上是关于神经网络中的批量归一化的主要内容,如果未能解决你的问题,请参考以下文章

第十八节,TensorFlow中使用批量归一化

批归一化(Batch Normalization)

深度学习面试题22:批量归一化在实践中的应用

Batch Normalization:批量归一化

动手学pytorch-Batch Norm

MATLAB中神经网络建模中的归一化和非归一化