我正在研究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中同时有policy
和collect_policy
,即,通常情况下,行为策略可能与目标策略不同(尽管情况可能并非总是如此(。
为什么会出现这种情况?因为在学习和与环境互动的过程中,你需要探索环境(即采取随机行动(,而一旦你学会了接近最优的策略,你可能就不需要再探索了,只需要采取接近最优的行动(我说接近最优而不是最优,因为你可能还没有学会最优的行动(