快速 Q 学习

Speedy Q-Learning

我在维基百科上看过 https://en.wikipedia.org/wiki/Q-learning

Q-learning may suffer from slow rate of convergence, especially when the discount factor {\displaystyle \gamma } \gamma is close to one.[16] Speedy Q-learning, a new variant of Q-learning algorithm, deals with this problem and achieves a slightly better rate of convergence than model-based methods such as value iteration

所以我想试试 speedy q-learning,看看效果如何。

我在互联网上能找到的关于它的唯一来源是: 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-learning。

首先要考虑的是:如果你想加速 Q-learning 来解决实际问题,我会在 Speedy Q-learning 之前选择其他选项,例如 well-known Q(lambda ),即 Q-learning 与可读性痕迹相结合。为什么?因为有大量的信息和实验(好的)结果带有资格痕迹。事实上,正如 Speedy Q-learning 作者所说,这两种方法的工作原理是相似的:

The idea of using previous estimates of the action-values has already been used to improve the performance of Q-learning. A popular algorithm of this kind is Q(lambda) [14, 20], which incorporates the concept of eligibility traces in Q-learning, and has been empirically shown to have a better performance than Q-learning, i.e., Q(0), for suitable values of lambda.

您可以在 Sutton and Barto RL book 中找到很好的介绍。如果您只是想研究 Speedy Q-learning 和标准版之间的差异,请继续。

现在你的问题。是的,你必须维护两个单独的 Q-values 列表,一个用于当前时间 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-learning 中使用该运算符,它具有以下更新规则:

在 Speedy Q-learning (SQL) 的情况下,如前所述,您维护两个 Q-functions 并将操作 TQ 应用于两个:TQ_{k}TQ_{k-1}。然后在SQL更新规则中使用前面操作的结果:

pseudo-code你post问题中的另一点要强调的是,它对应于SQL的同步版本。这意味着,在每个时间步 k 中,您需要生成下一个状态 y 并为所有现有 state-actions 对 (x,a) 更新 Q_{k+1}(x,a)