【问题标题】:Neural Network - Input Normalization神经网络 - 输入归一化
【发布时间】:2018-09-10 15:35:31
【问题描述】:

通常的做法是对输入值(到神经网络)进行归一化以加快学习过程,尤其是在特征具有非常大的尺度时。

在其理论中,归一化很容易理解。但我想知道如果训练数据集非常大,比如 100 万个训练示例,这是怎么做到的?如果每个训练示例的 # 个特征也很大(例如,每个训练示例有 100 个特征),那么会突然出现 2 个问题: - 标准化所有训练样本需要一些时间 - 归一化的训练样本需要保存在某个地方,因此我们需要将必要的磁盘空间增加一倍(尤其是如果我们不想覆盖原始数据)。

输入归一化在实践中是如何解决的,尤其是在数据集非常大的情况下?

一个选项可能是在训练时在每个小批量的内存中动态地规范化输入。但是规范化结果将从一个小批量变为另一个小批量。那还能忍受吗?

这个平台上可能有人在这个问题上有实际经验。如果您能分享您的经验,我将不胜感激。

提前谢谢你。

【问题讨论】:

  • 大量特征并不重要,因为规范化是一次在一列上完成的。至于计算,它非常快,尤其是多核 CPU,甚至 GPU。至于磁盘空间问题,标准化通常足够快,您可以在训练网络之前对批次进行标准化。
  • 感谢您的回答。这也是我的假设。但归一化结果将从一个小批量变为另一小批量。如果我们假设我们在训练时对数据进行混洗,那么某个训练示例很可能会在每个 epoch 的小批量中使用不同的训练示例集进行归一化,这将不同于训练中使用的训练示例的归一化值。那还好吗..?每个小批量的每个特征列的最大值和最小值也会发生变化..

标签: python tensorflow machine-learning neural-network deep-learning


【解决方案1】:

大量特征使并行化数据集的规范化变得更加容易。这不是一个真正的问题。大型数据集的标准化很容易被 GPU 加速,而且速度非常快。即使对于像您描述的大型数据集。我编写的一个框架可以在 4 核 4 线程 CPU 上在 10 秒内标准化整个 MNIST 数据集。 GPU 可以在 2 秒内轻松完成。计算不是问题。虽然对于较小的数据集,您可以将整个标准化数据集保存在内存中,但对于较大的数据集,就像您提到的那样,如果您对整个数据集进行标准化,则需要换出到磁盘。但是,如果您正在做相当大的批量大小,大约 128 或更高,您的最小值和最大值不会波动太大,具体取决于数据集。这允许您在训练网络之前对小批量进行规范化,但这又取决于网络。我建议根据您的数据集进行试验,并选择最佳方法。

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 2013-11-19
    • 1970-01-01
    • 2013-04-21
    • 2018-03-26
    • 2012-10-05
    • 2014-05-15
    • 2016-11-28
    相关资源
    最近更新 更多