machine-learning - "batch normalizaiton"是什么?为什么使用它?它如何影响预测?

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

最近,许多深度架构使用“批量归一化”进行训练。

什么是“批量归一化”?它在数学上有什么作用?它对培训过程有何帮助?

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

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

<小时/>

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

最佳答案

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

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

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

<小时/>

回复评论

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

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

关于machine-learning - "batch normalizaiton"是什么?为什么使用它?它如何影响预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41269570/

相关文章:

Android 移动视觉 API 和 NN API

R mlr - 包装器特征选择+超参数调整,无需嵌套交叉验证?

machine-learning - 使用带注释的文档创建注释任务

python - 没有所有连接的神经网络层

machine-learning - Keras:具有一个输入和两个输出的模型,在不同数据上联合训练(半监督学习)

python - keras 如何定义 "accuracy"和 "loss"?

machine-learning - 除非使用 PyTorch clone(),否则列表未正确填充

python - 神经网络输出与输出层偏置权重完全相关(Keras)

artificial-intelligence - Q-Learning 与神经网络相结合(有益的理解)

machine-learning - 在多个类上进行训练时如何在 Keras 中获取标签 id?