【问题标题】:Speedy Q-Learning快速 Q 学习
【发布时间】:2017-01-18 17:06:39
【问题描述】:

我在*上读过 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。

【问题讨论】:

  • 或其他关于快速 Q-learning 的更简单的来源。 - 对外部资源的请求是题外话,你应该 edit 那部分。
  • 好的...完成。固定

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


【解决方案1】:

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

使用先前对动作值的估计的想法已经 用于提高 Q-learning 的性能。一个受欢迎的 这种算法是Q(lambda) [14, 20],它结合了 Q-learning 中资格迹的概念 显示出比 Q-learning 更好的性能,即 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 中使用该运算符,它具有以下更新规则:

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

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

【讨论】:

  • 谢谢巴勃罗!你是最棒的。是的,我正在尝试加快 Q-learning 以解决实际问题。我正在尝试为我的游戏制作一个机器人,其深度 q-learning 受到 Ataris 机器人的启发。我的神经网络做得不太好,所以我退后一步检查了我的 q-learning,发现 q-values 没有多大意义。我发现这主要是由于我遇到的一些小错误造成的。但是在寻找解决方案的路上,我很快就遇到了,并想尝试一下。我想我会改用 Q(lambda)
  • 谢谢,很高兴能提供帮助 :)。祝你的机器人项目好运,听起来很有趣。