我正在阅读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背后的术语,所以我希望能够在上面清楚地解释我的问题。任何帮助/提示都将受到欢迎。
答案 0 :(得分:2)
根据稳定基准源代码
总timestep参数还使用n_steps,其中更新次数的计算方式如下:
n_updates = total_timesteps // self.n_batch
其中n_batch是n_steps乘以矢量化环境的数量。
这意味着,如果要在n_step设置为32且total_timesteps = 25000的情况下运行1个环境,则在学习调用期间将对策略进行781次更新(不包括时期,因为PPO可以对单个批次进行多次更新)
教训是:
希望这会有所帮助!