【问题标题】:Why using batch to predict when applying Batch Normalization is cheating?为什么在应用 Batch Normalization 时使用批处理进行预测是作弊?
【发布时间】:2017-07-13 08:24:19
【问题描述】:

post on Quora,有人说:

在测试时,该层应该只看到一个测试数据点 一次,因此计算整个批次的均值/方差是 不可行(并且在作弊)。

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

我的意思是,我们的网络已经过训练以使用批次进行预测,那么给它分配批次有什么问题?

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

谢谢

【问题讨论】:

  • 您可能希望通过Cross Validated 接手这个问题,因为这更像是一个纯粹的机器学习问题。

标签: machine-learning neural-network deep-learning training-data batch-normalization


【解决方案1】:

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

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

在测试时,层应该一次只能看到一个测试数据点,因此计算整个批次的均值/方差是不可行的(并且是作弊)

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

【讨论】:

    【解决方案2】:

    声明很简单,你训练你的模型,让它对某些任务有用。而在分类中,任务通常是 - 你得到一个数据点然后你输出类,没有批次。当然,在一些实际应用中,您可以批量处理(比如来自同一用户的许多图像等)。就是这样 - 它依赖于应用程序,因此,如果您想对学习模型提出“一般性”的声明,您不能假设在测试期间可以访问批次,仅此而已。

    【讨论】:

    • 好吧,我明白了。但是那家伙说这是作弊,好像在测试期间分批可以提高结果一样。是吗?
    • 在某种程度上它可能会有所帮助,但通常所有不正确的东西都被认为是作弊,无论它是否有帮助,因为它只会使结果不可靠,仅此而已。
    猜你喜欢
    • 2017-01-12
    • 2018-02-12
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多