主题
基于模型的强化学习
基于模型的强化学习(Model-Based RL,MBRL)先学习或利用一个环境模型——状态转移
为什么需要模型
样本效率
无模型算法往往需要数百万甚至上亿步交互:Atari 上的 DQN 训练使用了 5000 万帧;MuJoCo 上的 PPO 通常需要数百万步。在仿真器里这尚可接受,但在真实世界中,一个机器人每天最多交互几万步,还会磨损、损坏。
有了模型,智能体可以在“脑海中”模拟大量经验,而不必每一步都与真实环境交互。这和人类的学习方式很像:我们会在脑海中预演行动的后果。
模型误差
模型不可能完美。问题在于:
- 误差累积:用模型做
步预测时,每一步的小误差会叠加,长时域预测可能完全偏离真实轨迹。 - 模型被利用(model exploitation):策略优化器会主动寻找模型预测错误、“看起来回报很高”的区域,就像 Actor 会利用 Critic 的高估一样。
- 渐近性能:早期研究中,基于模型的方法最终性能常常不如无模型方法(模型偏差)。
现代 MBRL 的大部分工作都在解决这些问题:用模型集成估计不确定性、用短时域展开限制误差累积、在潜在空间中学习紧凑的模型等。
Dyna 架构
Dyna(Sutton, 1990)是最早、最简洁的统一框架:把直接强化学习、模型学习和规划放在同一个循环中。
flowchart LR
E[真实环境] -- 真实经验 --> D[直接 RL 更新]
E -- 真实经验 --> M[学习模型]
M -- 模拟经验 --> P[规划更新]
D --> V[价值函数 / 策略]
P --> V
V -- 动作 --> E
Dyna-Q 的伪代码:
text
初始化 Q(s,a) 和 Model(s,a)
重复:
(a) S ← 当前状态;A ← ε-贪心(S, Q)
(b) 执行 A,观察 R, S'
(c) Q(S,A) ← Q(S,A) + α[R + γ max_a Q(S',a) − Q(S,A)] # 直接 RL
(d) Model(S,A) ← (R, S') # 模型学习(确定性环境)
(e) 重复 n 次: # 规划
随机选一个之前见过的 (S̃, Ã)
R̃, S̃' ← Model(S̃, Ã)
Q(S̃,Ã) ← Q(S̃,Ã) + α[R̃ + γ max_a Q(S̃',a) − Q(S̃,Ã)]1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
规划步和直接 RL 步使用完全相同的 Q-learning 更新,区别只是数据来源。每走一步真实环境,就做
代码:Dyna-Q 迷宫实验
下面复现 Sutton & Barto 第 8 章的 Dyna 迷宫(6×9,起点 S,终点 G,到达终点奖励 1,
py
"""Dyna-Q:在 Sutton & Barto 第 8 章的迷宫(6×9)上比较不同规划步数 n。"""
import numpy as np
MAZE = [
".......#G",
"..#....#.",
"S.#....#.",
"..#....#.",
".....#...",
".........",
]
ROWS, COLS = len(MAZE), len(MAZE[0])
START = next((r, c) for r in range(ROWS) for c in range(COLS) if MAZE[r][c] == "S")
GOAL = next((r, c) for r in range(ROWS) for c in range(COLS) if MAZE[r][c] == "G")
ACTIONS = [(-1, 0), (1, 0), (0, -1), (0, 1)]
def step(state, a):
r, c = state[0] + ACTIONS[a][0], state[1] + ACTIONS[a][1]
if not (0 <= r < ROWS and 0 <= c < COLS) or MAZE[r][c] == "#":
r, c = state # 撞墙则原地不动
if (r, c) == GOAL:
return (r, c), 1.0, True
return (r, c), 0.0, False
def dyna_q(n_planning, episodes=50, alpha=0.1, gamma=0.95, eps=0.1, seed=0):
rng = np.random.default_rng(seed)
Q = np.zeros((ROWS, COLS, 4))
model = {} # 确定性模型:(s, a) -> (r, s', done)
steps_per_episode = []
for _ in range(episodes):
s, done, n_steps = START, False, 0
while not done:
q = Q[s]
a = int(rng.integers(4)) if rng.random() < eps else int(rng.choice(np.flatnonzero(q == q.max())))
s2, r, done = step(s, a)
# (a) 直接强化学习:用真实经验做一次 Q-learning 更新
Q[s][a] += alpha * (r + gamma * np.max(Q[s2]) * (not done) - Q[s][a])
# (b) 模型学习
model[(s, a)] = (r, s2, done)
# (c) 规划:从模型中随机抽取 n 个已见过的 (s, a) 做模拟更新
keys = list(model.keys())
for _ in range(n_planning):
ps, pa = keys[rng.integers(len(keys))]
pr, ps2, pdone = model[(ps, pa)]
Q[ps][pa] += alpha * (pr + gamma * np.max(Q[ps2]) * (not pdone) - Q[ps][pa])
s, n_steps = s2, n_steps + 1
steps_per_episode.append(n_steps)
return np.array(steps_per_episode)
for n in [0, 5, 50]:
curves = np.mean([dyna_q(n, seed=i) for i in range(30)], axis=0)
print(f"n={n:2d} | 第2回合平均步数 {curves[1]:7.1f} | 第5回合 {curves[4]:6.1f} | 第50回合 {curves[-1]:5.1f}")1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
实际运行输出:
text
n= 0 | 第2回合平均步数 742.3 | 第5回合 346.4 | 第50回合 18.8
n= 5 | 第2回合平均步数 178.0 | 第5回合 24.9 | 第50回合 18.0
n=50 | 第2回合平均步数 45.3 | 第5回合 18.0 | 第50回合 18.21
2
3
2
3
规划的作用非常明显:第 2 个回合时,纯 Q-learning 平均需要 742 步,而
基于模型的规划(MPC)
另一类方法不学习显式策略,而是在每一步用模型在线规划:
模型预测控制(Model Predictive Control,MPC):
- 在当前状态
,用模型评估多个候选动作序列 的预测回报; - 选出最好的序列,只执行第一个动作
; - 到达新状态后重新规划。
每步都重新规划可以及时纠正模型误差。候选序列的优化常用随机打靶(random shooting)或交叉熵方法(CEM)。
完整教程与代码:模型预测控制:随机打靶、CEM 与 PETS,在 Pendulum 上实测三种方法,只用 1 个随机回合的数据就能开始立起摆。
PETS(Chua et al., 2018)用概率神经网络集成作为模型:每个网络输出高斯分布以刻画随机性(偶然不确定性),多个网络之间的分歧刻画认知不确定性,再配合 CEM 做 MPC。PETS 在若干 MuJoCo 任务上以少一个数量级的样本达到了与无模型方法相当的性能。
MBPO
MBPO(Model-Based Policy Optimization,Janner et al., 2019)把 Dyna 的思想与 SAC 结合:
- 学习一个概率模型集成;
- 从真实数据中的状态出发,用模型做短时域(
步,通常 1–5 步)展开,生成大量虚拟转移; - 把虚拟数据(加少量真实数据)喂给 SAC 训练策略。
论文从理论上分析了模型展开长度的权衡:展开太长,模型误差累积;展开太短,模型的作用有限。从真实状态出发的短时域展开兼顾了两者。MBPO 在 MuJoCo 上用比 SAC 少得多的样本达到了相近的渐近性能。
完整教程与代码:MBPO:基于模型的策略优化,包括与标准 SAC、以及同更新比 SAC 的对照实验。
世界模型:Dreamer 系列
对图像输入,直接预测下一帧像素既困难又没必要。World Models(Ha & Schmidhuber, 2018)提出先把观测压缩到低维潜在空间,再在潜在空间中学习动力学,甚至完全在“梦境”中训练控制器。
Dreamer 系列(Hafner et al., 2020, 2021, 2023/2025)沿着这条路线:
- 学习循环状态空间模型(RSSM),在潜在空间中预测未来状态和奖励;
- 在想象的潜在轨迹上训练 Actor-Critic,梯度可以通过模型反向传播;
- DreamerV3 用一套固定超参数在 150 多个任务上取得了很强的结果,并成为第一个在没有人类数据的情况下从零开始在 Minecraft 中收集到钻石的算法。
MuZero:学习用于规划的模型
AlphaZero 依赖已知的游戏规则做蒙特卡洛树搜索(MCTS)。MuZero(Schrittwieser et al., 2020)则学习一个模型,用于在不知道规则的情况下进行 MCTS。关键思想是:模型不需要重建观测,只需要准确预测与规划相关的三个量——策略、价值和奖励。
MuZero 由三个函数组成:表示函数
方法对比
| 方法 | 模型用途 | 模型形式 | 典型场景 |
|---|---|---|---|
| Dyna-Q | 生成模拟经验 | 表格 / 确定性 | 教学、小规模问题 |
| PETS | MPC 在线规划 | 概率网络集成 | 低维连续控制 |
| MBPO | 短时域展开 + SAC | 概率网络集成 | 连续控制、追求样本效率 |
| Dreamer | 潜在空间想象训练 | RSSM | 图像输入、多任务 |
| MuZero | MCTS 规划 | 隐空间价值等价模型 | 棋类、Atari |
实践建议与常见误区
- 从简单开始:先用已知模型或简单模型验证规划部分是正确的。
- 模型集成几乎是必需的:单个网络无法估计不确定性,策略会利用模型误差。
- 控制展开长度:长时域展开的误差累积往往比想象的严重。
- 误区:模型越精确越好:MuZero 表明,模型只需要在“与决策相关”的方面准确。
- 误区:MBRL 一定样本效率更高:如果模型难以学习(例如接触丰富、动力学不连续的任务),收益可能有限。
小结
- 基于模型的强化学习用模型生成经验或在线规划,样本效率高。
- 核心挑战是模型误差及其累积、策略对模型误差的利用。
- Dyna 统一了直接 RL、模型学习与规划;MPC 每步重新规划;MBPO 用短时域展开为 SAC 生成数据。
- Dreamer 在潜在空间中学习世界模型;MuZero 只学习与规划相关的量。
练习题
- 在 Dyna-Q 代码中,在第 25 个回合后改变迷宫结构(例如打开一条捷径),观察 Dyna-Q 能否发现它(参考 Sutton & Barto 例 8.3 的 Dyna-Q+)。
- 把规划时的随机选择改为优先扫描(按 TD 误差大小选择要更新的状态—动作对)。
- 在
Pendulum-v1上用真实环境模型(可以复制环境并设置状态)实现随机打靶 MPC,规划时域 ,候选序列数 500,并与 MPC 页 中用学到的模型的结果比较。 - 为什么模型集成的分歧可以用来衡量认知不确定性?
- 阅读 MBPO 论文,解释为什么从真实状态出发做短时域展开比从初始状态出发做长时域展开更好。
参考文献
- Sutton, R. S. (1990). Integrated architectures for learning, planning, and reacting based on approximating dynamic programming. ICML.
- Deisenroth, M. P., & Rasmussen, C. E. (2011). PILCO: A model-based and data-efficient approach to policy search. ICML.
- Chua, K., Calandra, R., McAllister, R., & Levine, S. (2018). Deep Reinforcement Learning in a Handful of Trials using Probabilistic Dynamics Models. NeurIPS. arXiv:1805.12114
- Ha, D., & Schmidhuber, J. (2018). World Models. arXiv:1803.10122
- Janner, M., Fu, J., Zhang, M., & Levine, S. (2019). When to Trust Your Model: Model-Based Policy Optimization. NeurIPS. arXiv:1906.08253
- Hafner, D., Lillicrap, T., Ba, J., & Norouzi, M. (2020). Dream to Control: Learning Behaviors by Latent Imagination. ICLR. arXiv:1912.01603
- Hafner, D., Pasukonis, J., Ba, J., & Lillicrap, T. (2023). Mastering Diverse Domains through World Models. arXiv:2301.04104(DreamerV3)
- Schrittwieser, J. et al. (2020). Mastering Atari, Go, Chess and Shogi by Planning with a Learned Model. Nature, 588, 604–609. arXiv:1911.08265
下一步
上一节:目标导向 RL 与 HER | 继续阅读:模型预测控制(MPC)