# 第 14 章　深度强化学习

> 来源：https://deeplearning.bnuai.com/chapters/14-deep-reinforcement-learning ｜ 作者：唐志清（北京师范大学） ｜ 更新：2026-11-01 ｜ 内容依据邱锡鹏《神经网络与深度学习》（https://nndl.ai/）及作者公开课件

## 学习目标

<div class="goals">

- 掌握强化学习的基本要素（状态、动作、策略、奖励、状态转移）和马尔可夫决策过程；
- 理解总回报、折扣率和强化学习的目标函数；
- 掌握状态值函数、Q 函数及其**贝尔曼方程**，理解策略迭代与值迭代；
- 掌握蒙特卡罗方法、时序差分学习，以及 **SARSA** 和 **Q 学习**的区别（同策略 vs. 异策略）；
- 掌握 **DQN** 的两个关键技巧：经验回放和目标网络；
- 掌握策略梯度定理与 REINFORCE 算法，理解基线和 Actor-Critic 如何降低方差。

</div>

## 课件幻灯片

> 本章课件共 51 页，可在网页中逐页浏览：https://deeplearning.bnuai.com/chapters/14-deep-reinforcement-learning；PDF 下载：https://deeplearning.bnuai.com/pdf/nndl-ch14.pdf

## 讲义

### 14.1 强化学习问题

