我已经读过维基百科
https://en.wikipedia.org/wiki/Q-learning


  Q学习可能会遇到收敛速度慢的问题,特别是在折扣因子{\ displaystyle \ gamma} \ gamma接近1的情况下。[16]快速Q学习是Q学习算法的新变种,它可以解决此问题,并且与基于模型的方法(例如值迭代)相比,收敛速度略高


因此,我想尝试快速的q学习,看看它的效果如何。

我在互联网上可以找到的唯一信息是:
https://papers.nips.cc/paper/4251-speedy-q-learning.pdf

这就是他们建议的算法。

machine-learning - 快速Q学习-LMLPHP

现在,我不明白。 TkQk到底是什么,我应该再列出一个q值列表吗?还有比这更清楚的解释了吗?

 Q[previousState][action] = ((Q[previousState][action]+(learningRate * ( reward + discountFactor * maxNextExpectedReward - Q[previousState][action]) )));


这是我当前的QLearning算法,我想将其替换为快速的Q学习方法。

最佳答案

首先要考虑的是:如果您想为一个实际问题加速Q学习,那么我会在Speedy Q学习之前选择其他选项,例如众所周知的Q(lambda),即Q学习与易读性跟踪相结合。为什么?因为有大量的信息和实验(良好)结果以及合格的痕迹。实际上,正如快速Q学习作者所建议的那样,两种方法的工作原理是相似的:


  使用动作值的先前估计的想法已经
  用于提高Q学习的性能。受欢迎的
  这种算法是Q(lambda) [14,20],其中包含
  资格概念在Q学习中有迹可循
  表现出比Q学习更好的性能,即Q(0)
  lambda的合适值。


您可以在Sutton and Barto RL book中找到不错的介绍。如果您只是想研究Speedy Q学习与标准版本之间的区别,请继续。

现在是您的问题。是的,您必须维护两个单独的Q值列表,一个用于当前时间k,另一个用于先前的k-1,分别是Q_{k}Q_{k-1}

在常见情况下(包括您的情况),为TQ_{k} = r(x,a) + discountFactor * max_{b in A} Q_{k}(y,b),其中y是下一个状态,而b为给定状态最大化Q_{k}的操作。请注意,您正在标准Q学习中使用该运算符,该运算符具有以下更新规则:

machine-learning - 快速Q学习-LMLPHP

如前所述,在快速Q学习(SQL)的情况下,您维护两个Q函数并将TQ操作应用于这两个函数:TQ_{k}TQ_{k-1}。然后,将先前操作的结果用于SQL更新规则:

machine-learning - 快速Q学习-LMLPHP

在问题中发布的伪代码中要强调的另一点是,它与SQL的同步版本相对应。这意味着,在每个时间步骤k中,您都需要生成下一个状态y,并为所有现有的状态操作对Q_{k+1}(x,a)更新(x,a)

关于machine-learning - 快速Q学习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41685575/

10-10 05:03