强化学习系列(3):深度Q网络的改进(Double DQN、Dueling DQN等)

强化学习系列(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(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值