Value-based Planning
一句话定位
Value-based Planning 通过在潜在空间中进行价值迭代,利用世界模型学习状态表示和转移规律,直接优化价值函数以指导行动选择。
前置依赖
- 强化学习基础(Value iteration、Bellman 方程、Q-learning)
- 世界模型基础(RSSM、VAE-based model)
- 1-Model-based RL总览
- 3-MCTS - MCTS 树搜索方法
核心思想
Value-based Planning 的核心思想是将世界模型与价值函数结合,在潜在空间中进行规划。与显式搜索轨迹的 MPC/MCTS 不同,value-based planning 隐式地通过价值函数进行规划:
两种范式对比:
| 范式 | 搜索方式 | 代表方法 |
|---|---|---|
| 显式规划 | 枚举/优化轨迹 | MPC (CEM), MCTS |
| 隐式规划 | 通过价值函数 | Value iteration, Q-planning |
隐式规划的本质:
给定当前状态
这本身就是一种”规划”——不需要显式 rollout 轨迹,只需查询价值函数。
模型结构图
┌─────────────────────────────────────────────────────────────┐
│ Value-based Planning 框架 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Encoder │───▶│ World Model │───▶│ Value Function│ │
│ │ q(s|z) │ │ p(s'|s,a) │ │ V(s), Q(s,a) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ 潜在空间中的价值迭代 │ │
│ │ │ │
│ │ Q(s,a) = r + γ·E[V(s')] │ │
│ │ V(s) = max_a Q(s,a) │ │
│ │ 其中 s' ~ p(s'|s,a) │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
数学推导
1. 潜在空间中的价值迭代
设世界模型为
Bellman 方程(潜在空间形式):
最优价值函数:
2. 价值函数如何指导搜索
给定当前潜在状态
Step 1: 价值评估
对于每个候选动作
Step 2: 动作选择
Step 3: 状态转移
执行
搜索的隐式性:
与 CEM 需要采样大量轨迹不同,价值函数提供了一种”立即查询”式的规划:
- CEM 需要
次模型调用(采样 ,horizon ,迭代 ) - Value-based planning 只需要
次模型调用(每步一次价值查询)
3. 与 Model-based RL 的关系
Value-based Planning 是 MBRL 的一个子类,核心区别在于如何利用模型:
| MBRL 子类 | 模型使用方式 | 规划方式 |
|---|---|---|
| Dyna-style | 模型生成假数据增强 replay buffer | 间接(通过 Q-learning) |
| Value-based | 模型用于价值传播 | 直接( |
| Policy-based | 模型用于 policy gradient | 直接( |
| Trajectory-based | 模型用于轨迹优化 | 直接(CEM/MCTS) |
Dyna-Q 框架:
# Dyna-Q 的伪代码
while not converged:
# 与环境交互
a = epsilon_greedy(Q, s)
s' = env.step(a)
buffer.add((s, a, r, s'))
# 直接学习
Q.update(s, a, r, s')
# 模型学习
model.fit(buffer)
# 假数据学习(n 步)
for _ in range(n):
s_fake = random_sample(buffer)
a_fake = random_action()
s'_fake = model.predict(s_fake, a_fake)
Q.update(s_fake, a_fake, r_fake, s'_fake)4. 模型预测与价值传播的耦合
设价值函数参数化为
组合 loss:
其中:
梯度流向:
其中
5. Latent Variable Models 中的 Planning
对于 stochastic 世界模型(如 VAE):
其中
Value Iteration with stochastic model:
对于高维
训练细节
训练流程
阶段 1: 世界模型训练
- 用 VAE/RSSM 学习观测重建和状态转移
- 优化 ELBO:
阶段 2: 价值函数训练
- 使用 Dreamer 风格的 reccurent rollout
- 从 latent 序列计算 value target
阶段 3: 联合训练(可选)
- 通过 policy gradient 端到端优化
Value Target 的计算
设 horizon
Monte Carlo target:
TD target(1-step):
TD target(n-step):
训练中的挑战
| 挑战 | 描述 | 解决思路 |
|---|---|---|
| 复合误差 | 模型误差 + 价值误差叠加 | early stopping, ensemble |
| ** bootstrapping** | 用不稳定目标训练 | target network, polyak averaging |
| 表示学习 | 潜在空间是否保留价值相关信息 | auxiliary losses, contrastive learning |
推理/rollout/planning 过程
推理流程
class ValueBasedPlanner:
def __init__(self, encoder, world_model, value_function):
self.encoder = encoder
self.model = world_model
self.V = value_function
def plan(self, obs):
"""给定观测,返回动作"""
# 编码到潜在空间
z = self.encoder(obs)
# 评估每个动作的 Q 值
Q_values = []
for a in self.action_space:
# 一步 lookahead
z_next = self.model.predict(z, a)
q = self.model.reward(z, a) + self.gamma * self.V(z_next)
Q_values.append(q)
# 选择最优动作
best_idx = np.argmax(Q_values)
return self.action_space[best_idx]多步 Planning
单步
K-step planning:
这与 expectimax 树类似,但通过价值函数压缩了搜索空间。
与 MCTS 的对比
| 特性 | Value-based | MCTS |
|---|---|---|
| 搜索结构 | 隐式(通过 V) | 显式树 |
| 计算量 | 小(O(H·A)) | 大(O(N·log N)) |
| 内存 | 小 | 大(存树) |
| 适用场景 | 快速决策 | 复杂博弈 |
优点与局限
优点
- 计算效率:无需采样大量轨迹
- 表示紧凑:价值函数压缩了状态信息
- 可迁移:价值函数可迁移到新任务
- 适合 continuous control:可通过 gradient-based optimization on Q
局限
- 价值函数表达力:需要合适的函数近似
- ** bootstrapping 误差**:TD learning 的经典问题
- 探索不足:max Q 可能导致 exploitation
- 难以处理多模态策略:单一价值函数难以表示多峰分布
与前后内容的衔接
- 前置:3-MCTS - 树搜索方法
- 后置:5-actor-critic与imagination - 结合 actor-critic 的想象增强方法
- 关联:价值函数是 Dreamer、IRIS 等方法的基石
可复现实现要点
import torch
import torch.nn as nn
class ValueBasedPlanner(nn.Module):
def __init__(self, encoder, world_model, q_network):
super().__init__()
self.encoder = encoder # obs -> z
self.world_model = world_model # (z, a) -> z_next, r
self.Q = q_network # z -> R
def forward(self, obs, action):
"""计算 Q(z, a)"""
z = self.encoder(obs)
z_next, r = self.world_model(z, action)
q = r + self.gamma * self.Q(z_next)
return q
def plan(self, obs):
"""贪婪选择最优动作"""
z = self.encoder(obs)
q_values = []
for a in range(self.action_dim):
z_next, r = self.world_model(z, torch.tensor([[a]]))
q = r + self.gamma * self.Q(z_next)
q_values.append(q)
return torch.argmax(torch.stack(q_values))关键实现要素:
- Encoder 输出稳定潜在表示
- World model 需要是 deterministic 或 reparameterized stochastic
- Q 网络需要 target network 稳定训练
- Exploration 通过 epsilon-greedy 或 entropy bonus 实现
章节摘要
Value-based Planning 将世界模型与价值函数结合,在潜在空间中进行隐式规划。通过 Bellman 方程,价值函数能够在潜在空间中进行迭代传播,从而指导动作选择。与显式规划的 MPC/MCTS 相比,value-based planning 计算效率更高,适用于需要快速响应的场景。核心挑战在于 bootstrapping 误差累积和价值函数的表示学习。后续章节将介绍如何将价值规划与 actor-critic 框架结合,实现更强大的 imagination-based 方法。
关键词
value-based planning, value iteration, Q-learning, latent space planning, world model, Bellman equation, TD learning, Dyna-Q, implicit planning, bootstrapping, target network, representation learning