【发布时间】:2018-09-10 15:35:31
【问题描述】:
通常的做法是对输入值(到神经网络)进行归一化以加快学习过程,尤其是在特征具有非常大的尺度时。
在其理论中,归一化很容易理解。但我想知道如果训练数据集非常大,比如 100 万个训练示例,这是怎么做到的?如果每个训练示例的 # 个特征也很大(例如,每个训练示例有 100 个特征),那么会突然出现 2 个问题: - 标准化所有训练样本需要一些时间 - 归一化的训练样本需要保存在某个地方,因此我们需要将必要的磁盘空间增加一倍(尤其是如果我们不想覆盖原始数据)。
输入归一化在实践中是如何解决的,尤其是在数据集非常大的情况下?
一个选项可能是在训练时在每个小批量的内存中动态地规范化输入。但是规范化结果将从一个小批量变为另一个小批量。那还能忍受吗?
这个平台上可能有人在这个问题上有实际经验。如果您能分享您的经验,我将不胜感激。
提前谢谢你。
【问题讨论】:
-
大量特征并不重要,因为规范化是一次在一列上完成的。至于计算,它非常快,尤其是多核 CPU,甚至 GPU。至于磁盘空间问题,标准化通常足够快,您可以在训练网络之前对批次进行标准化。
-
感谢您的回答。这也是我的假设。但归一化结果将从一个小批量变为另一小批量。如果我们假设我们在训练时对数据进行混洗,那么某个训练示例很可能会在每个 epoch 的小批量中使用不同的训练示例集进行归一化,这将不同于训练中使用的训练示例的归一化值。那还好吗..?每个小批量的每个特征列的最大值和最小值也会发生变化..
标签: python tensorflow machine-learning neural-network deep-learning