DQN 的两种扩展(DDQN,Dueling DQN)

1. Double DQN

DQN 在实际 Atari 任务中确实会发生明显的 \(Q\) 值高估,而且这种高估会伤害策略表现;Double DQN 把这两件事拆开,选动作和评估动作不再用同一个 max。

回顾经典的 Q-learning 算法:

\[Y_t^Q = R_{t+1} + \gamma \max_a Q(S_{t+1}, a; \theta_t) \]

Q-learning 的 target 里有一个 max 操作。max 会在多个估计值里挑最大的那个;如果某些动作的 Q 值只是因为估计误差被偶然估高了,max 就会偏向选它。于是 target 本身就被抬高。max 操作天然偏向正误差。

即overestimation —— 训练久了,受误差影响的 Q 值会被一步步推高。

DQN 的改进:

\[Y_t^{DQN} = R_{t+1} + \gamma \max_a Q(S_{t+1}, a; \theta_t^-) \]

DQN 算法维护两个网络,这里的 \(\theta_t^-\)是 target network 的参数。DQN 通过 target network 基于下一步最优动作计算最优未来价值。

这一步同时做了两件事。

  • 第一,用 target network 选择哪个动作最大;
  • 第二,用 target network 评估这个最大动作的价值。

也就是 selection 和 evaluation 没有分离

Double Q-learning 的设计:

主要目的:减少 max 操作带来的高估偏差。

\[Y_t^{DoubleDQN}=R_{t+1}+\gamma Q\left(S_{t+1},\arg\max_a Q(S_{t+1}, a; \theta_t);\theta_t^-\right) \]

公式中的 \(\theta_t\) 即是 DQN 中的 policy network (online weights), \(\theta_t^-\)则是 target network。这里的改进是:使用 policy network 选择动作,使用 target network 评估价值。

改进

这样做使选择动作时产生的高估误差,不会原封不动地被同一个网络拿来当评估值。即使 online network 因误差选中了某个动作,target network 对这个动作的估值不一定同样偏高,所以 overestimation 会减弱。

注意,online network 在收集经验时通常配合 \(\epsilon-greedy\);但在 DDQN 计算 target 时,用的是 greedy action,不加 \(\epsilon\) 探索。

2. Dueling DQN

很多动作价值接近时,普通 Q 网络学习效率低,Dueling DQN 提出一种新的 Q-network 结构:把状态价值和动作优势拆开学,最后再合成 \(Q(s,a)\)

回顾价值函数

动作 | 价值 函数:

\[Q^\pi(s,a) \]

表示在状态 s 下采取动作 a,之后按照策略 \(\pi\) 行动的期望回报。

状态 | 价值 函数:

\[V^\pi(s,a) \]

表示状态 s 本身的价值好坏。

Advantage 优势函数

\[A^\pi(s,a)=Q^\pi(s,a)−V^\pi(s) \]

Advantage 在该方法中被定义为连接 \(V\)\(Q\) 的量。动作优势不是绝对价值,而是“这个动作比这个状态的平均/基准价值好多少”。如果一个状态本身很好,那么很多动作的 \(Q\) 都可能高;但真正决定动作选择的是:哪个动作相对更好。

反过来写:

\[Q^\pi(s,a)=A^\pi(s,a)+V^\pi(s) \]

回顾 DQN 网络链路

\[s → CNN/MLP → Q(s,a_1),Q(s,a_2),Q(s,a_3)... \]

优化目标:

\[L = (y - Q(s,a_t))^2 \]

问题一:更新时只考虑了当前动作 \(a_t\) ,其它动作 \(a_1, a_2 ….\) 没有被 target 监督。

问题二:很多状态下,动作之间其实差别不大。比如赛车游戏里,如果前方是直路,那么“轻微左转”“保持直行”“轻微右转”可能都不会立刻造成巨大差异。此时,普通 DQN 仍然要分别估计每个动作的 \(Q(s,a)\)学习效率不高

Dueling DQN 的改进:

重新设计了网络架构,使得 V 和 A 在输出时分开:前面的卷积层/特征提取层共享,后面分成 value stream 和 advantage stream。

duelingDQN

经过 shared feature extractor 后,网络分成两个 stream:

\[V(s) \]

\[A(s,a_1),A(s,a_2),A(s,a_3).... \]

最后再合并成每个动作的 \(Q\) 值输出。得到了:

Dueling DQN —— \(Q\) 值公式

\[Q(s,a;\theta,\alpha,\beta)=V(s;\theta,\beta)+\left(A(s,a;\theta,\alpha)-\frac{1}{|\mathcal{A}|}\sum_{a'} A(s,a';\theta,\alpha)\right) \]

\(\alpha\) advantage stream 的参数;\(\beta\) value stream 的参数;\(\mathcal{A}\) 动作数量

解决问题

问题一:即使 loss 只来自一个动作,它也会更新 \(V(s)\) —— 所有动作共享的状态价值。也就是说,一条 transition 虽然只监督了一个动作,但它同时改进了“这个状态整体好不好”的估计。之后其他动作的 Q 值也会间接受益

问题二:把问题拆成了“公共基线 + 小残差”。给 Q 函数加了结构先验: \(V(s)\) stream 学到了一个可在多个相似动作之间共享的 general value。大部分价值来自状态本身,动作只负责解释相对差异。这个先验成立时,样本利用率更高,优化更稳定,因此更容易收敛。

引用

  1. Van Hasselt, H., Guez, A. and Silver, D. (2016) ‘Deep reinforcement learning with Double Q-learning’, Proceedings of the AAAI Conference on Artificial Intelligence, 30(1), pp. 2094–2100. doi: 10.1609/aaai.v30i1.10295. (AAAI Publications)
  2. Wang, Z., Schaul, T., Hessel, M., Van Hasselt, H., Lanctot, M. and De Freitas, N. (2016) ‘Dueling network architectures for deep reinforcement learning’, Proceedings of the 33rd International Conference on Machine Learning, 48, pp. 1995–2003. (proceedings.mlr.press)
posted @ 2026-06-15 20:07  离心律  阅读(13)  评论(0)    收藏  举报