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

Sha*_*hai 5 machine-learning normalization neural-network deep-learning caffe

最近,许多深层架构使用"批量标准化"进行培训.

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

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

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


这个问题有关批标准化只涉及这个问题的一部分,我的目标,并希望更详细的解答.更具体地说,我想知道批量标准化的培训如何影响测试时间预测,即"部署"网络和网络的TEST阶段.

Pru*_*une 5

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

如果您使用网络进行纯粹的测试(没有进一步的训练),那么只需删除这些层即可;他们已经完成了他们的工作。如果您在测试/预测/分类时进行训练,则将它们保留在原处;这些操作根本不会损害您的结果,并且几乎不会减慢前向计算的速度。

至于 Caffe 的细节,Caffe 确实没有什么特别的。计算是一个基本的统计过程,对于任何框架来说都是相同的代数。当然,支持向量和矩阵数学的硬件将会有一些优化,但这些优化只是利用芯片的内置运算。


回复评论

如果您能承受一点额外的训练时间,是的,您会希望在每一层都进行标准化。在实践中,不太频繁地插入它们(例如,每 1-3 次启动)就可以很好地工作。

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