我已经读过维基百科
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
这就是他们建议的算法。
现在,我不明白。 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学习中使用该运算符,该运算符具有以下更新规则:
如前所述,在快速Q学习(SQL)的情况下,您维护两个Q函数并将TQ
操作应用于这两个函数:TQ_{k}
和TQ_{k-1}
。然后,将先前操作的结果用于SQL更新规则:
在问题中发布的伪代码中要强调的另一点是,它与SQL的同步版本相对应。这意味着,在每个时间步骤k
中,您都需要生成下一个状态y
,并为所有现有的状态操作对Q_{k+1}(x,a)
更新(x,a)
。
关于machine-learning - 快速Q学习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41685575/