【问题标题】:Questions About Deep Q-Learning关于深度 Q 学习的问题
【发布时间】:2019-06-26 16:13:27
【问题描述】:

我阅读了一些关于深度 Q 学习的材料,但我不确定我是否完全理解。从我了解到的情况来看,深度 Q 学习似乎更快地计算 Q 值,而不是通过使用 NN 执行回归、计算损失和反向传播误差以更新权重将它们放在表上。然后,在测试场景中,它需要一个状态,NN 将为该状态可能的每个动作返回几个 Q 值。然后,将选择具有最高 Q 值的动作在该状态下执行。

我唯一的问题是如何更新权重。根据this site,权重更新如下:

我知道权重是随机初始化的,R 由环境返回,gamma 和 alpha 是手动设置的,但我不明白 Q(s',a,w) 和 Q(s,a,w) 是如何初始化和计算。似乎我们应该建立一个 Q 值表并像使用 Q-learning 一样更新它们,还是在每个 NN 训练时期自动计算它们?我在这里不明白什么?有人可以更好地向我解释这样的等式吗?

【问题讨论】:

    标签: reinforcement-learning q-learning keras-rl


    【解决方案1】:

    在 Q-Learning 中,我们关注的是学习 Q(s, a) 函数,它是状态与所有动作之间的映射。假设您有一个任意状态空间和一个包含 3 个动作的动作空间,每个状态将计算三个不同的值,每个值一个动作。在表格 Q-Learning 中,这是通过物理表完成的。考虑以下情况:

    在这里,我们为游戏中的每个状态都有一个 Q 表(左上角)。在每个时间步之后,该特定动作的 Q 值会根据一些奖励信号进行更新。奖励信号可以按 0 到 1 之间的某个值进行折扣。

    在深度 Q-Learning 中,我们忽略了表格的使用,并创建了一个参数化的“表格”,如下所示: 在这里,所有权重都将形成输入给定的组合,这些组合应该大致与表格案例中看到的值匹配(仍在积极研究中)。

    您提出的方程式是梯度更新规则中设置的 Q-learning 更新规则。

    • alpha 是步长
    • R 是奖励
    • Gamma 是贴现因子 您对网络进行推理以检索“折扣未来状态”的值,并用“当前”状态减去它。如果不清楚,我建议您查看 boostrapping,这基本上就是这里发生的事情。

    【讨论】:

    • 感谢您的回答。我只是怀疑 Q 是如何初始化的,是否在算法的每一步更新或仅计算它们。
    • 这可以按照您对表格大小写的要求来完成。一种方法是更新每个 s、a、s1 对,另一种方法是等到达到一定数量的时间步长,或者当终端状态出现时。真的取决于你。但最“最简单”的还是一步到位的TD
    • 另外一个问题:这些 Q 是放在 Table 中的吗?还是即时计算?因为如果前者是真的,我不明白为什么 DQN 比 Q-learning 最有效,因为还需要大表构建步骤。再次感谢!
    • 在表格 Q-Learning 中,对于状态空间中的每个状态,您必须有 1 行对应的阳离子。现在,这对于 Gridworld 和操作很少的非常简单的环境来说已经足够容易和可行了,但是对于数十亿的状态空间来说,这变得很困难。考虑一种情况,您的状态为 80x80x3 RGB 图像。我可能在这里做错了,但这会导致 (80x80x3)^255 不同的状态组合,可能在您的表中。 DQN 并没有更有效,它只是总体上更好,因为它可以对大型表(状态空间)进行编码/泛化