在 q-learning 中更新 q 值

机器算法验证 机器学习 强化学习 q学习
2022-04-01 15:10:42

我一直在阅读有关 Q-learning 的信息,并且我有一个关于如何计算值迭代的问题。

据我了解,该算法会在执行该操作后更新状态-操作对的 q 值。因此,假设 actiona将状态从 移动ss'q 值q(s,a)等于处于 state 中的值s,加上 state 中所有可能的动作的折扣最大 q 值s'

然而,这对我来说似乎效率低下,因为 q 值只能通过向前看一步来更新。例如,假设唯一有奖励的状态是状态 100,代理从状态 0 开始。当它通过随机探索最终到达状态 100 时,它将更新代理所在状态的 q 值就在它进入状态 100 之前。

但这不会更新状态 0 的 q 值。要更新它,它必须更新所有状态-动作对的 q 值,这些状态-动作对创建从状态 100 到 0 的“链接”。

相反,不可能从状态 100 开始“向后工作”,并更新所有状态的所有 q 值,从这些状态可以一步达到状态 100。然后,对于这些状态中的每一个,更新可以达到这些状态的所有状态的 q 值。这将一直持续到最后,状态 0 中的 q 值被更新。

否则,q 值只会针对在探索期间实际选择的状态-动作对进行更新,这可能需要很长时间才能收敛。

大概我误解了q-learning,或者误解了我提出的解决方案的实用性......有什么帮助吗?

2个回答

这是个好主意。你所想的是所谓的资格痕迹它们通常会提高收敛速度,但这是以显着增加计算和内存成本以及增加复杂性为代价的。Sutton 和 Barto书详细描述了它们。

你是对的,在某些情况下这样做是有意义的。

您建议的是 Monte Carlo,它与 TD( ) 与相同。λλ=1