强化学习系列(3):深度Q网络的改进(Double DQN、Dueling DQN等)
一、Double DQN原理
解决的问题
在传统的DQN中,由于目标Q值的计算方式,容易出现对Q值的高估问题。这是因为在选择动作和计算目标Q值时都使用了目标网络中对Q值的估计,可能会导致选择到被高估的动作,从而使得训练不稳定,最终影响策略的学习效果。
改进思路
Double DQN通过解耦动作选择和动作评估这两个过程来缓解高估问题。具体来说,它在计算目标Q值时,利用当前的训练网络(也就是策略网络)来选择动作,而利用目标网络来评估该动作对应的Q值。这样就使得选择动作和评估动作来自不同的网络估计,减少了对Q值的过度乐观估计。
算法伪代码对比
# 传统DQN伪代码(关键部分)
for each step in episode:
action = choose_action(state, policy_net)
next_state, reward, done = take_action(action)
q_target = reward + gamma * max_a(Q_target(next_state, a))
update(policy_net, q_target)
# Double DQN伪代码(关键部分)
for each step in episode:
action = choose_action(state, policy_net)
next_state, reward, done = take_action(action)
best_action = choose_action(next_state, policy_net)
q_target = reward + gamma * Q_target(next_state, best_action)
update(policy_net, q_target)
代码示例(Python基于之前DQN代码修改)
# 在计算目标Q值部分进行修改
for episode in range(num_episodes):
state, _ = env.reset()
state = torch.tensor(state, dtype=torch.float).unsqueeze(0)
done = False
while not done:
# 选择动作等过程不变(省略部分重复代码)
# 计算目标Q值
best_action = torch.argmax(</

最低0.47元/天 解锁文章
1109

被折叠的 条评论
为什么被折叠?



