RL:收集现实生活中的状态(训练数据)。必须使用固定时间步长吗?

数据挖掘 强化学习
2021-09-30 03:31:38

我正在使用强化学习代理玩 3D 游戏,但无法收集“当前和下一个状态”对。

为了决定执行什么动作,网络必须执行前向传递。

它及时执行前向传递 ,但与此同时,实际环境可能已经发生了显着变化。在电脑游戏中,这意味着已经过去了 10 帧或更多帧(数量不等)。

如果我在同一台计算机上同时运行 100 场比赛,情况会变得更糟。

我没有能力在每一帧停止游戏进行前向传播。无论如何,如果我训练,比如说一个现实生活中的机器人走路,那是不可能的。

问题:

我是否应该坚持“固定时间步长”的方法,只要求每 0.1 秒提供一次操作?当它计算下一个动作时,我可以假装网络不断输出所有跳过帧的最新动作。好主意?

如果这是唯一的选择,那么我是否应该不惜一切代价避免前向道具花费超过“固定时间步长”的情况?(在我的情况下超过 0.1 秒)所以为了安全起见,最好选择 0.2 秒。


似乎很不可靠-有更好的方法吗?

有没有探讨替代方案的论文?(我想这样的论文将是关于现实生活中的机器人训练)

2个回答

您的“固定时间步长”想法实际上与一种称为跳帧的常用技术非常相似。代理不是等待固定的时间,而是等待固定数量的帧ķ在选择新动作之前。与此同时,他们重复他们最近选择的动作。

跳帧是 Atari 2600 Arcade 学习环境的一部分。它也被用于基础DQN 论文的共同价值观ķ是 3、4 和 5。选择的值取决于正在玩的游戏,因为不同的游戏在不同的时间分辨率下发生重要事件。在这些论文中,跳帧使训练大致发生ķ快几倍。所以这绝对是一个有效的尝试技术。

实际上,我认为这在机器人应用程序中通常不太受关注。前向传播通常比现实世界的事件时间尺度发生更快。例如,斯坦福著名地将 RL应用于飞行小型直升机,这需要相当高的精度。

最后,如果您的前向传播确实花费了太长时间,您应该考虑更快的架构。一种方法是让你的神经网络更小。您可能会考虑将经过训练的大型网络压缩为较小的网络的策略蒸馏。另外,请确保您没有使用一些慢得离谱的激活函数,例如 sigmoid 或 tanh。如果您不需要给定神经元的有界输出,则ReLU是常见的选择。如果你这样做,我推荐softsign

如果你的时间瓶颈实际上是在动作选择上,由于动作空间大并且使用了价值网络,你应该认真考虑切换到基于策略的方法(例如actorcritic)。这会有所帮助,因为从动作分布中采样可能比最大限度操作涉及基于值的方法。您可以在Sutton 和 Barto 的 RL 书的第 13.7 节中阅读更多相关信息

“体验回放”让代理记住并重用过去的经验。经验回放捆绑了以前的经验(状态和动作对),允许对稀疏奖励进行训练。经验回放将代理的经验存储在缓冲区中。然后针对缓冲区的全部内容训练代理。如果缓冲区中的状态和动作对产生奖励,它们就会得到加强。如果缓冲区中的状态和动作对没有产生奖励,则它们不会得到加强。

缓冲区末尾的训练信号称为“经验转换”。它通常是均匀采样的。但是,也可以优先考虑重要的经验

A Deeper Look at Experience Replay ”论文更详细地介绍了该技术。