第 10 章 · 离线强化学习与决策 Transformer
第 9 章 解决了连续动作与样本效率问题——DDPG/TD3/SAC 通过 replay buffer 复用历史数据,model-based RL 通过环境模型减少真实交互。但所有这些算法仍然允许智能体继续与环境交互:replay buffer 里的数据是旧策略采的,新策略采到的新数据会持续加入。本章处理一个更严苛的设定——当智能体完全不能交互,只能从一个固定的历史数据集学习时,如何训出可靠策略? 这就是 Offline RL(离线强化学习),也称作 batch RL。它是 LLM 后训练、推荐系统、医疗决策、工业机器人等真实场景的核心范式,并且通过 Decision Transformer 这一分支,与现代序列建模(GPT)建立了直接联系。
12.1 离线 RL 的核心挑战 与 分布偏移
第 5 章 DQN 和 第 10 章 SAC 都依赖同一个机制:Bellman 备份。无论 on-policy 还是 off-policy,价值函数的更新都写成:
在线 RL 中,target 里那个 来自未来的探索——即使新策略走到一个没见过的状态,智能体会继续与环境交互、采到新数据,从而修正估值。离线 RL 没有这个保险。 数据集 由某个行为策略 采得,训练时完全冻结:
新策略 训练完成后部署,但它选择动作的分布 与 不同。分布偏移(distribution shift) 由此产生。
Extrapolation Error 的形式化定义
Fujimoto et al. 2019 在 BCQ 论文中精确刻画了离线 RL 失败的根源。设数据集支撑集为 。Bellman 算子在 上的取值没有任何监督信号——神经网络在这些 OOD(out-of-distribution)点上 外推,结果是任意的。
把估值误差分解为三类来源:
第三项是关键。Q-Learning 的 target 用 ,在 OOD 动作上 可能因为外推给出虚高的值,于是策略被引向这些"幻想"动作。
外推误差的累积过程可以递归展开。设 是初始估值,Bellman 迭代 次后误差满足:
其中 是数据约束下的 Bellman 算子(含 max), 是真策略算子。当 max 算子在 OOD 上每次产生误差 ,单步误差就以 ()的系数累积。在线 RL 中,下一次交互会立即揭露这个错误(实际 reward 很低),Q 被拉回;离线 RL 中没有这种纠错机会,误差在 Bellman 迭代中指数级累积。
为什么加更多数据救不了
直觉上,扩大数据集覆盖度可以缓解 OOD 问题。但实际上,连续动作空间里无论采多少数据, 都是 维空间里的稀疏支撑。 距离最近数据点的欧氏距离可能很小,但 函数在这个方向上的梯度可以任意大。外推误差不是数据量的问题,而是 Q-Learning 的 max 算子与函数逼近器组合的结构性缺陷。
离线 RL 的目标函数
有了上面的诊断,离线 RL 的目标可形式化为:在数据集支撑下学一个策略 ,使其期望回报尽可能大,但 不能偏离 太远——否则就会进入 OOD 区域。所有现代离线 RL 算法都是在这两个目标间求平衡:
接下来三节按"如何实现这个约束"分三条路线展开。
12.2 悲观主义路线 与 CQL / IQL / BCQ
最直接的思路:让 Q 函数对 OOD 动作悲观。如果 在没见过的 上给低值, 自然不会选到幻想动作。三大经典算法——BCQ、CQL、IQL——从不同角度实现这一原则。
动作空间约束
Batch-Constrained Q-Learning(Fujimoto et al. 2019)是第一个被证明能在连续动作离线数据上稳定的深度算法。核心约束:target 动作 必须落在 的支撑集内。
BCQ 训一个条件 VAE 近似行为策略,采样候选动作 ,再在这些候选上做 max:
其中 是一个扰动网络,对采样动作做小幅修正以逼近局部最优。 是扰动幅度。这把"连续动作 argmax"约束在行为策略的高密度区域内。
值函数层面的悲观
Conservative Q-Learning(Kumar et al. 2020)从另一个角度切入——不约束动作,而是直接惩罚 Q 在 OOD 上的值。在标准 Bellman 误差之外加一个正则项:
第一项 是 logsumexp,对 所有动作(包括 OOD)的 Q 做软最大值;让它变小的唯一办法是把所有动作的 Q 都压低。第二项把数据集里实际见过的 的 Q 拉回正常范围。两者的差形成一个"惩罚 gap"——OOD 动作的 Q 被系统性低估。
CQL 的理论保证:学到的 是真实 的下界,即 对所有 成立;进一步可以证明 在 OOD 动作上的值比 in-distribution 动作低一个 的 gap。因此由 推出的策略不会高估任何动作的回报。在实践中 用 Lagrangian 自动调节,让保守性恰到好处:
其中 是目标 gap(如 5.0)。当实际 gap 低于 时增大 ,反之减小,使 gap 自动稳定在目标附近。
class CQL(SAC):
def critic_loss(self, batch):
s, a, r, s_next, done = batch
# 标准 Bellman 误差(继承自 SAC)
with torch.no_grad():
a_next = self.actor(s_next)
q_target = torch.min(self.critic_target1(s_next, a_next),
self.critic_target2(s_next, a_next))
y = r + self.gamma * (1 - done) * q_target
bellman_loss = F.mse_loss(self.critic1(s, a), y) + \
F.mse_loss(self.critic2(s, a), y)
# CQL 保守正则
# 第一项:对随机动作(OOD)做 logsumexp
rand_a = torch.rand_like(a) * 2 - 1
q_rand1 = self.critic1(s, rand_a).flatten()
q_curr1 = self.critic1(s, a).flatten() # in-dist
q_next1 = self.critic1(s, a_next).flatten()
cat_q1 = torch.cat([q_rand1, q_curr1, q_next1], dim=1)
logsumexp_q1 = torch.logsumexp(cat_q1, dim=1).mean()
conservative_loss = \
self.alpha * (logsumexp_q1 - q_curr1.mean()) \
+ self.alpha * (logsumexp_q2 - q_curr2.mean())
return bellman_loss + conservative_loss避免显式 OOD 评估
Implicit Q-Learning(Kostrikov et al. 2022)的洞察更深一层:根本不需要评估任何 OOD 动作的 Q。它用一个分位数回归(quantile regression)学 ,让 偏向数据中较好的动作:
其中 是期望分位数为 (通常 )的分位数损失。这把 学成 "数据中较好动作的价值",而不需要 max 任何东西。然后用 advantage 做 advantage-weighted regression 训练策略:
给数据中表现好的动作更大权重,让 向它们靠拢。 是温度。IQL 完全绕开了 Q-Learning 的 max 算子,因此不会产生外推误差——这是它和 CQL 的本质区别。
三大算法对比
| 维度 | BCQ | CQL | IQL |
|---|---|---|---|
| 约束位置 | 动作空间 | 值函数 | 隐式(分位数 + AWR) |
| 是否评估 OOD 动作 | 否(采样约束) | 是(logsumexp) | 否(完全规避) |
| 额外网络 | VAE | 无 | 网络 |
| 超参敏感 | 高(扰动幅度) | 中( 自动) | 低() |
| 对中等数据集表现 | 中 | 强 | 强 |
| 对稀疏数据集稳定性 | 中 | 偶发不稳定 | 强 |
| 实现复杂度 | 高 | 中 | 低 |
实战建议:从 IQL 开始(最稳定、最少调参);若 baseline 偏低再换 CQL(更激进);BCQ 已较少作为新 baseline。
12.3 AWAC 与 TD3+BC 与 保守约束 + 行为克隆正则化
另一条路线更工程化——保留 on-policy / off-policy actor-critic 主循环,在策略损失里直接加行为克隆(BC)正则。这类方法的优势是与 第 9 章 的 PPO/SAC 框架兼容,工程改造量极小。
TD3+BC 与 BC 正则化的最简形式
Fujimoto & Gu 2021 提出的 TD3+BC 把思想推到极致:在 TD3 的 actor loss 上加一个 BC 项,权重 自适应调节:
其中 。分母是当前 Q 值的尺度——这让 自动适应不同环境的 reward scale,无需调参。论文里 在所有 D4RL MuJoCo 任务上都是同一设置。
TD3+BC 的简洁性使它成为离线 RL 的强基线。其表现提示一个反直觉的事实:很多离线 RL benchmark 上,最朴素的 BC 正则化就能达到接近 CQL/IQL 的性能。
优势加权的 BC
Advantage-Weighted Actor-Critic(Nair et al. 2020)和 IQL 的策略损失有相同的来源——advantage-weighted regression——但 AWAC 用显式 Q 而不是分位数 V:
其中 , 是温度。直观地:数据中表现优于平均的动作被放大权重,劣于平均的被压低。AWAC 把 BC 推广为"加权 BC"——只模仿好的部分。
AWAC 的工程亮点是支持离线到在线的平滑过渡:先纯离线预训练,再少量在线交互微调。这一点对真实机器人、推荐系统等场景非常实用。
AWAC 与 IQL 的策略损失同源性
仔细比较两个公式:
形式上几乎一致( 的位置不同,但都可以看作温度)。差异在 的估计:
- AWAC:,其中 仍走标准 Bellman 备份(target 里仍有 max )
- IQL:,但 通过 备份(target 用 而非 ), 用分位数回归偏向数据中较好的动作
IQL 通过把 Bellman target 改成 (不再 max),从根源上消除了外推误差的产生路径。AWAC 保留了标准 Bellman target,靠加权 BC 来约束策略——这种约束比 IQL 的隐式约束弱,因此 AWAC 在数据集 Q 值噪声大时更容易踩到 OOD 雷区。
AWAC vs TD3+BC vs IQL
| 方法 | 策略损失形式 | 是否需要 | 在线微调友好 |
|---|---|---|---|
| TD3+BC | 否 | 中 | |
| AWAC | , | 是 | 强 |
| IQL | (AWR) | 是 | 中 |
注意 AWAC 和 IQL 的策略损失结构高度相似,区别在 的来源——AWAC 用显式 Q-V 差,IQL 用分位数回归隐式估计。这种细微差别在稀疏数据上对稳定性影响很大。
本节总结
本节梳理了离线 RL 的核心挑战(分布偏移与外推误差)与三大保守路线:BCQ 约束动作空间、CQL 惩罚 OOD Q 值、IQL 完全规避 max 算子。这些算法都在 Bellman 框架内做文章。
下一节 12.2 Decision Transformer、Trajectory Transformer 与 Diffuser 走另一条路——彻底抛弃 Bellman,把 RL 写成条件序列生成。