tf代理的"policy"和"collect_policy"之间有什么区别



我正在研究tf代理来了解强化学习。我正在学习本教程。使用了一种不同的策略,称为collect_policy用于培训,而不是用于评估(policy(。

教程指出存在差异,但在IMO中,它没有描述为什么有两个政策,因为它没有描述功能差异。

代理包含两个策略:

agent.policy--用于评估和部署的主策略。

agent.collect_policy--用于数据收集的第二个策略。

我已经查看了代理的源代码。上面写着

policy:代表代理当前策略的tf_policy.Base实例。

collect_policy:代表Agent当前数据收集策略的tf_policy.Base实例(用于设置self.step_spec(。

但我在源文件中的任何位置都看不到self.step_spec。我发现的下一个最接近的东西是time_step_spec。但这是TFAgent类的第一个ctor参数,因此通过collect_policy进行设置是没有意义的。

所以我唯一能想到的就是:对它进行测试。所以我用policy代替collect_policy进行训练。尽管如此,特工还是达到了环境中的最高得分。

那么,这两项政策在功能上的区别是什么呢?

有一些强化学习算法,如Q-learning,使用策略在环境中行为(或与环境交互(来收集经验,这与他们试图学习的策略(有时称为目标策略(不同。这些算法被称为关闭策略算法。非关闭策略的算法被称为打开策略(即行为策略与目标策略相同(。策略上算法的一个例子是SARSA。这就是为什么我们在TF Agent中同时有policycollect_policy,即,通常情况下,行为策略可能与目标策略不同(尽管情况可能并非总是如此(。

为什么会出现这种情况?因为在学习和与环境互动的过程中,你需要探索环境(即采取随机行动(,而一旦你学会了接近最优的策略,你可能就不需要再探索了,只需要采取接近最优的行动(我说接近最优而不是最优,因为你可能还没有学会最优的行动(

最新更新