为什么在应用 Batch Normalization 时使用 batch 来预测是作弊?

Why using batch to predict when applying Batch Normalization is cheating?

post on Quora 中,有人说:

At test time, the layer is supposed to see only one test data point at a time, hence computing the mean / variance along a whole batch is infeasible (and is cheating).

但是只要在训练过程中网络没有看到测试数据,使用几张测试图像不是可以吗?

我的意思是,我们的网络被训练为使用批次进行预测,那么给它批次有什么问题?

如果有人能解释我们的网络从批次中获得了哪些它不应该拥有的信息,那就太好了:)

谢谢

这个说法很简单,你训练你的模型,让它对某些任务有用。在 classification 中,任务通常是 - 你得到 一个数据点 并输出 class,没有批处理。当然,在一些实际应用中,你可以有批次(比如来自同一用户的许多图像等)。就是这样 - 它 依赖于应用程序 ,所以如果你想声明一些关于学习模型的东西 "in general" 你不能假设在测试期间可以访问批次,就这些了。

But as long as testing data have not been seen by the network during training isn't it ok to use several testing images ?

首先,使用batch进行测试是可以的。其次,在测试模式下,batchnorm 不会计算 测试批次的均值或方差。它采用已有的均值和方差(我们称它们为 musigma**2),它们仅基于训练数据计算。测试模式batch norm的结果是所有张量x归一化为(x - mu) / sigma.

At test time, the layer is supposed to see only one test data point at a time, hence computing the mean / variance along a whole batch is infeasible (and is cheating)

我只是浏览了 Quora 的讨论,可能这句话有不同的上下文。但就其本身而言,它 是错误的 。无论批次是什么,所有张量都将经历相同的转换,因为 musigma 在测试期间不会改变,就像所有其他变量一样。所以那里没有作弊。