我在看 tf-agents学习强化学习。我正在关注这个 tutorial .使用了不同的策略,称为 collect_policy
用于训练而不是用于评估 ( policy
)。
该教程指出存在差异,但在 IMO 中,它没有描述为什么有 2 个策略,因为它没有描述功能差异。
Agents contain two policies:
agent.policy — The main policy that is used for evaluation and deployment.
agent.collect_policy — A second policy that is used for data collection.
我看过 source code of the agent .它说
policy: An instance of
tf_policy.Base
representing the Agent's current policy.collect_policy: An instance of
tf_policy.Base
representing the Agent's current data collection policy (used to setself.step_spec
).
但是我没有看到
self.step_spec
源文件中的任何位置。我找到的下一个最接近的东西是 time_step_spec
.但这是 TFAgent
的第一个 ctor 参数类,因此通过 collect_policy
设置是没有意义的.所以我唯一能想到的就是:把它付诸实践。所以我用了
policy
而不是 collect_policy
为了训练。尽管如此,代理还是达到了环境中的最高分数。那么这两种策略之间的功能区别是什么?
最佳答案
有一些强化学习算法,例如 Q-learning,它们使用策略在环境中表现(或与之交互)以收集经验,这与他们尝试学习的策略(有时称为目标策略)不同.这些算法被称为离策略算法。不脱离策略的算法称为在策略(即行为策略与目标策略相同)。在策略算法的一个例子是 SARSA。这就是为什么我们同时拥有 policy
和 collect_policy
在 TF-Agents 中,即一般情况下,行为策略可能与目标策略不同(尽管情况并非总是如此)。
为什么会这样?因为在学习和与环境交互的过程中,你需要探索环境(即采取随机行动),而一旦你学会了接近最优的策略,你可能就不需要再探索了,只需采取接近最优的行动即可(我说接近最优而不是最优,因为你可能没有学到最优的)
关于tensorflow - tf-agent 的 `policy` 和 `collect_policy` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61403558/