第 9 课:离线 RL 与分布外动作

参考答案版:包含完整代码实现与问答题深度参考解析。建议先独立完成练习题后再展开核对。

本课目标与完成标准

学完后你应能:解释离线 RL 的 extrapolation error,并用保守惩罚构造策略选择分数。

通过必须同时满足:

  • 独立补齐本课唯一的代码填空题,并通过给定检查;
  • 三个问答题均说明因果链,而不是只报术语;
  • 能指出至少一个正确性边界和一个性能取舍;
  • 总分不低于 8/10,且没有一票否决级概念错误。

前置关系

  • 课程前置:Python、概率期望、基本深度学习
  • 本课在路线中的作用:离线 RL 只能使用固定数据;策略若选择数据外动作,Q 网络可能给出无依据的乐观外推。

核心心智模型

1. 它是什么,解决什么问题

离线强化学习(Offline RL / Batch RL)是一种在零在线交互(No Active Exploration)前提下、纯粹利用预先收集好的固定静态转移数据集 𝒟={(s,a,r,s′)}\mathcal{D} = \{(s, a, r, s')\} 来训练策略的强化学习范式。 在工业界落地(如自动驾驶、医疗诊疗、核电控制、大模型离线偏好对齐)中,在线环境交互要么极其危险、要么成本高昂不可行。然而,直接将标准在线 Off-Policy 算法(如 DQN、SAC)应用在静态数据集上会遭遇灾难性的外推误差(Extrapolation Error)与分布漂移(Distribution Shift):

  • 致命的开环恶性循环:如果价值网络 Q(s,a)Q(s, a) 对某个在数据集 𝒟\mathcal{D} 中从未出现过的分布外动作(Out-of-Distribution, OOD)产生了随机过高估计;
  • 在线学习中,智能体会通过贪婪探索尝试该动作,环境立即给予真实惩罚并纠正 Q 值;
  • 但在离线场景下,环境交互通道被彻底阻断,智能体永远无法验证该动作的真实好坏。策略优化时会因 arg⁡max⁡aQ(s,a)\arg\max_a Q(s, a) 精准锁定这些虚假高峰,而在 Bellman 自举递推 y=r+γQ(s′,π(s′))y = r + \gamma Q(s', \pi(s')) 作用下,虚高估计会像滚雪球一样自我递归正反馈,导致 Q 估值发散暴增数千倍,最终学出的策略在实机部署时彻底崩溃。

离线强化学习解决的核心工程问题是:如何在没有环境验证的严苛约束下,引入悲观保守主义(Pessimism in the face of uncertainty),既有效抑制 OOD 动作的外推虚高,又能充分发挥离线数据的“拼图缝合能力”(Stitching Property)以学出显著超越历史行为策略的最优控制。

2. 它如何工作

分布漂移与保守 Q 学习(CQL)约束流水线如图 9-1 与图 9-2 所示:

  1. 分布漂移与保守压制机理(图 9-1):

flowchart LR
    subgraph DataDist["行为策略数据集 D (in-distribution)"]
        D_Points["高频覆盖状态与动作流"]
    end
    subgraph OOD["分布外动作 (Out-of-Distribution)"]
        OOD_Points["未探索动作 ➔ 标准 Q 学习高估虚假峰值"]
    end
    subgraph CQL["保守 Q 学习 (CQL) 正则化"]
        Penalty["对所有动作压低 Q 值 ➔ 仅对数据集动作拉高 Q 值"]
    end
    D_Points & OOD_Points --> CQL

图 9-1:离线强化学习分布漂移 (Distribution Shift) 与保守 Q 约束原理

在静态数据集支持集(In-Distribution)内部,由于有真实样本覆盖,Q 估值高度精准;但在广袤的数据覆盖盲区(OOD),传统深度网络由于未受任何边界锚定约束,往往存在病态的虚假过估计波峰。 保守 Q 学习(Conservative Q-Learning, CQL, Kumar et al., 2020)的核心思想是对动作价值面施加非对称正则化: - 压低未知(Push Down):对状态 ss 下所有可能动作的 Q 值实施整体抑制; - 拉高已知(Push Up):针对数据集中真实记录的行为动作 (s,a∼𝒟)(s, a \sim \mathcal{D}) 进行 Q 值补偿。

  1. CQL 联合损失函数数学展开(图 9-2):

flowchart TD
    LoadData["静态数据集加载 (s, a, r, s') 无在线探索"] --> EstimateQ["Q 网络评估数据集动作价值"]
    EstimateQ --> SampleOOD["在当前状态采样未知潜在动作 (OOD Actions)"]
    SampleOOD --> CQLTerm["计算保守正则项: logsumexp(Q) - E_{D}[Q(s, a)]"]
    CQLTerm --> JointLoss["总损失 = 标准 TD 误差 + α * CQL 惩罚项"]
    JointLoss --> StepOpt["Adam 梯度更新,严格抑制外推误差 (Extrapolation Error)"]

图 9-2:保守离线 RL (CQL) 算法步进与外推误差控制流程

定义保守目标函数: minQα⋅𝔼s∼𝒟[log∑a∈𝒜exp(Q(s,a))−𝔼a∼πβ(a∣s)[Q(s,a)]]+12𝔼(s,a,r,s′)∼𝒟[(Q(s,a)−ℬ*Q(s,a))2] \min_Q \alpha \cdot \mathbb{E}_{s \sim \mathcal{D}} \left[ \log \sum_{a \in \mathcal{A}} \exp(Q(s, a)) - \mathbb{E}_{a \sim \pi_\beta(a \mid s)} [Q(s, a)] \right] + \frac{1}{2} \mathbb{E}_{(s,a,r,s') \sim \mathcal{D}} \left[ (Q(s, a) - \mathcal{B}^* Q(s, a))^2 \right] 其中 log⁡∑exp⁡(Q)\log \sum \exp(Q) 是对动作空间的软最大化(LogSumExp),对所有动作施加惩罚;第二项则将数据集中行为策略 πβ\pi_\beta 的动作拉回。数学上严格保证:在适当的 α\alpha 下,CQL 估计的价值函数在策略期望下严格是真实最优价值的保守下界(Pessimistic Lower Bound: Q̂π(s,a)≤Qπ(s,a)\hat{Q}^\pi(s, a) \le Q^\pi(s, a)),彻底免疫外推爆炸。

  1. 策略约束法(Policy Constraint, 如 TD3+BC): 除了在价值层面对 Q 值做悲观惩罚,另一主流工程路线是在策略优化层直接约束 Actor 不能脱离行为策略分布。例如 TD3+BC 在标准策略梯度上直接挂载行为克隆(Behavior Cloning)均方差惩罚: π=arg⁡maxθ𝔼(s,a)∼𝒟[λQ(s,π(s))−(π(s)−a)2] \pi = \arg\max_\theta \mathbb{E}_{(s, a) \sim \mathcal{D}} \left[ \lambda Q(s, \pi(s)) - (\pi(s) - a)^2 \right] 通过系数 λ\lambda 灵活调节对 Q 导向探索与行为克隆保底之间的权重。

3. 正确性条件与常见误区

  • 离线测试集 Hold-out 验证的虚假安全陷阱: 在经典监督学习中,若在静态数据集中随机划分 20% 作为测试集且均方差极小,通常代表泛化良好。但在离线 RL 中,随机 Hold-out 测试集具有完全相同的行为策略分布 πβ\pi_\beta!测试集 TD Error 极小只能证明模型在历史行为轨迹内拟合精确,完全无法反映当策略执行 arg⁡max⁡aQ(s,a)\arg\max_a Q(s, a) 选出它最喜欢的 OOD 动作时是否存在灾难性虚高。必须结合离线策略评估(OPE)与特征支持度(Support Coverage)综合诊断。

  • 保守过度导致的“行为克隆退化”: 若惩罚系数 α\alpha 设置得过于激进,算法会把任何微弱的偏离都判定为极度危险,导致优化过程彻底退化为简单的行为克隆(BC)。此时策略永远无法通过组合不同轨迹中的优秀局部决策来超越原始数据集的表现。

  • 与大模型离线偏好对齐(DPO)的边界界定: DPO(Direct Preference Optimization)虽然也是在静态离线数据 (x,yw,yl)(x, y_w, y_l) 上运行,但其数学本质是通过 Bradley-Terry 模型的解析反解,将策略本身当做隐式奖励,完全消除了 Critic 价值网络与时序 Bellman 递归自举。因此 DPO 不存在 TD 外推自激爆炸的问题,其核心挑战在于自回归采样分布与静态偏好数据之间的模式漂移。

4. 性能与工程取舍

  • 连续动作空间采样积分开销: 在连续控制中,CQL 中的 log⁡∫exp⁡(Q(s,a))da\log \int \exp(Q(s, a)) da 无法解析求解,必须在每个状态上额外随机采样 10~20 个潜在动作进行数值积分,导致前向与反向时间成倍增加。IQL(Implicit Q-Learning)通过 Expectile 损失巧妙规避了显式采样 OOD 动作,成为极具推理吞吐优势的高性能替代方案。

  • 不确定性量化(Model-based Offline RL / MOPO): 另一种做法是在世界模型(World Model)上训练并利用模型预测方差作为保守惩罚项:rpenalized=r−βσ(s,a)r_{\text{penalized}} = r - \beta \sigma(s, a)。若对某个状态动作的模型认知不确定性极高,直接给予沉重负奖励,有效迫使智能体留在高确定性支持域内。

具体演示:离线 Q 学习与离线偏好优化不同

动作 A 的 Q=10、支持度惩罚=8,动作 B 的 Q=7、惩罚=1;教学分数选 B。下方 q−β×uncertainty 只是说明保守选择,不是完整 CQL 训练目标。

LLM 的 DPO 通常直接使用固定 (x,y+,y−) 偏好对,不拟合 Q,也不显式训练 RM/做在线 rollout:

L_DPO=−logσ(β[(logπθ(y+|x)−logπref(y+|x))−(logπθ(y−|x)−logπref(y−|x))])。

这里的 log-prob 都是回答序列的 token log-prob 之和。DPO 不能简单等同于本课的离线 Q 学习;共同问题是固定数据的覆盖范围,而不是共享同一个 TD 外推机制。在线 PPO/GRPO 则重新采样并打分,可探索新回答,但支付生成、奖励和版本管理成本。定期刷新偏好数据的迭代 DPO 又是另一种数据工作流;在线/离线不由算法名唯一决定。

实践任务:唯一代码填空题

补齐保守动作分数。

规则:只能修改 TODO/______ 所在位置;不要删除断言或放宽误差。代码注释说明了每个边界条件。

Code
def conservative_score(q_value, uncertainty, beta):
    """不确定性越高,分数越低。"""
    # TODO:只补齐下面这个表达式。
    return ______

assert conservative_score(10., 4., 2.) == 2.
assert conservative_score(7., .5, 2.) == 6.

检查方法

运行本单元格;所有 assert 必须通过。另手工构造一个边界输入,解释预期结果。

提交时请给出:补齐后的代码、实际运行输出(环境不可用时注明“仅静态审查”)以及对失败用例的解释。

Q1

不要背定义:请从输入、状态变化和输出三个阶段解释“离线 RL 与分布外动作”的工作机制。

你的答案:

Q2

为什么在离线测试集上随机切分不能证明部署策略不会 OOD?

你的答案:

Q3

数据覆盖有限但需要一定改进时,如何在 BC 与 RL 之间做连续取舍?

你的答案:

评分与通过规则

  • 代码 4 分:正常输入 2 分,边界输入 1 分,解释实现 1 分;
  • Q1~Q3 各 2 分;
  • 一票否决:结果碰巧正确但核心因果链错误、删除边界检查、把未运行结果说成实测。

需要提示时按四级机制请求:概念区域 → 具体方向 → 关键局部 → 完整答案。

参考答案(仅 answer 分支)

先完成题目再核对。即使代码一致,也要能解释关键步骤,并尝试更换一个输入规模。

Code
def conservative_score(q_value, uncertainty, beta):
    """不确定性越高,分数越低。"""
    # 参考实现:表达式直接对应上文不变量。
    return q_value - beta * uncertainty

assert conservative_score(10., 4., 2.) == 2.
assert conservative_score(7., .5, 2.) == 6.

Q1 参考答案

  1. 输入阶段(静态转移数据流与分布外采样):算法从预先采集好的静态离线经验池 𝒟\mathcal{D} 中载入转移批次 (s,adata,r,s′)(s, a_{\text{data}}, r, s'),同时基于当前待优化策略 πθ\pi_\theta 或均匀分布在状态 ss 附近采样一批潜在的候选动作集(包含大量未见过的 OOD 动作)。

  2. 状态变化阶段(保守惩罚注入与双向下界约束):

    • 非对称正则化压制:Q 网络在计算标准 Bellman 均方误差的同时,挂载 CQL 正则项 log⁡∑exp⁡(Q)−𝔼𝒟[Q(s,a)]\log \sum \exp(Q) - \mathbb{E}_{\mathcal{D}}[Q(s, a)]。该项全局惩罚所有采样动作的 Q 值,并重点拉高离线数据集内真实行为动作的 Q 估值;
    • 阻断外推自激:通过惩罚使得 Q 函数在整个动作空间形成一个“悲观下界”(Pessimistic Lower Bound),即便网络对 OOD 动作有潜在的高估偏置,也会被强大的正则化项强行压扁在数据集动作之下,彻底阻断了策略通过欺骗 Q 网络锁定虚假极值的途径。
  3. 输出阶段(安全价值面与支持集内最优策略):输出受保守约束的价值网络 Q(s,a)Q(s, a) 与策略 π(s)\pi(s)。策略在严格坚守离线数据高密度覆盖区(In-Distribution Support)的前提下,通过智能组合不同历史经验片段实现了超越任意单条行为轨迹的控制表现。

Q2 参考答案

在离线数据集上做 8:2 随机划分划分出的 Hold-out 验证集,在统计本质上完全属于“行为策略分布 πβ\pi_\beta”的同分布样本,根本无法测试新策略 πθ\pi_\theta 是否会面临分布外(OOD)崩溃:

  1. 测试集与新策略分布严重错配:离线测试集中的所有 (s,a)(s, a) 对全部是由历史行为策略(可能是一个人类专家或随机探索器)生成的。在测试集上验证 TD Error,仅仅检验了“模型在历史行为策略走过的老路上拟合得好不好”;

  2. 策略诱导的状态-动作分布漂移(Induced Distribution Shift):强化学习的目标是训练一个比历史数据更好的新策略 πθ\pi_\theta。一旦新策略开始偏好某个历史数据中很少出现或从未出现的动作 anew=πθ(s)a_{\text{new}} = \pi_\theta(s),它就会将智能体带入离线数据集中完全不存在的全新状态 snews_{\text{new}};

  3. 外推盲区的隐蔽性:Q 网络在这些未曾见过的 snews_{\text{new}} 和 anewa_{\text{new}} 上的预测可能是极其离谱的虚高(例如把悬崖边缘预测为 1000 分)。然而在随机划分的测试集里根本没有这种样本,因此测试集指标看起来一片大好,但一经实机部署就会由于连续触发 OOD 决策而瞬间车毁人亡。

Q3 参考答案

当离线数据覆盖面有限但仍希望策略有所突破时,工程上最标准的解决方案是在行为克隆(BC)与强化学习(RL)之间构建可平滑调谐的 Pareto 连续过渡机制(如 TD3+BC 框架):

  1. 显式混合损失构建:在 Actor 策略优化目标中将 Q 导向梯度与 BC 均方差监督损失进行凸组合: ℒπ(θ)=−λ1N∑|Q(s,a)|𝔼(s,a)∼𝒟[Q(s,πθ(s))]+𝔼(s,a)∼𝒟[∥πθ(s)−a∥2] \mathcal{L}_{\pi}(\theta) = - \frac{\lambda}{\frac{1}{N}\sum |Q(s, a)|} \mathbb{E}_{(s, a) \sim \mathcal{D}} [Q(s, \pi_\theta(s))] + \mathbb{E}_{(s, a) \sim \mathcal{D}} [\|\pi_\theta(s) - a\|^2] 其中分母项是对 Q 值的绝对均值进行在线归一化,使得策略梯度与克隆误差处于完全相同的无量纲尺度;

  2. 连续滑动调节策略(Continuum Trade-off):

    • 当数据覆盖极度贫瘠(狭窄专家数据):令 λ→0\lambda \to 0。算法主要表现为纯粹的行为克隆(BC),死死锚定在已有专家演示上,杜绝任何利用 Q 误差进行危险外推的可能;
    • 当数据多样性提高(混合质量数据):逐步增大致信系数 λ\lambda(如 λ=2.5\lambda = 2.5)。此时 BC 项作为“强引力弹性安全绳”,允许策略在数据周围的小邻域内自由滑动,优先去选择那些被 Q 网络验证为高质量的动作,在离线数据拼图优势(Stitching)与保守安全之间取得最佳工程平衡。

参考资料

区分数据采样方式、优化目标与部署覆盖,避免把不同离线方法混为一谈。