0

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

Q 学习可能会受到收敛速度较慢的影响,尤其是当折扣因子 {\displaystyle \gamma } \gamma 接近 1 时。 [16] Speedy Q-learning 是 Q-learning 算法的一种新变体,它处理了这个问题,并实现了比值迭代等基于模型的方法略好的收敛速度

所以我想尝试快速 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。

4

1 回答 1

1

第一个考虑:如果你想为实际问题加速 Q-learning,我会在 Speedy Q-learning 之前选择其他选项,例如众所周知的 Q(lambda),即 Q-learning 与 elegibility traces 相结合. 为什么?因为有大量信息和实验(良好)结果以及资格痕迹。事实上,正如 Speedy Q-learning 的作者所建议的,这两种方法的工作原理是相似的:

使用先前对动作值的估计的想法已经被用来提高 Q-learning 的性能。这种流行的算法是Q(lambda)[14, 20],它结合了 Q-learning 中的合格迹线的概念,并且已被经验证明比 Q-learning 具有更好的性能,即 Q(0),对于合适的值的lambda

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

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

在常见情况下(包括您的情况),下一个状态和给定状态最大化的动作TQ_{k} = r(x,a) + discountFactor * max_{b in A} Q_{k}(y,b)在哪里。请注意,您在标准 Q-learning 中使用该运算符,它具有以下更新规则:ybQ_{k}

在此处输入图像描述

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

在此处输入图像描述

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

于 2017-01-18T09:06:39.143 回答