将 Q 函数限制在理论上的最大值,是还是不是?

数据挖掘 机器学习 神经网络 算法 q学习 dqn
2022-01-21 15:49:59

我正在 MountainCar 模拟中从头开始实施 DQN 算法。我正在使用的设置reward=1.0当汽车撞到国旗时,和0除此以外。奖励衰减因子设置为γ=0.99. 算法从探索因子开始ϵ=1.0并随着时间的推移减少到ϵ=0.1.

如果我理解正确,Q某些状态和动作对的函数定义为:

Q(st,at)=rt+γ×argmaxaQ(st+1,at+1)

所以,Qmax将满足条件:

Qmax=rmax+γ×Qmax

意思是:

Qmax=rmax1γ

但是,由于我的网络仅近似于Q函数它有时可能产生大于Qmax. 当这种情况发生时,进一步的训练会导致值开始呈指数增长,整个事情就会爆炸。

当我将预期值与当前预测值的误差限制在某个较小的数字时,它仍然会导致爆破稍微慢一点。

我能想到的唯一解决方案是钳制预测值Q(st+1,at+1)Qmax并强迫它永远不会超过这个。我已经这样做了,并且得到了很好的结果。

这有意义吗?这是在 DQN 中发生的情况吗?或者也许我错过了一些东西,我的实现有点错误?

1个回答

由于 MountainCar 经常用γ=1以及每个时间步的负奖励,在这种情况下,您将立即遇到计算最大动作值的能力的问题。但是,我认为这不是您的问题,最后带有正奖励的折扣回报仍应鼓励解决问题的期望行为。

您很可能遇到了 RL 的已知问题,以及“致命的三元组”:

  • 函数逼近(神经网络)

  • 在引导方法(Q-Learning 或任何 TD-learning 方法)上

  • off policy(从非最优行为中学习最优策略*,这是 Q-learning 的一个特征)

这种组合通常不稳定且难以训练。您的 Q 值钳位是帮助稳定值的一种方法。DQN 方法的一些功能也旨在处理此问题:

  • 体验重播。Agent 不会在线学习,而是将每个样本(S、A、R、S')放入内存表中,并在从该内存中采样的小批量上训练神经网络。通常这个小批量更新在每一步都运行(在收集到足够的经验之后)并且可能是例如大小 32。所以学习更新比收集经验发生得更快。

  • 冻结引导目标网络。用于计算的网络maxaQ(s,a)设置要学习的目标值时(在 td 目标中R+γmaxaQ(s,a)) 保持稳定,并在一定数量的步骤(例如 100 或 1000,或每 10 集一次)后刷新以使用当前权重的副本。


* 从技术上讲,离策略学习是学习任何策略的成本函数π来自不同的行为策略b,但常见的情况是控制系统试图从探索性策略中找到最优策略。