一、DQN算法为什么要使用两个网络?
DQN算法通常包含两个网络:一个是评估网络training_network,另一个是目标网络target_network。这两个网络的结构和初始权重是相同的,但它们的权重是不同步更新的。使用两个网络的原因是为了稳定学习过程。在DQN算法中,目标网络的权重是定期从评估网络网络复制的,但更新的频率远低于评估网络网络。这种做法有助于减少目标Q值(即预期的回报)与当前Q值(即实际的回报)之间的相关性,从而减少了学习过程中的波动性。
DQN使用
training_network来计算q_values,而使用
target_network计算next_q_values。
q_values:
q_values代表在当前状态下采取实际执行的动作所对应的Q值。
这些Q值是通过
training_network计算得到,因为
training_network是实时更新的,它反映了最新的策略或价值估计。
在给定的状态state_batch下,通过
training_network计算所有可能动作的Q值,然后使用gather函数根据实际采取的动作action_batch来选择对应的Q值。
next_q_values:
next_q_values代表在下一个状态(next_state_batch)下可能获得的最高Q值。
这些Q值是通过
target_network计算得到的。由于目标网络的权重更新频率较低,它提供了一个更稳定的目标来更新主网络。
使用.max(1)[0]是为了从目标网络输出的Q值矩阵中找到每个状态对应的最大Q值,这代表了在该状态下可能获得的最高预期回报。
如果我们想获取在给定state下的一个动作,我们只需要将state喂给神经网络,然后它返回给我们所有的q_values
。我们选择最大的Q_value,然后选择和最大Q_value关联的动作。
参考资料:【无聊问题之】DQN算法为什么要使用两个网络(主网络和目标网络)_dqn为什么两个q网络-CSDN博客