Files
2026-05-16 17:16:51 +08:00

8.2 KiB
Raw Permalink Blame History

title, draft, tags
title draft tags
01-DQN-深度Q学习 false
DQN
深度Q网络
强化学习
深度强化学习

1. 从 Q-Learning 到 DQN数学基石

在进入深度学习之前,我们需要理解强化学习的核心:最优策略的寻找

1.1 马尔可夫决策过程 (MDP)

强化学习通常建模为 MDP由五元组 (S, A, P, R, \gamma) 组成。我们的目标是最大化 累积期望回报

G_t = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}

其中 \gamma \in [0, 1] 是折扣因子,决定了对未来奖励的重视程度。

1.2 Q 函数与 Bellman 方程

Q 函数(动作价值函数) Q^\pi(s, a) 表示在状态 s 下采取动作 $a$,并在此后遵循策略 \pi 所能获得的期望回报。

根据 贝尔曼期望方程 (Bellman Expectation Equation)Q 函数满足:

Q^\pi(s, a) = \mathbb{E}_{\pi} \left[ R(s, a) + \gamma \sum_{s'} P(s'|s,a) \sum_{a'} \pi(a'|s') Q^\pi(s', a') \right]

或者等价的递归形式:

Q^\pi(s, a) = \mathbb{E}_{s', r} \left[ r + \gamma V^\pi(s') \right]

其中状态价值函数 $V^\pi(s) = \sum_a \pi(a|s) Q^\pi(s, a)$。

直觉解释: Q 函数衡量的是”在特定状态下选择特定动作”的好坏,而 V 函数衡量的是”处于某个状态”的好坏。两者通过策略 \pi 相互关联。

贝尔曼最优方程 (Bellman Optimality Equation) 最优 Q 函数 Q^* 满足:

Q^*(s, a) = \mathbb{E}_{s' \sim P} \left[ R(s, a) + \gamma \sum_{s'} P(s'|s,a) \max_{a'} Q^*(s', a') \right]

