【问题标题】:Is it ok to only use one epoch?只使用一个时代可以吗?
【发布时间】:2016-06-23 19:26:39
【问题描述】:

我正在 TensorFlow 中(使用 tflearn)根据我生成的数据训练一个神经网络。据我所知,每个时期我们都使用所有的训练数据。因为我可以控制我有多少示例,所以最好只生成更多的训练数据,直到一个 epoch 足以训练网络。

所以我的问题是:假设我有足够的训练数据,只使用一个 epoch 有什么缺点吗?我假设一百万个示例中的 1 个时期优于 100,000 个示例中的 10 个时期是否正确?

【问题讨论】:

  • (我不知道什么是纪元)如果您有真实数据(或良好的模拟数据),那么您可以检查什么对您的数据更好。例如,在对真实数据进行预测时,简单的指数平滑比 ARIMA 模型更好,尽管理论上相反。

标签: machine-learning neural-network tensorflow


【解决方案1】:

在与@Prune 讨论之后:

假设您有可能从固定的基础概率分布(即同一个流形)中生成无限数量的标记示例。

网络看到的示例越多,它的学习效果就越好,尤其是泛化的效果越好。理想情况下,如果你训练它足够长的时间,它可以在这个特定任务上达到 100% 的准确率。


结论是只运行 1 个 epoch 就可以了,只要示例是从相同分布中采样的。

此策略的局限性可能是:

  • 如果需要存储生成的示例,可能会耗尽内存
  • 要处理不平衡的类(参见@jorgemf 答案),您只需为每个类抽取相同数量的示例。
    • 例如如果您有两个类,有 10% 的机会对第一个类进行抽样,您应该创建一批具有 50% / 50% 分布的示例

运行多个 epoch 可能会使它更好地学习一些不常见的情况。

我不同意,多次使用同一个示例总是比生成新的未知示例更糟糕。但是,您可能希望随着时间的推移生成越来越难的示例,以使您的网络在不常见的情况下变得更好。

【讨论】:

    【解决方案2】:

    您需要训练示例才能使网络学习。通常你没有那么多的例子来让网络收敛,所以你需要运行多个 epoch。

    如果您有很多示例并且它们相似,那么只使用一个时期是可以的。如果你有 100 个类,但其中一些只有很少的例子,那么你不会只用一个 epoch 就可以学习这些类。所以你需要平衡的类。

    此外,具有随示例数量而降低的可变学习率是一个好主意,因此网络可以自行微调。它从高学习率开始,然后随着时间的推移而降低,如果你只运行一个 epoch,你需要记住这一点来调整图表。

    我的建议是运行多个 epoch,主要是因为您拥有的示例越多,存储它们所需的内存就越多。但是如果内存很好,并且学习率是根据示例数量而不是 epoch 来调整的,那么运行一个 epoch 就可以了。

    编辑:我假设您正在使用一种学习算法,该算法每批或类似地更新网络的权重。

    【讨论】:

    • 这很有意义。我认为在我的情况下,我有足够多的内存来加载我想要的任意数量,但运行多个 epoch 可能会使它更好地学习一些不常见的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多