线下学习和线上学习如何过渡?

数据挖掘 Python 张量流 强化学习
2022-02-25 17:54:22

我正在按以下方式在时间序列上训练 RL 代理(在 python 中使用 TensorFlow):为了预测时间段t的兴趣数量,我在时间段[tW,t)提供W观察t窗口在整个训练过程中,窗口一步一步地推进,直到我有一个小批量的M个观察和奖励来训练。重复,直到你用完历史数据,这是一个时代。我以很小的学习率训练了几千个 epoch(损失非常不稳定)。W[tW,t)M

最终,我想开始从环境中提取实时数据来进行预测。此时,如果我想继续在线训练,我应该如何处理epochs?不再有“数据耗尽”。

1个回答

尽管 RL 算法可以在线运行,但在实践中,当学习脱离策略(如在 Q 学习中)和使用函数逼近器时,这并不稳定。为了避免这种情况,可以将新经验添加到历史记录中,并且代理从历史记录中学习(称为经验回放)。您可以将其视为一种半在线方法,因为新数据可立即用于学习,但根据批量大小和历史记录大小,它可能不会用于在几个时间步长内更改参数。

通常在像 DQN 这样的 RL 系统中,你会在每个动作之间训练一些随机抽样的批次,在一些历史数据窗口之外(可能是所有历史数据,可能是最后 N 步)。您在动作之间执行的训练量是模型的超参数,任何对新数据的采样偏差也是如此。

例如,在Deep Mind 团队的 Atari 游戏论文中,代理在玩游戏时对具有 32 个观察值(状态、动作、奖励、下一个状态)的小批量进行采样,以在每个动作之间训练神经网络在线的。

在线学习中没有时代的概念。如果您使用每个 epoch 来报告性能指标,并希望继续使用可比较的数字,那么您可以选择一些训练迭代次数。对此没有固定的规则,但您可能需要考虑报告与在历史数据上训练时相似的迭代次数相同的统计数据 - 例如,如果您的历史中有 10,000 个训练样本,现在正在使用小批量在线训练每个时间步的大小为 50,然后每 10,000/50 = 200 个时间步报告进度。