快速的Q-Learning

时间:2017-01-16 21:51:11

标签: machine-learning reinforcement-learning q-learning

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

  

Q学习可能会遇到收敛速度慢的问题,尤其是当折扣系数{\ displaystyle \ gamma} \ gamma接近1时。[16]快速Q学习是Q学习算法的一种新变体,可以解决这个问题,并且比基于模型的方法(例如值迭代)实现更好的收敛速度

所以我想尝试快速的q-learning,看看它有多好。

我能在互联网上找到它的唯一来源是: https://papers.nips.cc/paper/4251-speedy-q-learning.pdf

这就是他们建议的算法。

enter image description here

现在,我对此并不了解。什么是TkQk,我应该有另一个q值列表吗?有没有比这更明确的解释?

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

这是我目前的QLearning算法,我希望将其替换为快速的Q-learning。

1 个答案:

答案 0 :(得分:1)

第一个考虑因素:如果你想加快实际问题的Q学习,我会在Speedy Q-learning之前选择其他选项,比如着名的Q(lambda),即Q-learning结合具有良性痕迹。为什么?因为有大量的信息和实验(好)结果与资格痕迹。事实上,正如Speedy Q-learning作者所说,这两种方法的工作原理是相似的:

  

使用先前对行动价值的估计的想法已经存在   被用来提高Q学习的表现。很受欢迎   这种算法是Q(lambda) [14,20],其中包含了   Q学习中的资格跟踪概念,并且是经验性的   被证明具有比Q学习更好的性能,即Q(0),用于   适当的lambda

你可以在Sutton and Barto RL book找到一个很好的介绍。如果您只是想研究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),其中y是下一个状态,b是针对给定状态最大化Q_{k}的操作。请注意,您在标准Q-learning中使用该运算符,该Q-learning具有以下更新规则:

enter image description here

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

enter image description here

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