**强化学习**是指一类从（与环境）交互中不断学习的问题以及解决这类问题的方法。与监督学习不同，强化学习没有直接的“正确答案”，智能体只能通过试错，从环境给出的**奖励**中学习如何决策；而且奖励往往是**延迟**的——下棋时只有终局才知道输赢，需要解决“功劳分配”问题。[幻灯片 2](#slide-2) [幻灯片 3](#slide-3)

**基本要素**：[幻灯片 4](#slide-4)

- **状态** $s$：对环境的描述；**动作** $a$：对智能体行为的描述；
- **策略** $\pi(a\mid s)$：智能体根据状态决定下一步动作的函数，可以是确定性的或随机性的；
- **状态转移概率** $p(s'\mid s,a)$：在状态 $s$ 下执行动作 $a$ 后，环境转移到 $s'$ 的概率；
- **即时奖励** $r(s,a,s')$：一个标量函数，执行动作后环境给出的反馈。

智能体与环境的交互可以看作一个**马尔可夫决策过程**（MDP）：下一个状态只依赖于当前状态和动作，$p(s_{t+1}\mid s_t,a_t,\cdots,s_0,a_0)=p(s_{t+1}\mid s_t,a_t)$。给定策略，一个**轨迹** $\tau=s_0,a_0,s_1,r_1,a_1,\cdots$ 的概率为 [幻灯片 6](#slide-6) [幻灯片 7](#slide-7)

$$
p(\tau)=p(s_0)\prod_{t=0}^{T-1}\pi(a_t\mid s_t)\,p(s_{t+1}\mid s_t,a_t).
$$

**总回报**：一个回合的累积奖励。对于无终止状态的持续任务，需要引入**折扣率** $\gamma\in[0,1]$：[幻灯片 8](#slide-8)

$$
G(\tau)=\sum_{t=0}^{T-1}\gamma^t r_{t+1}.
$$

$\gamma$ 接近 0 时智能体更在意短期回报，接近 1 时更在意长期回报。强化学习的**目标**是学习一个策略，使得期望总回报最大：$\mathcal J(\theta)=\mathbb E_{\tau\sim p_\theta(\tau)}\big[G(\tau)\big]$。[幻灯片 9](#slide-9)

强化学习算法大致分为三类：**基于值函数**的方法、**基于策略函数**的方法，以及二者结合的 **Actor-Critic** 方法。用深度神经网络来表示值函数或策略，就是**深度强化学习**。[幻灯片 10](#slide-10) [幻灯片 11](#slide-11)

```mermaid
flowchart TB
  RL["强化学习"] --> MB["基于模型<br/>（已知 p 与 r）"]
  RL --> MF["模型无关"]
  MB --> PI["策略迭代"]
  MB --> VI["值迭代"]
  MF --> VB["基于值函数"]
  MF --> PB["基于策略函数"]
  VB --> MC["蒙特卡罗"]
  VB --> TD["时序差分"]
  TD --> SARSA["SARSA（同策略）"]
  TD --> QL["Q 学习（异策略）"]
  QL --> DQN["DQN"]
  PB --> RF["REINFORCE"]
  RF --> AC["Actor-Critic"]
  TD -.-> AC
```

### 14.2 值函数

为了评估策略 $\pi$，定义两个**值函数**：[幻灯片 13](#slide-13) [幻灯片 14](#slide-14)

$$
V^\pi(s)=\mathbb E_{\tau\sim p(\tau)}\Big[\sum_{t=0}^{T-1}\gamma^tr_{t+1}\,\Big|\,\tau_{s_0}=s\Big],\qquad
Q^\pi(s,a)=\mathbb E_{s'\sim p(s'\mid s,a)}\big[r(s,a,s')+\gamma V^\pi(s')\big].
$$

$V^\pi(s)$ 是从状态 $s$ 出发、按策略 $\pi$ 执行的期望总回报；$Q^\pi(s,a)$ 是在状态 $s$ 执行动作 $a$ 后再按策略 $\pi$ 执行的期望总回报，二者满足 $V^\pi(s)=\mathbb E_{a\sim\pi(a\mid s)}\big[Q^\pi(s,a)\big]$。

**贝尔曼方程**：值函数可以递归地计算——当前状态的值等于即时奖励加上下一状态值的折扣期望：[幻灯片 15](#slide-15) [幻灯片 16](#slide-16)

$$
V^\pi(s)=\mathbb E_{a\sim\pi(a\mid s)}\mathbb E_{s'\sim p(s'\mid s,a)}\big[r(s,a,s')+\gamma V^\pi(s')\big],
$$

$$
Q^\pi(s,a)=\mathbb E_{s'\sim p(s'\mid s,a)}\Big[r(s,a,s')+\gamma\,\mathbb E_{a'\sim\pi(a'\mid s')}\big[Q^\pi(s',a')\big]\Big].
$$

**最优策略**：存在一个策略 $\pi^*$，使得对所有状态 $V^{\pi^*}(s)\ge V^\pi(s)$。最优 Q 函数满足**贝尔曼最优方程** $Q^*(s,a)=\mathbb E_{s'}\big[r(s,a,s')+\gamma\max_{a'}Q^*(s',a')\big]$，最优策略为 $\pi^*(s)=\arg\max_aQ^*(s,a)$。值函数还可以用来**改进策略**：若新策略 $\pi'(s)=\arg\max_aQ^\pi(s,a)$，则 $\pi'$ 不比 $\pi$ 差。[幻灯片 17](#slide-17)

### 14.3 基于模型的方法：动态规划

当 MDP 的状态转移概率 $p(s'\mid s,a)$ 和奖励函数 $r(s,a,s')$ 已知时，可以用**动态规划**求解值函数。[幻灯片 18](#slide-18) [幻灯片 19](#slide-19)

- **策略迭代**：交替进行**策略评估**（用贝尔曼方程迭代计算当前策略的 $V^\pi$，直到收敛）和**策略改进**（$\pi(s)=\arg\max_a\mathbb E_{s'}[r+\gamma V^\pi(s')]$），直到策略不再变化。[幻灯片 20](#slide-20)
- **值迭代**：把策略评估和策略改进合并，直接用贝尔曼最优方程迭代 $V(s)\leftarrow\max_a\mathbb E_{s'}\big[r(s,a,s')+\gamma V(s')\big]$，收敛后再导出最优策略。[幻灯片 21](#slide-21)

动态规划的局限：需要已知模型；状态空间大时计算代价高（需要遍历所有状态），且无法直接用于连续状态。

### 14.4 模型无关的方法：蒙特卡罗与时序差分

在模型未知时，只能通过与环境交互**采样**来估计值函数。[幻灯片 22](#slide-22)

**蒙特卡罗方法**：从状态 $s$、动作 $a$ 出发，按策略 $\pi$ 采样 $N$ 个完整轨迹，用平均回报估计 $Q^\pi(s,a)\approx\hat Q^\pi(s,a)=\frac1N\sum_{n=1}^{N}G(\tau^{(n)}_{s_0=s,a_0=a})$，再改进策略。[幻灯片 23](#slide-23)

**利用与探索**。如果总是选择当前认为最好的动作（**利用**），可能永远发现不了更好的动作；需要一定的**探索**。常用 **$\epsilon$-贪心法**：[幻灯片 24](#slide-24)

$$
\pi^\epsilon(s)=\begin{cases}\pi(s) & \text{以概率}\ 1-\epsilon,\\ \text{随机选择}\ \mathcal A\ \text{中的动作} & \text{以概率}\ \epsilon.\end{cases}
$$

用于采样的策略 $\pi^\epsilon$ 与被优化的目标策略 $\pi$ 相同时称为**同策略**，否则称为**异策略**。

**时序差分学习**（TD）：蒙特卡罗方法需要等一个完整回合结束才能更新，效率低、方差大。TD 方法结合了动态规划和蒙特卡罗：每走一步，就用“即时奖励 + 下一状态的估计值”作为目标，更新当前估计：[幻灯片 25](#slide-25)

$$
\hat Q(s,a)\leftarrow\hat Q(s,a)+\alpha\big(r+\gamma\hat Q(s',a')-\hat Q(s,a)\big),
$$

括号内称为**时序差分误差**。这种用估计来更新估计的做法称为**自举**。

- **SARSA 算法**（State–Action–Reward–State–Action）：$a'$ 由当前的 $\epsilon$-贪心策略选出，即用实际执行的下一个动作更新，是**同策略**算法。[幻灯片 26](#slide-26)
- **Q 学习算法**：直接用下一状态的**最大** Q 值作为目标，是**异策略**算法：[幻灯片 27](#slide-27)

$$
Q(s,a)\leftarrow Q(s,a)+\alpha\Big(r+\gamma\max_{a'}Q(s',a')-Q(s,a)\Big).
$$

在网格世界中运行表格型 Q 学习，观察 Q 值如何从终点逐步传播、ε-贪心如何平衡探索与利用：

> （此处为交互演示，请在网页中使用：https://deeplearning.bnuai.com/chapters/14-deep-reinforcement-learning）

<p class="demo-link">在单独页面中打开：<a href="/demos/q-learning">Q 学习网格世界</a></p>

### 14.5 深度 Q 网络

当状态空间很大或连续时（如 Atari 游戏的画面），无法用表格存储 Q 值，需要用一个参数化函数 $Q_\phi(\boldsymbol s,\boldsymbol a)$（深度神经网络）来近似——这就是**值函数近似**。[幻灯片 28](#slide-28) 训练时希望 Q 网络的输出逼近 Q 学习的目标，即最小化 [幻灯片 29](#slide-29)

$$
\mathcal L(\boldsymbol s,\boldsymbol a,\boldsymbol s'\mid\phi)=\Big(r+\gamma\max_{\boldsymbol a'}Q_{\hat\phi}(\boldsymbol s',\boldsymbol a')-Q_\phi(\boldsymbol s,\boldsymbol a)\Big)^2 .
$$

直接这样训练存在两个问题：**目标不稳定**——目标本身依赖于正在更新的参数；**样本之间有很强的相关性**——连续的交互数据不满足独立同分布。**深度 Q 网络**（DQN）用两个技巧来解决：[幻灯片 30](#slide-30)

- **目标网络冻结**：用一个参数为 $\hat\phi$ 的目标网络计算目标值，$\hat\phi$ 每隔一段时间才从 $\phi$ 复制一次，在此期间保持不变；
- **经验回放**：把交互得到的转移 $(s,a,r,s')$ 存入一个**回放缓冲区**，训练时从中随机采样小批量，打破样本之间的相关性，并提高数据利用率。

DQN 以原始像素为输入，在 49 种 Atari 游戏中的大部分上达到或超过了人类玩家的水平。[幻灯片 31](#slide-31) [幻灯片 33](#slide-33) 之后的改进包括 Double DQN（解决 Q 值过估计）、Dueling DQN、优先经验回放等。

**AlphaGo** 结合了深度网络与蒙特卡罗树搜索：先用人类棋谱监督训练**策略网络**，再通过自我对弈用策略梯度强化学习，并训练一个**值网络**评估局面；对弈时用策略网络缩小搜索宽度、用值网络减少搜索深度。后续的 AlphaGo Zero 完全不依赖人类棋谱。[幻灯片 34](#slide-34) [幻灯片 35](#slide-35)

### 14.6 基于策略函数的方法

基于值函数的方法需要先学 Q 值再取 $\arg\max$，不便处理连续动作空间。**策略搜索**直接用参数化的策略 $\pi_\theta(a\mid s)$（如神经网络）来表示策略，通过梯度上升最大化目标 $\mathcal J(\theta)$。[幻灯片 37](#slide-37) [幻灯片 38](#slide-38)

**策略梯度**：利用 $\nabla_\theta p_\theta(\tau)=p_\theta(\tau)\nabla_\theta\log p_\theta(\tau)$（对数导数技巧），并注意到 $\log p_\theta(\tau)$ 中只有策略项依赖 $\theta$（状态转移与 $\theta$ 无关），可以得到 [幻灯片 39](#slide-39) [幻灯片 40](#slide-40) [幻灯片 41](#slide-41)

$$
\frac{\partial\mathcal J(\theta)}{\partial\theta}=\mathbb E_{\tau\sim p_\theta(\tau)}\Big[\sum_{t=0}^{T-1}\frac{\partial}{\partial\theta}\log\pi_\theta(a_t\mid s_t)\,\gamma^tG(\tau_{t:T})\Big],
$$

其中 $G(\tau_{t:T})$ 是从时刻 $t$ 开始的回报。直观地说：回报高的动作，提高其概率；回报低的动作，降低其概率。

**REINFORCE 算法**：用蒙特卡罗采样的轨迹估计上式，每采一条轨迹，就对每个时刻 $t$ 更新 [幻灯片 42](#slide-42)

$$
\theta\leftarrow\theta+\alpha\,\gamma^tG(\tau_{t:T})\,\frac{\partial}{\partial\theta}\log\pi_\theta(a_t\mid s_t).
$$

**降低方差：引入基线**。REINFORCE 的梯度估计方差很大，训练不稳定。可以从回报中减去一个只依赖于状态的**基线** $b(s_t)$，这不改变梯度的期望（因为 $\mathbb E_{a}\big[\nabla\log\pi_\theta(a\mid s)\big]b(s)=0$），却能显著降低方差：[幻灯片 43](#slide-43) [幻灯片 44](#slide-44)

$$
\theta\leftarrow\theta+\alpha\,\gamma^t\big(G(\tau_{t:T})-b(s_t)\big)\frac{\partial}{\partial\theta}\log\pi_\theta(a_t\mid s_t).
$$

一个自然的选择是 $b(s_t)=V^{\pi_\theta}(s_t)$，用一个参数为 $\phi$ 的网络 $V_\phi(s)$ 来学习它，即**带基线的 REINFORCE 算法**。[幻灯片 45](#slide-45) [幻灯片 46](#slide-46)

**Actor-Critic 算法**：进一步用时序差分来估计回报，$G(\tau_{t:T})\approx r_{t+1}+\gamma V_\phi(s_{t+1})$，这样每走一步就可以更新，无需等待回合结束。其中**演员**（Actor）是策略 $\pi_\theta(a\mid s)$，负责选择动作；**评论员**（Critic）是值函数 $V_\phi(s)$，负责评价动作的好坏。每一步：[幻灯片 47](#slide-47) [幻灯片 48](#slide-48)

$$
\delta=r_{t+1}+\gamma V_\phi(s_{t+1})-V_\phi(s_t),\qquad
\phi\leftarrow\phi+\beta\,\delta\,\frac{\partial V_\phi(s_t)}{\partial\phi},\qquad
\theta\leftarrow\theta+\alpha\,\gamma^t\delta\,\frac{\partial}{\partial\theta}\log\pi_\theta(a_t\mid s_t).
$$

| 算法 | 类型 | 回报估计 | 特点 |
| --- | --- | --- | --- |
| 策略迭代 / 值迭代 | 基于模型 | 动态规划 | 需已知 MDP |
| SARSA | 值函数，同策略 | 时序差分 | 稳健、偏保守 |
| Q 学习 / DQN | 值函数，异策略 | 时序差分 | 可用回放数据 |
| REINFORCE | 策略函数 | 蒙特卡罗 | 无偏但方差大 |
| Actor-Critic | 策略 + 值函数 | 时序差分 | 方差小、可单步更新 |

[幻灯片 49](#slide-49) [幻灯片 50](#slide-50)

## 本章小结

- 强化学习通过与环境交互、最大化期望总回报来学习策略，可以形式化为马尔可夫决策过程。
- 值函数满足贝尔曼方程；模型已知时用策略迭代 / 值迭代，未知时用蒙特卡罗或时序差分（SARSA 同策略、Q 学习异策略）。
- DQN 用深度网络近似 Q 函数，依靠经验回放和目标网络稳定训练。
- 策略梯度直接优化策略：REINFORCE 无偏但方差大，基线和 Actor-Critic 降低方差。

## 思考题与习题 {#exercises}

<div class="exercise-list">

1. **（计算）** 某回合奖励序列为 $r_1=0,r_2=0,r_3=1$，折扣率 $\gamma=0.9$，计算 $G$；若 $\gamma=0.5$ 呢？
2. **（推导）** 从值函数的定义出发推导 $V^\pi(s)$ 的贝尔曼方程。
3. **（分析）** 在经典的“悬崖行走”问题中，SARSA 和 Q 学习学到的路径有何不同？用同策略 / 异策略解释原因。
4. **（概念）** 解释 DQN 中经验回放和目标网络各自解决了什么问题。为什么 Q 学习可以使用经验回放，而 SARSA 不太适合？
5. **（推导）** 证明引入基线 $b(s)$ 不改变策略梯度的期望：$\mathbb E_{a\sim\pi_\theta}\big[\nabla_\theta\log\pi_\theta(a\mid s)\,b(s)\big]=0$。
6. **（编程）** 在 Gymnasium 的 CartPole 环境上分别实现 DQN 和 Actor-Critic，比较它们的样本效率和训练稳定性。

</div>

**部分提示**

- 第 1 题：$\gamma=0.9$：$G=0.81$；$\gamma=0.5$：$G=0.25$。
- 第 3 题：SARSA 考虑了探索时掉下悬崖的风险，学到远离悬崖的安全路径；Q 学习按贪心目标学习，学到紧贴悬崖的最短路径（但训练时因探索更常掉落）。
- 第 4 题：Q 学习是异策略的，目标中的 $\max$ 与产生数据的行为策略无关；SARSA 的目标依赖当前策略选出的 $a'$，旧数据来自旧策略。
- 第 5 题：$\sum_a\pi_\theta(a\mid s)\nabla\log\pi_\theta(a\mid s)=\nabla\sum_a\pi_\theta(a\mid s)=\nabla1=0$。

## 延伸阅读

- 教材：邱锡鹏《神经网络与深度学习》第 14 章「深度强化学习」。
- Sutton R S, Barto A G. Reinforcement Learning: An Introduction, 2nd ed., 2018。
- Mnih V, et al. Human-level control through deep reinforcement learning, Nature 2015；Silver D, et al. Mastering the game of Go with deep neural networks and tree search, Nature 2016。
- 实践：[nndl-practice](https://github.com/nndl/nndl-practice) 中的强化学习相关章节。
- 交互：[Q 学习网格世界](https://deeplearning.bnuai.com/demos/q-learning)。
- 第二版对应章节：第 12 章「深度强化学习」。
