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

时间:2019-06-21 09:49:04

标签: python reinforcement-learning

我正在阅读original PPO paper,并尝试将其与stable-baselines PPO2模型的输入参数进行匹配。

我不明白的是learn方法中的total_timesteps参数。

本文提到

  

一种策略梯度实现方式...在T个时间步上运行策略(其中T远小于T   剧集长度)

稳定基准文档将total_timesteps参数描述为

  

(int)要训练的样本总数

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

我不明白的是以下内容:

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

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

  • 是将情节定义为可用帧的总数,还是将其定义为代理首次“消失” /“死亡”的时间?如果是后者,那么您如何提前知道该代理何时死亡以将total_timesteps设置为较小的值?

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

1 个答案:

答案 0 :(得分:2)

根据稳定基准源代码

  • total_timesteps是代理在任何环境下总计执行的步骤数 。 total_timesteps可以跨越多个情节,这意味着此值没有上限。
  • 假设您的环境具有超过1000个时间步长。如果您一次调用学习功能,则只会经历前1000帧,而该集的其余部分是未知的。在许多实验中,您都知道环境应持续多少时间步长(即CartPole),但是对于长度未知的环境,这将变得不太有用。但。如果您两次调用学习功能,并说环境情节具有1500帧,则会看到完整情节+第二情节的50%。
  • 将情节定义为终端标志设置为true的程度(在健身房中,通常也会在最大时间步长之后进行设置)。许多其他RL强制代替使用total_episodes,因此您不必在意时间步长的考虑,但同样,缺点是,如果达到吸引状态,您最终只能运行1集。

总timestep参数还使用n_steps,其中更新次数的计算方式如下:

n_updates = total_timesteps // self.n_batch

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

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

教训是:

  • 对于大小未知的信封,您必须使用此值。也许创建一个连续的平均情节长度并使用此值
  • 知道情节长度的地方,将其设置为想要训练的情节数目。但是,这种情况可能会减少,因为代理可能不会(可能不会)每次都达到最大步数。
  • TLDR使用值(将其作为超参数处理)

希望这会有所帮助!