Offline强化学习
在标准的强化学习中,智能体需要不断与环境交互来收集经验并改进策略。但在很多现实场景中,与环境交互是极其昂贵、危险甚至不可能的。Offline RL(也叫Batch RL)提出了一个截然不同的问题设定:能否完全从一个预先收集好的静态数据集中学习出一个好的策略,而不需要任何额外的环境交互?
这个问题设定的吸引力是巨大的——医疗领域有大量的患者治疗记录,自动驾驶领域有海量的人类驾驶数据,机器人领域有大量的遥操作数据,推荐系统有亿级的用户交互日志。如果能直接从这些数据中学到好的决策策略,就不需要冒着患者生命危险、车辆碰撞风险去做trial-and-error。
问题形式化
Offline RL的输入是一个静态数据集 \(\mathcal{D}\),由某个(未知的)行为策略 \(\pi_\beta\) 与环境交互所收集:
其中 \(s_i\) 是状态,\(a_i\) 是行为策略选择的动作,\(r_i\) 是获得的奖励,\(s_i'\) 是转移到的下一个状态。行为策略 \(\pi_\beta\) 可以是人类专家、一个旧的RL策略、甚至是随机策略,也可以是多种策略的混合。
目标: 仅使用数据集 \(\mathcal{D}\),学习一个策略 \(\pi\),使得它在真实环境中执行时的期望回报尽可能高:
关键限制是:学习过程中不能与环境有任何交互。
整体方法论的框架可以用如下图示来理解:
+---------------------------------------------------+
| Offline RL 方法分类 |
+---------------------------------------------------+
| |
| 1. 保守估值方法 (Conservative Value Methods) |
| +--------+ +---------+ +----------+ |
| | CQL | | IQL | | TD3+BC | |
| +--------+ +---------+ +----------+ |
| 惩罚OOD Q值 避免查询OOD 添加BC正则项 |
| |
| 2. 序列建模方法 (Sequence Modeling) |
| +------------------------+ |
| | Decision Transformer | |
| +------------------------+ |
| 把RL当做序列预测问题 |
| |
+---------------------------------------------------+
核心挑战:分布偏移 (Distribution Shift)
直觉上,你可能会想:"Offline RL有什么难的?直接拿一个off-policy算法(比如SAC、DQN)在数据集上训练不就行了?"
答案是:不行。 直接使用标准的off-policy算法在静态数据集上训练,几乎总会导致灾难性失败。这背后的根本原因是分布偏移(Distribution Shift),具体表现为以下几个层面。
分布外动作 (Out-of-Distribution Actions)
在标准的Q-learning更新中,我们需要计算目标值:
这个 \(\max_{a'} Q_\theta(s', a')\) 要求我们在所有可能的动作上取最大值。但在Offline RL中,数据集 \(\mathcal{D}\) 只包含行为策略 \(\pi_\beta\) 曾经执行过的动作。对于那些 \(\pi_\beta\) 从未选择过的动作(即OOD动作),\(Q_\theta\) 的值完全是由神经网络的外推(Extrapolation)得到的,没有任何数据支撑。
Q值过高估计 (Overestimation)
问题不仅仅是"不准确"那么简单。\(\max\) 操作会系统性地选择Q值被高估的动作——这是一种选择偏差(Selection Bias)。在online RL中,这个问题被自然缓解:当智能体选择了一个Q值被高估的动作并执行后,它会获得真实的(较低的)奖励,从而修正Q值的估计。但在Offline RL中,我们没有机会去执行这些动作,因此过高估计永远不会被修正。
外推误差累积 (Extrapolation Error Accumulation)
更糟糕的是,Q-learning是一个bootstrapping过程——当前的Q值基于下一个状态的Q值来更新。如果下一个状态的Q值因为OOD动作而被高估,这个高估会通过Bellman更新向前传播,最终整个Q函数都被"污染"。
用数学来描述这个过程:假设在某个状态-动作对 \((s', a')\) 上,Q函数的估计误差为 \(\epsilon(s', a')\),那么经过一步Bellman更新后:
经过 \(k\) 步传播,误差可以累积到 \(O(\gamma^k \cdot k \cdot \epsilon_{\max})\) 量级,其中 \(\epsilon_{\max}\) 是单步最大误差。在深度神经网络中,OOD区域的 \(\epsilon_{\max}\) 可以非常大,导致整个Q函数发散。
直觉类比
这就像一个学生只看了教科书中的例题(数据集),然后在考试中遇到了一道从未见过类型的题目(OOD动作)。他可能会"胡编"一个看起来很有信心的答案(Q值高估),而且无法从考试结果中获得反馈来纠正自己(无法与环境交互)。
保守方法:约束策略偏离
面对分布偏移问题,第一类方法的核心思想是:让学到的策略不要偏离数据集中行为策略太远。 具体的实现方式可以是约束Q函数、约束策略本身、或者在策略优化目标中添加正则项。
CQL (Conservative Q-Learning)
CQL由Kumar等人在2020年提出("Conservative Q-Learning for Offline Reinforcement Learning"),是Offline RL领域最重要的工作之一。它的核心思想极其优雅:与其费尽心思去准确估计Q值,不如学一个系统性偏低的Q值——即Q值的下界(Lower Bound)。
为什么下界是好的? 考虑一下:如果我们的Q估计是真实Q值的下界,那么在这个悲观Q函数下选择的最优动作,在真实环境中只可能表现得更好,不会更差。这就是悲观主义原则(Pessimism Principle)在Offline RL中的体现。
CQL损失函数
CQL在标准的TD损失之上,添加了一个保守正则项(Conservative Regularizer):
其中 \(\mu(a|s)\) 是一个用于采样OOD动作的分布(通常是均匀分布或当前策略),\(\hat{\mathcal{B}}^\pi\) 是Bellman算子,\(\alpha > 0\) 是控制保守程度的超参数。
直觉理解: 这个正则项做了两件事:
- 第一项 \(\mathbb{E}_{a \sim \mu}[Q_\theta(s, a)]\): 对于从分布 \(\mu\) 中采样的动作(可能包含大量OOD动作),惩罚它们的Q值,把它们压低。
- 第二项 \(\mathbb{E}_{a \sim \mathcal{D}}[Q_\theta(s, a)]\): 对于数据集中实际出现过的动作,提升它们的Q值,把它们抬高。
这一推一拉,就实现了"数据集内的动作Q值高,数据集外的动作Q值低"的效果。
Q(s, a)
^
| * (OOD动作: 被压低)
| *
| *
| +------+
| | 数据集 | <-- Q值被抬高
| | 内动作 |
| +------+
+--*--*--*-----------*--*---> a
OOD OOD
CQL(H)变体
在实际中,用均匀分布来采样OOD动作效率很低——在高维动作空间中,均匀采样几乎不可能命中"危险"的OOD区域。CQL(H)使用当前策略 \(\pi_\theta\) 来采样,并添加一个熵正则项来鼓励策略的多样性:
通过对 \(\mu\) 取max,CQL(H)自动找到最"危险"的OOD动作(即Q值最高的那些),重点压制它们。这比盲目地压制所有非数据集动作更加高效。
CQL的理论保证
Kumar等人证明了,在一定条件下,CQL学到的Q函数满足:
即CQL的Q值是真实Q值的下界。这意味着用CQL的Q值来做策略评估,得到的性能估计是保守的——实际执行不会比估计的差。
\(\alpha\) 的敏感性
CQL的一个实际问题是超参数 \(\alpha\) 的选择非常敏感:
- \(\alpha\) 太大:Q值被过度压制,策略过于保守,几乎退化为行为克隆(Behavioral Cloning)
- \(\alpha\) 太小:保守惩罚不够强,Q值仍然会过高估计,策略可能选择OOD动作
- 最优的 \(\alpha\) 取决于数据集的质量和覆盖度,需要大量调参
IQL (Implicit Q-Learning)
IQL由Kostrikov等人在2022年提出("Offline Reinforcement Learning with Implicit Q-Learning"),采用了一个完全不同的思路来回避分布偏移问题。
CQL的思路是: 对OOD动作的Q值进行惩罚。 IQL的思路是: 从一开始就不去查询OOD动作的Q值。
这是一个根本性的转变。在标准的Q-learning中,计算目标值需要 \(\max_{a'} Q(s', a')\),这要求我们在所有动作上做最大化——正是这一步引入了OOD问题。IQL完全绕开了这个操作。
Expectile Regression(分位数回归)
IQL的关键技术是Expectile Regression,用一个独立的Value函数 \(V_\psi(s)\) 来近似 \(\max_a Q(s, a)\),但只使用数据集中出现的 \((s, a)\) 对。
Expectile Regression的损失函数为:
其中 asymmetric loss为:
这里 \(\tau \in (0, 1)\) 是一个关键超参数。
直觉理解: 这个非对称的二次损失的效果是——当 \(\tau\) 接近 \(1\) 时,\(V_\psi(s)\) 被"拉向" \(Q(s, a)\) 的上分位数。想象一下,对于某个状态 \(s\),数据集中可能包含多个不同动作 \(a_1, a_2, \ldots\) 对应的Q值。普通的均方误差会让 \(V(s)\) 学到这些Q值的均值,而expectile regression会让 \(V(s)\) 学到接近最大值(但不是精确的max)。
Q(s, a1) = 5.0
Q(s, a2) = 3.0 普通MSE: V(s) ≈ 4.0 (均值)
Q(s, a3) = 8.0 Expectile(τ=0.9): V(s) ≈ 7.5 (接近最大值)
Q(s, a4) = 2.0 Expectile(τ=0.99): V(s) ≈ 7.9 (更接近最大值)
关键在于:这个"近似max"操作只在数据集中出现过的动作上进行,永远不会查询一个从未见过的OOD动作的Q值。
Q函数更新
有了 \(V_\psi(s)\),Q函数的更新就非常简单了:
注意,这里用 \(V_\psi(s')\) 代替了 \(\max_{a'} Q(s', a')\)。由于 \(V_\psi\) 是通过expectile regression从数据集内动作学到的,不涉及任何OOD查询。
策略提取:AWR (Advantage Weighted Regression)
IQL学到了Q函数和V函数后,需要从中提取一个可执行的策略。它使用Advantage Weighted Regression(优势加权回归):
其中 \(\beta\) 是逆温度参数。这相当于一个加权的行为克隆(Weighted BC):对数据集中优势值高的 \((s, a)\) 对赋予更高的权重,让策略更多地模仿"好的"动作。
IQL vs CQL
| 维度 | CQL | IQL |
|---|---|---|
| 处理OOD动作 | 显式惩罚OOD Q值 | 完全避免查询OOD |
| 需要max操作 | 需要(在正则项中) | 不需要 |
| 实现复杂度 | 较高 | 较低 |
| 超参敏感度 | \(\alpha\) 很敏感 | \(\tau\) 较稳定 |
| 理论保证 | Q值下界 | 无严格下界保证 |
| 实际性能 | 强,但调参困难 | 强,且稳定 |
TD3+BC (TD3 with Behavioral Cloning)
TD3+BC由Fujimoto和Gu在2021年提出("A Minimalist Approach to Offline Reinforcement Learning"),它的设计哲学是:Offline RL不需要复杂的算法设计,只需要在一个好的online算法上加一个简单的行为克隆正则项。
算法设计
TD3+BC就是标准的TD3算法(Twin Delayed DDPG),唯一的改动是在Actor的策略优化目标中加了一个BC项:
第一项是标准的Q值最大化,第二项是行为克隆——让策略的输出不要偏离数据集中的动作太远。
归一化技巧
直接把Q值和BC损失加在一起会有量级不匹配的问题。TD3+BC使用了一个简单但有效的归一化:
即用batch中Q值绝对值的均值来归一化,使得Q项和BC项保持在相近的量级。\(\alpha\) 通常取 \(2.5\)。
为什么TD3+BC有效
TD3+BC的成功揭示了Offline RL中一个重要的洞察:很多offline RL算法的复杂设计(如CQL的保守正则、IQL的expectile regression)本质上都在做同一件事——阻止策略偏离数据集太远。而最简单的方式就是直接加一个BC损失。
当然,TD3+BC也有局限性。它假设数据集中的动作分布是单模态的(因为用了均方误差作为BC损失),这在数据集包含多种不同行为策略时会出问题。
序列建模方法
Decision Transformer
Decision Transformer (DT) 由Chen等人在2021年提出("Decision Transformer: Reinforcement Learning via Sequence Modeling"),代表了一种范式转换(Paradigm Shift)——将强化学习问题完全重新定义为序列建模问题,抛弃了传统RL中Bellman方程、TD学习、Q函数等所有核心概念。
核心思想
传统RL的思路是:
Decision Transformer的思路是:
DT把一条轨迹 \((s_0, a_0, r_0, s_1, a_1, r_1, \ldots)\) 看作一个"句子",用GPT风格的Transformer来学习这个序列的模式,然后通过条件生成来产生好的决策。
输入表示
DT的关键创新之一是输入的设计。它不直接使用奖励 \(r_t\),而是使用Return-to-go(剩余回报) \(\hat{R}_t\):
输入序列被组织为三元组的序列:
每个三元组中的三个元素分别用不同的线性层嵌入到同一维度,然后送入GPT架构。
输入序列 (每个时间步3个token):
+------+ +------+ +------+ +------+ +------+ +------+
| R̂_1 | | s_1 | | a_1 | | R̂_2 | | s_2 | | a_2 |
+------+ +------+ +------+ +------+ +------+ +------+
| | | | | |
v v v v v v
+------+ +------+ +------+ +------+ +------+ +------+
| Embed| | Embed| | Embed| | Embed| | Embed| | Embed|
+------+ +------+ +------+ +------+ +------+ +------+
| | | | | |
+------+-----+------+-----+----+-----+------+-----+------+----+
|
+-------v--------+
| GPT (Causal |
| Transformer) |
+-------+--------+
|
+------+-----+-----+------+
| | | |
v v v v
(pred_a1)(...) (pred_a2)(...)
推理(Test Time)
在测试时,DT的使用方式非常优雅:
- 设定一个期望的return-to-go \(\hat{R}_1\)(比如设为数据集中最高轨迹回报)
- 观测当前状态 \(s_1\)
- 用Transformer自回归地生成动作 \(a_1\)
- 执行 \(a_1\),获得奖励 \(r_1\),转移到 \(s_2\)
- 更新 \(\hat{R}_2 = \hat{R}_1 - r_1\)
- 重复
直觉理解: 这就像你告诉模型"我希望获得100分的总回报",然后模型会生成"如果要获得100分,在当前状态下应该执行什么动作"。本质上是一种条件生成(Conditional Generation)。
DT的优势
- 简洁性: 不需要TD学习、不需要Q函数、不需要Bellman方程,只需要一个标准的Transformer和交叉熵/均方误差损失
- 长程信用分配: Transformer的self-attention机制天然能够建模长程依赖,不需要像TD学习那样通过bootstrapping逐步传播信息
- 条件控制: 通过改变return-to-go,可以灵活地控制策略的保守/激进程度
DT的局限性
1. 无法进行轨迹拼接(Trajectory Stitching)
这是DT最核心的局限。考虑一个简单的场景:数据集中有两条轨迹:
- 轨迹A:从起点到中间点表现很好,到终点表现较差
- 轨迹B:从起点到中间点表现较差,到终点表现很好
理想的策略应该能"拼接"两条轨迹的优势:从A中学习前半段,从B中学习后半段。传统的基于TD学习的方法(如CQL、IQL)可以做到这一点,因为Bellman方程天然支持跨轨迹的信息传播。但DT只是在模仿数据集中的轨迹,无法自动进行这种拼接。
2. 数据集质量依赖
DT本质上是行为克隆的高级版本。如果数据集中没有高回报的轨迹,即使设定很高的return-to-go,DT也无法生成好的动作。
3. Return-to-go的局限
在随机环境中,相同的动作序列可能导致不同的回报。用一个标量的return-to-go来条件化策略可能是不够的。
Offline RL方法对比
| 维度 | CQL | IQL | TD3+BC | Decision Transformer |
|---|---|---|---|---|
| 核心思想 | 惩罚OOD动作的Q值 | 避免查询OOD动作 | 添加BC正则项 | 序列建模 + 条件生成 |
| Q函数 | 保守Q(下界) | 标准Q + expectile V | 标准Twin Q | 无Q函数 |
| 策略提取 | 从保守Q中max | AWR加权克隆 | 直接优化Q+BC | Transformer自回归 |
| 是否用Bellman | 是 | 是 | 是 | 否 |
| 轨迹拼接 | 支持 | 支持 | 支持 | 不支持 |
| 超参敏感度 | 高(\(\alpha\)) | 中(\(\tau\)) | 低(\(\alpha\)固定2.5) | 低 |
| 实现复杂度 | 高 | 中 | 低 | 中(需Transformer) |
| 计算开销 | 高 | 中 | 低 | 高(大模型) |
| 适用场景 | 通用 | 通用 | 数据质量较高时 | 长序列决策 |
选择建议:
- 追求简单和baseline: TD3+BC
- 追求稳定和通用性: IQL
- 需要理论保证: CQL
- 数据集包含长序列且质量较高: Decision Transformer
Offline-to-Online Fine-tuning
纯Offline RL学到的策略受限于数据集的质量和覆盖度。一个自然的问题是:能否先用Offline RL从数据集中学到一个不错的初始策略,然后再通过少量的online交互来进一步提升?
这就是Offline-to-Online(O2O)Fine-tuning的研究方向。
为什么纯Offline不够
- 数据集覆盖度有限: 行为策略可能没有访问过某些关键的状态-动作对,导致学到的策略在这些区域表现很差
- 保守估计过度: CQL等方法为了安全而过度保守,可能错过了更好的策略
- 无法适应环境变化: 如果部署环境和数据收集环境存在差异,纯offline策略可能失效
核心挑战
O2O fine-tuning面临的主要挑战是:在从offline切换到online时,策略性能可能会先大幅下降,然后才缓慢恢复。 这被称为"初始性能崩塌(Initial Performance Collapse)"。
原因在于:Offline RL训练得到的保守Q值会在online训练的最初几步被迅速"修正"(通常是向上调整),这种突然的Q值变化会导致策略的剧烈波动。
代表方法
Cal-QL (Calibrated CQL): 对CQL的Q值进行校准,使得offline阶段学到的Q值不会过度保守,从而减少online fine-tuning初期的性能崩塌。
IQL→Online: IQL天然适合O2O fine-tuning,因为它的训练过程不依赖于与当前策略的交互。在online阶段,只需要将新收集的数据不断加入replay buffer继续训练即可。
Balanced Replay: 在online阶段,混合使用offline数据和新收集的online数据进行训练,避免灾难性遗忘。
Offline-to-Online流程:
Phase 1: Offline Training Phase 2: Online Fine-tuning
+----------------------------+ +----------------------------+
| | | |
| 静态数据集 D | | 环境交互 |
| | | | | |
| v | | v |
| Offline RL算法 | ------> | Online RL算法 |
| (CQL/IQL/TD3+BC) | 初始化 | + Replay Buffer |
| | | | (offline数据 + online数据)|
| v | | | |
| 初始策略 π_0 | | v |
| | | 改进策略 π* |
+----------------------------+ +----------------------------+
总结与展望
Offline RL是强化学习走向实际应用的关键一步。它让我们能够利用已有的海量数据来学习决策策略,而不需要冒着巨大的代价去进行在线试错。
核心方法论的关键差异在于如何处理分布偏移:
- 保守估值方法(CQL、IQL)通过约束Q函数来避免对OOD动作的过度乐观
- 策略约束方法(TD3+BC)通过行为克隆正则项来限制策略偏离
- 序列建模方法(Decision Transformer)通过完全抛弃Bellman框架来绕开问题
未来的趋势是将Offline RL与大规模预训练、foundation model相结合。正如语言模型可以从海量文本中学到通用的语言能力,决策模型也有望从海量的交互数据中学到通用的决策能力。Decision Transformer已经迈出了第一步,将RL问题转化为序列建模问题,使得Transformer的scaling law有望在决策领域重现。