gpt4 book ai didi

tensorflow - DQN - Q-Loss 不收敛

转载 作者:行者123 更新时间:2023-12-04 11:15:49 117 4
gpt4 key购买 nike

我正在使用 DQN 算法在我的环境中训练代理,如下所示:

  • 代理通过选择离散 Action (左、右、上、下)来控制汽车
  • 目标是以理想的速度行驶而不会撞到其他汽车
  • 状态包含代理的汽车和周围汽车的速度和位置
  • 奖励:-100 撞到其他汽车,根据与所需速度的绝对差异获得正奖励(如果以所需速度行驶,则为 +50)

  • 我已经调整了一些超参数(网络架构、探索、学习率),这给了我一些下降结果,但仍然没有应该/可能的那么好。在训练期间,每个阶段的奖励会增加。 Q 值也在收敛(见图 1)。然而,对于超参数的所有不同设置,Q-loss 并不收敛(见图 2)。我认为,Q-loss 缺乏收敛性可能是获得更好结果的限制因素。

    Q-value of one discrete action durnig training

    Q-loss during training

    我正在使用每 20k 时间步更新一次的目标网络。 Q-loss 计算为 MSE。

    你知道为什么 Q-loss 不收敛吗?
    DQN 算法的 Q-Loss 是否必须收敛?我想知道,为什么大多数论文中都没有讨论 Q-loss。

    最佳答案

    是的,损失必须覆盖,因为损失值意味着预期 Q 值和当前 Q 值之间的差异。只有当损失值收敛时,电流才接近最优 Q 值。如果它发散,这意味着您的近似值越来越不准确。

    也许您可以尝试调整目标网络的更新频率或检查每次更新的梯度(添加梯度裁剪)。目标网络的加入增加了Q-learning的稳定性。

    在 Deepmind 的 2015 年 Nature 论文中,它指出:

    The second modification to online Q-learning aimed at further improving the stability of our method with neural networks is to use a separate network for generating the traget yj in the Q-learning update. More precisely, every C updates we clone the network Q to obtain a target network Q' and use Q' for generating the Q-learning targets yj for the following C updates to Q. This modification makes the algorithm more stable compared to standard online Q-learning, where an update that increases Q(st,at) often also increases Q(st+1, a) for all a and hence also increases the target yj, possibly leading to oscillations or divergence of the policy. Generating the targets using the older set of parameters adds a delay between the time an update to Q is made and the time the update affects the targets yj, making divergence or oscillations much more unlikely.



    Human-level control through deep reinforcementlearning, Mnih et al., 2015

    我给别人在Cartpole环境下问过类似问题做了一个实验,100的更新频率解决了问题(最大达到200步)。

    当 C(更新频率)=2 时,绘制平均损失:
    C=2

    C = 10

    C=10

    C = 100

    enter image description here

    C = 1000

    enter image description here

    C = 10000

    enter image description here

    如果损失值的发散是由梯度爆炸引起的,您可以剪裁梯度。在 Deepmind 的 2015 DQN 中,作者通过将值限制在 [-1, 1] 内来裁剪梯度。在另一种情况下,作者 Prioritized Experience Replay通过将范数限制在 10 以内来剪辑梯度。以下是示例:

    DQN 渐变裁剪:

        optimizer.zero_grad()
    loss.backward()
    for param in model.parameters():
    param.grad.data.clamp_(-1, 1)
    optimizer.step()

    PER 渐变剪裁:

        optimizer.zero_grad()
    loss.backward()
    if self.grad_norm_clipping:
    torch.nn.utils.clip_grad.clip_grad_norm_(self.model.parameters(), 10)
    optimizer.step()

    关于tensorflow - DQN - Q-Loss 不收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47036246/

    117 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com