Axi's Blog

Back

RL 学习笔记(7):Q 学习、DQN 及相关改进Blur image

本博客基于西安交通大学强化学习课程 PPT 改编,历经 Gemini 以及本人总结以及整理形成。

离轨策略学习与 Q 学习#

离轨策略学习 (Off-Policy Learning) 回顾#

动机:为何需要离轨学习?

  • 目标:通常我们想学习和评估的是最优策略 π\pi_* 或某个特定目标策略 π\pi 的价值 (vπ,qπv_\pi, q_\pi)。
  • 数据来源:但我们实际拥有的经验数据 {St,At,Rt+1,St+1,}\{S_t, A_t, R_{t+1}, S_{t+1}, \dots\} 往往是由另一个行为策略 μ\mu (Behavior Policy) 生成的,这个策略可能更具探索性或完全不同。
  • 重要性
    • 允许从观察中学习(例如,学习人类演示)。
    • 可以复用历史数据(由旧策略生成)。
    • 核心优势:可以在遵循探索性策略 μ\mu 进行数据收集的同时,学习到最优(通常是贪心)策略 π\pi_*
    • 甚至可以同时学习多个目标策略。

Q 学习 (Q-Learning):离轨 TD 控制#

Q 学习是强化学习中最著名和最广泛使用的算法之一,它是一种离轨的时序差分 (Off-Policy TD) 控制算法,直接学习最优动作价值函数 q(s,a)q_*(s, a)

  • 核心思想:Q 学习的更新基于贝尔曼最优方程:

    q(s,a)=E[Rt+1+γmaxaq(St+1,a)St=s,At=a]q_*(s, a) = \mathbb{E}[R_{t+1} + \gamma \max_{a'} q_*(S_{t+1}, a') | S_t=s, A_t=a]

    对于一个观测到的转移 (St,At,Rt+1,St+1)(S_t, A_t, R_{t+1}, S_{t+1}),Q 学习使用 TD 方法来逼近这个目标:

    • Q 学习 TD 目标 (Q-Learning TD Target)Rt+1+γmaxaQ(St+1,a)R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a')。它使用了在下一状态 St+1S_{t+1} 所有可能动作中具有最大 Q 值估计的那个动作来形成目标,这隐式地代表了最优策略在 St+1S_{t+1} 会采取的行动价值。
    • Q 学习更新规则Q(St,At)Q(St,At)+α[Rt+1+γmaxaQ(St+1,a)Q 学习目标Q(St,At)]Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha [ \underbrace{R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a')}_{\text{Q 学习目标}} - Q(S_t, A_t) ]
  • 离轨 (Off-Policy) 特性

    • 关键在于 Q 学习的更新目标不依赖于实际执行的行为策略 μ\muSt+1S_{t+1} 时选择了哪个动作 At+1A_{t+1}。它总是使用 maxaQ(St+1,a)\max_{a'} Q(S_{t+1}, a') 作为对未来最优回报的估计。
    • 这意味着 Q 学习可以使用由任何能够保证持续探索所有状态-动作对的行为策略 μ\mu(例如 ϵ\epsilon-greedy)生成的数据,来学习最优动作价值函数 qq_*
    • 由于更新规则与行为策略 μ\mu 无关,Q 学习不需要使用重要性采样 (Importance Sampling) 来进行校正。
  • Q 学习控制算法 (表格形式)

算法参数: 步长 α ∈ (0, 1], 探索参数 ε > 0 (用于行为策略)
初始化:
  对于所有状态 s ∈ S⁺, 所有动作 a ∈ A(s):
    Q(s, a) ← 任意值 (例如 Q(s, a)=0)
  Q(终止状态, ·) ← 0

循环 对每个 episode:
  初始化 S (该 episode 的第一个状态)
  循环 对 episode 中的每一步:
    // (行为策略 μ) 根据当前 Q 值选择动作 A (例如使用 ε-greedy 策略)
    A ← ε-greedy(S, Q)
    执行动作 A, 观察得到奖励 R 和下一状态 S'

    // Q 学习更新 (目标策略 π 是贪心策略)
    如果 S' 是终止状态:
      Target ← R
    否则:
      Target ← R + γ * max_{a'} Q(S', a')
    Q(S, A) ← Q(S, A) + α * [Target - Q(S, A)]

    S ← S'
  直到 S 是终止状态
plaintext
  • 收敛性:在保证所有状态-动作对被无限次访问(通过行为策略)且步长参数满足 Robbins-Monro 条件的情况下,Q 学习保证收敛到最优动作价值函数 qq_*

  • Sarsa vs. Q 学习 (悬崖行走 Cliff Walking 例子)

    • Sarsa (同轨):学习其探索性行为策略(如 ϵ\epsilon-greedy)的价值,倾向于选择更安全的路径以避免因探索而掉下悬崖,其学习过程中的平均回报可能更高。
    • Q 学习 (离轨):直接学习最优(贪心)策略的价值,该策略可能包含风险(如贴着悬崖走)。即使 Q 函数收敛到最优值,其实际行为(由 ϵ\epsilon-greedy 决定)仍可能导致偶尔失败。
    • 区别:Sarsa 学习“如何在探索时表现良好”,Q 学习学习“最优情况下该怎么做”。

Q 学习相关问题与改进#

期望 Sarsa (Expected Sarsa)#

  • 回顾:Sarsa 更新目标 Rt+1+γQ(St+1,At+1)R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) 使用了随机采样的下一个动作 At+1A_{t+1}
  • 期望 Sarsa 思想:使用下一状态 St+1S_{t+1} 处动作价值的期望值代替采样值,以减小方差。
  • 更新规则Q(St,At)Q(St,At)+α[Rt+1+γaπ(aSt+1)Q(St+1,a)Q(St,At)]Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \left[ R_{t+1} + \gamma \sum_{a'} \pi(a'|S_{t+1}) Q(S_{t+1}, a') - Q(S_t, A_t) \right] 其中 π\pi 是当前遵循的行为策略。
  • 与 Q 学习关系:若 π\pi 是贪心策略,则 aπ(aSt+1)Q(St+1,a)=maxaQ(St+1,a)\sum_{a'} \pi(a'|S_{t+1}) Q(S_{t+1}, a') = \max_{a'} Q(S_{t+1}, a'),期望 Sarsa 等价于 Q 学习。

最大化偏差 (Maximization Bias)#

  • 问题:Q 学习(以及 Sarsa 在策略改进时)由于在更新目标中使用了 max\max 操作作用于带有噪声的 Q 值估计,会系统性地高估 (Overestimate) 真实的动作价值。
  • 原因E[maxaQ(s,a)]maxaE[Q(s,a)]=maxaq(s,a)\mathbb{E}[\max_a Q(s, a)] \ge \max_a \mathbb{E}[Q(s, a)] = \max_a q_*(s, a)
  • 危害:非均匀的高估可能导致算法偏好实际上次优的动作。

双 Q 学习 (Double Q-Learning)#

  • 目的:解决最大化偏差问题。
  • 核心思想:解耦目标动作的选择 (Selection)评估 (Evaluation)。维护两套独立的 Q 值估计 Q1Q_1Q2Q_2
  • 更新规则:随机选择更新 Q1Q_1Q2Q_2
    • 更新 Q1Q_1 时:用 Q1Q_1 选择 St+1S_{t+1} 的最佳动作 A=argmaxaQ1(St+1,a)A^* = \arg\max_a Q_1(S_{t+1}, a),但用 Q2Q_2 评估该动作 Q2(St+1,A)Q_2(S_{t+1}, A^*) 来计算 TD 目标。 Q1(St,At)Q1(St,At)+α[Rt+1+γQ2(St+1,argmaxaQ1(St+1,a))Q1(St,At)]Q_1(S_t, A_t) \leftarrow Q_1(S_t, A_t) + \alpha [R_{t+1} + \gamma Q_2(S_{t+1}, \arg\max_a Q_1(S_{t+1}, a)) - Q_1(S_t, A_t)]
    • 更新 Q2Q_2 时:对称操作。 Q2(St,At)Q2(St,At)+α[Rt+1+γQ1(St+1,argmaxaQ2(St+1,a))Q2(St,At)]Q_2(S_t, A_t) \leftarrow Q_2(S_t, A_t) + \alpha [R_{t+1} + \gamma Q_1(S_{t+1}, \arg\max_a Q_2(S_{t+1}, a)) - Q_2(S_t, A_t)]
  • 行为策略:通常基于 Q1+Q2Q_1 + Q_2 来选择动作 (例如 ϵ\epsilon-greedy)。
  • 效果:显著减少最大化偏差,得到更准确的价值估计。

价值函数近似 (VFA) 与深度强化学习 (DRL) 简介#

价值函数近似 (VFA)#

  • 动机:当状态或动作空间巨大,无法使用表格存储所有 Q 值时(维度灾难)。
  • 方法:使用参数化的函数 q^(s,a;w)\hat{q}(s, a; \mathbf{w}) 来近似 q(s,a)q_*(s, a),其中 w\mathbf{w} 是需要学习的参数。通常需要将状态 ss (有时包括动作 aa)表示为特征向量 x(s)\mathbf{x}(s)x(s,a)\mathbf{x}(s, a)
  • 学习:通过随机梯度下降 (SGD) 调整参数 w\mathbf{w},以最小化近似值与 TD 目标之间的误差(例如均方误差)。
    • Q 学习 VFA 更新ww+α[Rt+1+γmaxaq^(St+1,a;w)TD 目标q^(St,At;w)]wq^(St,At;w)\mathbf{w} \leftarrow \mathbf{w} + \alpha [ \underbrace{R_{t+1} + \gamma \max_{a'} \hat{q}(S_{t+1}, a'; \mathbf{w})}_{\text{TD 目标}} - \hat{q}(S_t, A_t; \mathbf{w}) ] \nabla_\mathbf{w} \hat{q}(S_t, A_t; \mathbf{w})
  • 挑战:“死亡三角” (Deadly Triad):当函数近似(尤其非线性)、自举(TD 方法)和离轨学习这三者结合时,训练过程可能不稳定甚至发散。

深度强化学习 (DRL)#

  • 核心:使用深度神经网络 (DNN) 作为函数近似器 q^(s,a;w)\hat{q}(s, a; \mathbf{w})。利用 DNN 强大的表示能力处理高维输入(如图像像素)和复杂价值函数。
  • 引例:深度 Q 网络 (DQN):下一节将详细讨论 DQN 及其关键技术,这些技术正是为了克服“死亡三角”带来的挑战。

深度 Q 网络 (Deep Q-Network, DQN) 及其改进#

DQN 标志着深度学习与强化学习成功结合的里程碑,尤其在处理高维输入(如 Atari 游戏)方面取得了突破。

DQN 核心思想#

  • 使用深度神经网络(通常是 CNN + MLP)Q(s,a;w)Q(s, a; \mathbf{w}) 来近似最优动作价值函数 Q(s,a)Q^*(s, a)
  • 输入为状态 ss(如游戏画面帧),输出为每个离散动作 aa 的 Q 值。
  • 基于 Q 学习进行训练,但需要引入特殊技术来保证稳定性和效率。

经验回放 (Experience Replay)#

  • 问题:直接使用按时间顺序的经验训练 DNN 会因数据相关性导致训练不稳定,且样本效率低。
  • 方法:将经验转移 (st,at,Rt+1,st+1)(s_t, a_t, R_{t+1}, s_{t+1}) 存储在回放缓冲区 (Replay Buffer) D\mathcal{D} 中。训练时,从 D\mathcal{D}随机均匀采样小批量 (mini-batch) 数据进行梯度更新。
  • 优点:打破数据相关性,提高样本利用率。

目标网络 (Target Network)#

  • 问题:Q 学习的 TD 目标 yt=Rt+1+γmaxaQ(St+1,a;w)y_t = R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a'; \mathbf{w}) 使用当前正在更新的网络 w\mathbf{w} 来计算目标值。这导致目标值随着 w\mathbf{w} 的微小变动而快速变化,容易造成训练不稳定(追逐移动的目标)。
  • 方法:引入一个独立的目标网络 Q(s,a;w)Q(s, a; \mathbf{w}^-),其参数 w\mathbf{w}^- 更新得比在线网络 w\mathbf{w} 慢得多。TD 目标使用目标网络计算: yt=Rt+1+γmaxaQ(St+1,a;w)y_t = R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a'; \mathbf{w}^-) 在线网络 w\mathbf{w} 的更新目标是 yty_t。目标网络参数 w\mathbf{w}^- 定期(硬更新)或缓慢(软更新)从 w\mathbf{w} 复制/跟踪而来。
  • 优点:提供了更稳定的 TD 目标,显著提高训练稳定性。

双 DQN (Double DQN)#

  • 问题:即使使用了目标网络,maxaQ(St+1,a;w)\max_{a'} Q(S_{t+1}, a'; \mathbf{w}^-) 仍然存在最大化偏差问题,因为它在(可能带噪声的)目标网络 Q 值上取最大。
  • 方法:结合目标网络和 Double Q-learning 的思想,解耦目标动作的选择评估
    • 使用在线网络 Q(;w)Q(\cdot; \mathbf{w}) 选择下一状态 St+1S_{t+1} 的最佳动作:A=argmaxaQ(St+1,a;w)A^* = \arg\max_{a'} Q(S_{t+1}, a'; \mathbf{w})
    • 使用目标网络 Q(;w)Q(\cdot; \mathbf{w}^-) 评估这个选定动作 AA^* 的价值。
    • Double DQN TD 目标ytDoubleDQN=Rt+1+γQ(St+1,argmaxaQ(St+1,a;w)用在线网络选择动作,w)y_t^{\text{DoubleDQN}} = R_{t+1} + \gamma Q(S_{t+1}, \underbrace{\arg\max_{a'} Q(S_{t+1}, a'; \mathbf{w})}_{\text{用在线网络选择动作}}, \mathbf{w}^-)
  • 优点:有效缓解最大化偏差,得到更准确的 Q 值估计。

优先经验回放 (Prioritized Experience Replay)#

  • 问题:均匀采样经验可能效率不高,因为某些经验(通常是 TD 误差大的)包含更多学习信息。
  • 方法:根据 TD 误差的绝对值赋予经验不同的优先级 ptp_t非均匀地采样经验,优先级高的经验被选中的概率更大。同时,使用重要性采样 (IS) 权重 ωt\omega_t 来校正由此引入的偏差。
  • 优点:聚焦于“有价值”的经验,加速学习过程。

对决 DQN (Dueling DQN)#

  • 问题:标准 DQN 网络直接估计 Q 值,可能无法有效区分状态本身的价值和动作带来的相对优势。
  • 方法:设计一种特殊的网络架构 (Dueling Network Architecture),将 Q 值分解为两部分:
    • 状态价值 V(s)V(s):由一个网络流输出。
    • 动作优势 A(s,a)A(s, a):由另一个网络流输出。
    • 通过特定的聚合层V(s)V(s)A(s,a)A(s, a) 合并得到最终的 Q(s,a)Q(s, a),例如使用均值聚合: Q(s,a;w)=V(s;wV)+(A(s,a;wA)1AaA(s,a;wA))Q(s, a; \mathbf{w}) = V(s; \mathbf{w}^V) + \left( A(s, a; \mathbf{w}^A) - \frac{1}{|\mathcal{A}|} \sum_{a'} A(s, a'; \mathbf{w}^A) \right)
  • 优点:能够更有效地学习状态价值,尤其在不同动作价值差异不大的情况下,通常能带来性能提升。

DQN 算法总结#

一个现代的 DQN 实现通常会结合上述多种技术:

初始化:
  在线 Q 网络参数 w, 目标 Q 网络参数 w⁻ ← w
  回放缓冲区 D (容量 N)

循环 对每个 episode:
  初始化状态 S₁
  循环 对于 t = 1, T:
    选择动作 Aₜ ← 基于 Q(Sₜ, ·; w) 的 ε-greedy 策略
    执行动作 Aₜ, 观察奖励 R_{t+1}, 下一状态 S_{t+1}
    将转移 (Sₜ, Aₜ, R_{t+1}, S_{t+1}) 存入 D

    // 从 D 中采样 N 个转移 (Sⱼ, Aⱼ, R_{j+1}, S_{j+1}) (可能使用优先回放)
    // 计算采样权重 ωⱼ (如果使用优先回放,否则 ωⱼ=1)

    对于每个采样的转移 j = 1 to N:
      如果 S_{j+1} 是终止状态:
        Targetⱼ ← R_{j+1}
      否则:
        // 使用 Double DQN 计算目标值
        BestAction' ← argmax_{a'} Q(S_{j+1}, a'; w)
        Targetⱼ ← R_{j+1} + γ * Q(S_{j+1}, BestAction'; w⁻) // 使用目标网络评估

      // 计算损失,例如 Lⱼ = (Targetⱼ - Q(Sⱼ, Aⱼ; w))²
      // (如果使用优先回放,可能需要用 ωⱼ 加权损失或梯度)

    // 基于采样的 mini-batch 的总损失,执行一步梯度下降更新在线网络参数 w
    // (例如,Δw ∝ Σⱼ ωⱼ * (Targetⱼ - Q(Sⱼ, Aⱼ; w)) * ∇w Q(Sⱼ, Aⱼ; w))

    // 定期更新目标网络参数 w⁻
    // 例如,每 C 步: w⁻ ← w (硬更新)
    // 或每一步: w⁻ ← τw + (1-τ)w⁻ (软更新)
plaintext
  • Rainbow DQN:是一个著名的例子,它成功地将上述多种改进(以及 Noisy Nets、Distributional RL 等)结合起来,显著提升了性能。

结论#

  • Q 学习是强化学习中一种强大且广泛应用的离轨 TD 控制算法,它直接学习最优动作价值函数。
  • 处理大规模问题时,需要结合价值函数近似 (VFA),特别是使用深度神经网络 (DNN),即深度 Q 网络 (DQN)
  • 为了使 DQN 训练稳定、高效,发展出了一系列关键技术:经验回放、目标网络、双 DQN、优先经验回放、对决网络架构等。
  • 这些技术的组合(如 Rainbow DQN)极大地推动了 DRL 在复杂任务上的成功应用。理解这些基本组件及其原理对于深入学习和应用 DRL至关重要。
RL 学习笔记(7):Q 学习、DQN 及相关改进
https://axi404.top/blog/rl-note-7
Author 阿汐
Published at April 14, 2025
Comment seems to stuck. Try to refresh?✨