在 Q-learning 中,简单地遍历所有可能的状态不是更好吗?

人工智能 强化学习 q学习 探索-开发-权衡 探索策略
2021-10-27 05:50:58

在 Q 学习中,我发现的所有资源似乎都说更新 Q 表的算法应该从某个初始状态开始,然后选择动作(有时是随机的)来探索状态空间。

但是,简单地遍历所有可能的状态不是更好/更快/更彻底吗?这将确保更新整个表,而不仅仅是我们碰巧访问的状态。像这样的东西(对于每个时代):

for state in range(NUM_STATES):
  for action in range(NUM_ACTIONS):
    next_state, reward = env.step(state, action)
    update_q_table(state, action, next_state, reward)

这是一个可行的选择吗?我能想到的唯一缺点是它对于巨大的状态空间效率不高。

3个回答

如果您的算法使用外循环执行多次(或足够多)次,它将收敛到与 Q-learning 相似的结果γ=0(因为您看不到预期的未来奖励是什么)。

在这种情况下,不同之处在于您将花费尽可能多的时间来探索每对可能的(状态,动作),而 Q-learning 将花费更多时间在看起来更有希望的对上,正如您所说,这不会对于具有大量配对(状态,动作)的问题,效率不高。

如果算法只执行一次,那么,即使是有几对(状态、动作)的问题,您也需要假设对状态产生影响的动作总是会产生相同的结果,这样您的方法才能正常工作。

在大多数情况下,这是不正确的,因为奖励系统或动作中存在某种随机性(您的代理可能无法执行某项操作),或者因为您的代理的状态仅限于其知识,因此不会' 不能完美地代表世界(因此其行为的结果可能会有所不同,就像奖励有一些随机性一样)。

最后,您的算法不考虑预期的未来奖励,因此它相当于拥有γ=0. 如果您只执行一次算法,则可以通过在当前循环之后添加一个更新表的新循环来解决此问题,或者如果存在外部循环,则可以将预期的未来奖励直接添加到您的 Q 表中。

因此,总而言之,如果没有外循环,您的想法将适用于具有少量(状态,动作)的系统,您的代理对其世界具有完美和完整的知识,奖励不会变化,并且代理不能不完成一个动作。

虽然确实存在这类系统,但我认为这不是一个应该使用 Q-learning(或另一种形式的强化学习)的环境,除非它是出于教育目的。

使用外循环,如果您愿意花更多时间进行训练,以便在最没有希望的一对(状态、动作)上获得更精确的 Q 表,那么您的想法就会奏效。

简而言之,是的,前提是您有少量状态。

在几乎任何真实的系统中,状态的数量都比你希望在任何合理的时间内详尽探索的要多得多。这就是为什么您需要设置某种探索/开发策略以确保您主要访问有希望的状态,同时还要检查最初可能看起来很差但随着您进一步探索可能会导致更好的状态的状态。正如几分钟的想法会说服你,确定探索/利用权衡的确切性质可能是有效 Q-Learning 最重要的方面(以及几乎任何其他搜索算法)。

问题在于权衡奖励与学习,Q-learning 尝试学习和做产生奖励的事情(基本上,操作次优)。

我不确定 Q-Learning 在性能方面是否真的有任何不同,短期 Q-Learning 会产生更多的奖励(可能),但也会错过状态。