推导过程:

  1. 最优策略 \pi^* 满足:对每个状态 $s$,选择使 Q 值最大的动作。
  2. 因此 V^*(s) = \max_a Q^*(s, a)
  3. 代入 Q 函数的定义:Q^*(s, a) = R(s, a) + \gamma \sum_{s'} P(s'|s,a) V^*(s')
  4. V^*(s') = \max_{a'} Q^*(s', a') 替换,得到最终形式。

物理意义: 当前状态动作对的价值等于”即时奖励”加上”所有可能下一状态最优价值的折现期望”。这是一个递归定义,因为 Q^* 出现在等式两边。

1.3 传统 Q-Learning 的局限

传统的 Q-Learning 使用一个表格Q-Table来存储所有状态动作对。

  • 更新公式: Q(s, a) \leftarrow Q(s, a) + \alpha [R + \gamma \max_{a'} Q(s', a') - Q(s, a)]

  • 瓶颈: 当状态空间 S 是连续的(如图像)或维度极高时,表格法会遭遇“维度灾难”,无法存储也无法泛化。


2. DQN 的核心逻辑:函数拟合

DQN 的核心思想是:用一个深度神经网络 Q(s, a; \theta) 来替代 Q-Table。 神经网络通过学习参数 \theta 来模拟 Q^* 函数。

2.1 损失函数推导

为了训练网络,我们需要定义一个损失函数。借鉴监督学习的思路,我们将 Bellman 方程的右边视为“标签”,左边视为“预测值”。

目标值 (TD Target)

y = R + \gamma \max_{a'} Q(s', a'; \theta)

损失函数 (Mean Squared Error)

L(\theta) = \mathbb{E}_{(s, a, r, s') \sim D} \left[ \left( y - Q(s, a; \theta) \right]^2 \right)

3. DQN 的两大制胜法宝

如果直接按照上述公式训练网络极难收敛。DQN 引入了两个关键机制来解决稳定性问题。

3.1 经验回放 (Experience Replay)

  • 问题 1样本相关性 强化学习的样本是 时序相关的——相邻时刻的 (s_t, a_t, r_t, s_{t+1}) 高度相似。这违反了机器学习中 IID独立同分布假设导致梯度估计是有偏的。

  • 问题 2分布偏移 当前策略 \pi_\theta 决定了下一批样本的分布。旧策略采样的数据分布与当前策略不同,直接使用会破坏训练稳定性。

  • 机制: 将智能体的经验 (s_t, a_t, r_t, s_{t+1}) 存储在一个容量为 N 的巨大 Replay Buffer \mathcal{D} 中。训练时从中随机采样一个 Mini-batch ${(s_j, a_j, r_j, s'_j)}$。

  • 打破相关性的原理: 随机采样使得一个 Mini-batch 中的样本来自不同时间步它们之间的相关性被大幅削弱。同时Buffer 中可能包含不同策略下采集的数据,形成近似 IID 的混合分布。

  • 超参数选择: Buffer 大小通常为 10^5 至 $10^6$。太小会限制数据多样性,太大可能导致早期经验被稀释(可用优先级回放 PER 改善)。

3.2 目标网络 (Target Network)

  • 问题根源: 在计算 TD Target y_j = r_j + \gamma \max_{a'} Q(s'_j, a'_j; \theta^-) 时,如果目标值也使用正在更新的参数 $\theta$,会导致”自己追逐自己”的震荡现象。这是因为 yQ(s,a;\theta) 都依赖同一个 $\theta$,优化过程会不断改变”靶心”。

  • 机制: 维护两个网络:

    1. 评估网络 (Q-Network) 参数为 $\theta$,负责实时计算 Q 值和梯度下降。
    2. 目标网络 (Target Q-Network) 参数为 $\theta^-$,专门用于计算稳定的 TD Target。
  • 更新机制: 每隔 C 个训练步长,将 \theta 复制给 $\theta^-$$\theta^- \leftarrow \theta$。这种”软更新”(或”硬更新”)确保目标网络的变化是离散的、稳定的。

  • 为什么有效: 在一个更新周期内,目标 y 是固定的(因为 \theta^- 暂时不变),而评估网络 Q(s,a;\theta) 在不断接近这个固定目标。这解决了”移动靶心”问题。

  • 直觉类比: 想象你在练习射箭。目标网络就像一个固定的靶子(不随你每次射箭而移动),而评估网络是你的射击技术。通过不断逼近固定的靶子,你的动作才能逐步稳定。


4. DQN 训练全过程 (Algorithmic Flow)

  1. 初始化经验池 $D$。

  2. 初始化评估网络 Q(\theta) 和目标网络 $Q(\theta^-)$,使 $\theta^- = \theta$。

  3. 对于每一轮 (Episode)

    • 获取初始状态 $s$。

    • 对于每一步 (Step)

      • 使用 $\epsilon$-greedy 策略选择动作:以 \epsilon 概率随机探索,以 1-\epsilon 概率选择 $a = \arg\max Q(s, a; \theta)$。

      • 执行动作 $a$,观测 $r, s'$。

      • (s, a, r, s') 存入 $D$。

      • D 中随机采样 Batch。

      • 计算目标值 $y_j = r_j + \gamma \max_{a'} Q(s'_j, a'_j; \theta^-)$。

      • 通过梯度下降更新 $\theta$$\nabla_\theta (y_j - Q(s_j, a_j; \theta))^2$。

      • 每隔 C 步更新 $\theta^- = \theta$。


5. 可能出现的问题与改进方案

  • 过拟合与估计过高 (Overestimation Bias) DQN 经常倾向于高估 Q 值,因为 \max 操作会将正向误差放大。

    • 改进: Double DQN。使用评估网络选动作,目标网络算价值。
  • 样本利用率不均: 并不是所有经验都同样重要。

    • 改进: Prioritized Experience Replay (PER)。根据 TD-error 大小设置采样优先级。
  • 网络结构冗余: 某些状态下,动作对结果影响不大。

    • 改进: Dueling DQN。将 Q 网络分为状态价值 V(s) 和优势函数 A(s, a) 两部分。

6. 向 Policy Gradient 进发

DQN 虽然强大,但它有天然的缺陷:无法处理 连续动作空间,且无法学习 随机策略。为了解决这些问题,我们需要转向 策略梯度 (Policy Gradient) 方法。

  • A2C (Advantage Actor-Critic)

    它结合了 Value-based 和 Policy-based。Actor 负责选动作(策略),Critic 负责评价动作的好坏(价值)。通过引入 优势函数 (Advantage) A(s, a) = Q(s, a) - V(s) 来降低梯度的方差。

  • PPO (Proximal Policy Optimization)

    目前工业界最常用的算法。它解决了 Policy Gradient 步长难确定的问题。通过 重要性采样 (Importance Sampling)裁剪 (Clipping) 机制,确保策略更新不会偏离太远,从而极大地提升了训练的鲁棒性。

笔记要点回顾:

  • Q-Learning 依靠 Bellman 方程更新表格。

  • DQN 将表格换成神经元,用经验回放打碎相关性,用目标网络稳定目标。

  • DQN 是理解后面更复杂的 A3C、PPO 等算法的基石。