跳转到正文

第 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 自动稳定在目标附近。

python
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 的本质区别。

三大算法对比

维度BCQCQLIQL
约束位置动作空间值函数隐式(分位数 + 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 写成条件序列生成。

现代强化学习实战课程

个人非商业离线镜像 · 内容版权归 WalkingLabs 所有,依 CC BY-NC-SA 4.0 授权 · 查看原文