为什么我们要最小化目标 Q 值和“本地”Q 值之间的损失?

人工智能 强化学习 dqn 深度学习 双dqn
2021-11-10 21:47:33

我对目标网络和当前(在线)网络的损失函数有疑问。我理解动作价值函数。我不确定的是为什么我们要尽量减少qVal目标网络中的下一个状态与本地网络中的当前状态之间的损失。Mnih 等人的 Nature 论文。解释得很好,但是,我并没有从中得到上述目的。这是我正在运行的脚本中的训练部分:

for state, action, reward, next_state, done in minibatch:
    target_qVal = self.model.predict(state)

    # print(target_qVal)

    if done:
        target_qVal[0][action] = reward #done
    else:
        # predicted q value for next state from target model
        pred = self.target_model.predict(next_state)[0]
        target_qVal[0][action] = reward + self.gamma * np.amax(pred)

    # indentation position?
    self.model.fit(np.array(state), 
                   np.array(target_qVal), 
                   batch_size=batch_size,
                   verbose=0, 
                   shuffle=False, 
                   epochs=1)

我了解预期回报是即时回报加上展望未来的折扣回报的累积总和s(如果我的理解有误,请纠正我)遵循给定的政策。

我的基本误解是损失方程:

L=[r+γmaxQ(s,a;θ)Q(s,a;θ)],

在哪里θθ分别是目标和在线神经网络的权重。

为什么我们的目标是最小化目标模型中下一个状态的 Q 值和在线模型中当前状态的 Q 值?

一个额外的问题是,为了收集Q(s,a)降维的值(如 Mnih 等人的 t-sne 图),我是否会简单地target_qVal[0]在训练期间收集这些值并在每一步之后将它们输入到一个列表中以随着时间的推移累积 Q 值?

1个回答

损失函数的设计方式近似于贝尔曼最优Q(s,a). 给定一个最优策略π,Q(s,a)满足方程

Q(s,a)=r(s)+γmaxasP(s|s,a)Q(s,a)

收敛时,最高Q我可以采取行动的价值a处于状态s等于我采取行动获得的奖励a和最大值Q下一个状态的值。

您可以在损失函数中看到 DQN 试图获得Q(s,a)非常接近上述等式的值。

另一方面,在基于模型的 RL 设置中,贝尔曼最优Q表示为

Q(s,a)=r(s)+γsP(s|s,a)V(s)
V(s)在基于模型的案例中使用,因为V(s)根据定义,代表状态可达到的最高可能值s下列的π. 在无模型设置中,V被替换为Q因为计算V在没有过渡模型的情况下实现无模型控制时没有用P(s|s,a)