了解稳定基线模型中的total_timesteps参数

2024-01-05

我正在阅读原版PPO纸 https://arxiv.org/pdf/1707.06347.pdf并尝试将其与输入参数相匹配稳定基线 PPO2 https://stable-baselines.readthedocs.io/en/master/modules/ppo2.html model.

我不明白的一件事是total_timesteps中的参数learn https://stable-baselines.readthedocs.io/en/master/modules/ppo2.html#stable_baselines.ppo2.PPO2.learn method.

论文提到

策略梯度实现的一种风格...运行 T 个时间步长的策略(其中 T 远小于 剧集长度)

虽然稳定基线文档描述了total_timesteps参数为

(int) 训练样本总数

因此我认为T在论文中和total_timesteps文档中是相同的参数。

我不明白的是以下内容:

  • Does total_timesteps始终需要小于或等于环境中可用“帧”(样本)的总数(假设我有有限数量的帧,例如 1,000,000)。如果是这样,为什么?

  • 通过设置total_timesteps对于小于可用帧数的数字,代理会看到训练数据的哪一部分?例如,如果total_timesteps=1000,代理是否只看到前 1000 帧?

  • 一个情节是定义为可用帧的总数,还是定义为代理第一次“丢失”/“死亡”的时间?如果是后者,那么你怎么能提前知道代理什么时候会死才能设置total_timesteps到一个较小的值?

我仍在学习强化学习背后的术语,所以我希望我能够在上面清楚地解释我的问题。任何帮助/提示将非常受欢迎。


根据 stable-baselines 源代码

  • Total_timesteps 是步数in total该代理适用于任何环境。 Total_timesteps 可以跨越多个情节,这意味着该值不受某个最大值的限制。
  • 假设您的环境具有超过 1000 个时间步。如果您调用一次学习函数,您只会体验到前 1000 帧,而该片段的其余部分是未知的。在许多实验中,您知道环境应该持续多少个时间步(即 CartPole),但对于长度未知的环境,这变得不太有用。但。如果您调用学习函数两次并假设环境片段有 1500 帧,您将看到完整的片段 + 第二个片段的 50%。
  • 一个episodes被定义为当终端标志设置为true时(在健身房中,这通常也是在最大时间步长之后设置)许多其他RL实现使用total_episodes,这样你就不必关心时间步长考虑,但同样,缺点是,如果您达到吸引人的状态,您可能最终只能播放一集。

总时间步长参数还使用 n_steps,其中更新次数的计算如下:

n_updates = total_timesteps // self.n_batch

其中 n_batch 是矢量化环境数量的 n_steps 倍。

这意味着,如果您有 1 个环境运行,n_step 设置为 32,total_timesteps = 25000,则您将在学习调用期间对策略进行 781 次更新(不包括纪元,因为 PPO 可以在单个批次中进行多次更新)

教训是:

  • 对于未知大小的环境,您必须使用此值。也许创建一个运行平均剧集长度并使用该值
  • 如果剧集长度已知,请将其设置为您想要训练的所需剧集数。但是,它可能会更少,因为代理可能不会(可能不会)每次都达到最大步数。
  • TLDR 玩转该值(将其视为超参数)

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解稳定基线模型中的total_timesteps参数 的相关文章

随机推荐