181 lines
8.2 KiB
Markdown
181 lines
8.2 KiB
Markdown
---
|
||
title: 01-DQN-深度Q学习
|
||
draft: false
|
||
tags:
|
||
- 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$,会导致”自己追逐自己”的震荡现象。这是因为 $y$ 和 $Q(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 等算法的基石。
|
||
> |