Online Learning 与 Offline RL
在线 RL 可继续探索环境,离线 RL 只能使用固定数据集。
学习目标
- 先确认是否允许新交互,再选择探索或数据覆盖的处理方式。
- 独立复核“相同离线记录可以对应不同未见动作收益”的输入、计算和解释。
- 数据量增加不能自动填补完全缺失的动作支持。
为什么重要
先确认是否允许新交互,再选择探索或数据覆盖的处理方式。
学习前需要掌握
背景与问题
医院历史治疗记录很多,却不能为了试探一个新策略就随意给病人不同治疗。此时数据只能来自既定记录,学习器无法用新试验纠正错误;这与游戏里随时再玩一局的在线训练有根本差别。
概念定义
在线强化学习在训练期间收集新交互,策略变化可以带来新的状态和动作数据。离线强化学习只使用固定数据集进行训练;策略评估与选择也需要避免偷偷利用测试环境反复试验。离线不等于行为克隆,仍可能利用奖励进行策略改进。
直观理解
在线学习像允许实地试路,离线学习像只能查看过去的行车记录。地图空白处看起来可能近,但没有记录就不能凭价值网络的高分认为这条路安全可通。
核心原理
冻结 DQN 或 SAC 的 replay 并不自动得到可靠离线算法。其最大值或 actor 会主动寻找 critic 最高估的动作;在线时可能收集新反馈纠正,离线时却可能不断自我放大。
数据质量包括状态覆盖、动作支持、奖励与终止标记是否可靠,以及行为策略的多样性。高质量但窄范围专家数据适合模仿,却不意味着能识别大量从未执行动作的回报。
离线方法可约束策略接近行为、惩罚无支持动作的乐观 Q,或通过数据动作做隐式改进。它们在保守与提高收益之间做取舍,不能突破数据与结构假设决定的可辨识边界。
数学表达
在线数据增长与离线固定数据
本式示意数据边界;在线缓冲也可有容量上限,离线训练不因策略变化自动获得新转移。
变量含义
D_t第 t 次交互时可用数据d_t该转移的真正终止标记D_0固定离线数据集
计算步骤
- 1只看 stay 数据,两种环境无法区分。
- 2价值网络若预测 jump=10,只在环境 A 中正确。
- 3没有额外试验或结构假设,不能保证选 jump 能改进。
代码对应位置
示例 1相同离线记录可以对应不同未见动作收益:观测数据相同,未见动作的真实奖励可以相反;离线策略改进必须承认该不确定性。
变量解释
| 变量 | 含义 |
|---|---|
D_t | 第 t 次交互时可用数据 |
d_t | 该转移的真正终止标记 |
D_0 | 固定离线数据集 |
完整数值示例
相同离线记录可以对应不同未见动作收益
已知条件
- 数据只包含动作 stay,奖励一直为 1。
- 两个候选环境都与数据一致,但动作 jump 的奖励分别为 +10 与 −10。
计算步骤
- 只看 stay 数据,两种环境无法区分。
- 价值网络若预测 jump=10,只在环境 A 中正确。
- 没有额外试验或结构假设,不能保证选 jump 能改进。
计算结果
观测数据相同,未见动作的真实奖励可以相反;离线策略改进必须承认该不确定性。
处理前后对比
- 数据量增加不能自动填补完全缺失的动作支持。
- 允许在线试验后可补充证据,但实验已进入在线或微调阶段。
计算与实现步骤
- 冻结并版本化数据集
- 审计状态—动作—回报覆盖
- 建立 BC 与朴素 DQN/SAC 基线
- 使用约束、保守或隐式目标
- 离线评测
- 小流量或受保护部署
代码实现
示例 1
相同离线记录可以对应不同未见动作收益
example_01.py用途:观测数据相同,未见动作的真实奖励可以相反;离线策略改进必须承认该不确定性。
worlds = [{"stay": 1, "jump": 10}, {"stay": 1, "jump": -10}]
for index, world in enumerate(worlds, start=1):
print(f"world={index} observed_stay={world['stay']} unseen_jump={world['jump']}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
观测数据相同,未见动作的真实奖励可以相反;离线策略改进必须承认该不确定性。
Step 1 · 1–3 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
worlds = [{"stay": 1, "jump": 10}, {"stay": 1, "jump": -10}]
for index, world in enumerate(worlds, start=1):
print(f"world={index} observed_stay={world['stay']} unseen_jump={world['jump']}")预期输出或运行结果
world=1 observed_stay=1 unseen_jump=10 world=2 observed_stay=1 unseen_jump=-10
常见错误 · 3 条
- 冻结普通 off-policy 算法的数据后就声称风险已解决。
- 用在线测试回报反复调参后仍称纯离线评估。
- 只统计数据量,不检查状态动作覆盖与记录质量。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 冻结普通 off-policy 算法的数据后就声称风险已解决。
- 用在线测试回报反复调参后仍称纯离线评估。
- 只统计数据量,不检查状态动作覆盖与记录质量。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Levine 等:Offline Reinforcement Learning: Tutorial, Review, and Perspectives。
算法属性与数据边界
目标函数
从固定数据集 D 学习策略;训练期间不新增环境 transition
数据边界
- 允许读取固定的 (s,a,r,s′,done) 或轨迹数据。
- 训练阶段禁止用当前策略向环境索取新样本;调参不能偷看测试环境回报。
- 数据未覆盖区域没有反事实保证,部署必须受行动权限与回退策略保护。
与 DQN、SAC 及相邻方法对照
- DQN:离散动作、max backup,冻结数据后容易选择 OOD 高估动作。
- SAC:连续动作、最大熵 actor-critic;actor 可能提出数据外动作并被 critic 错误奖励。
- Offline RL:额外管理策略支持、价值保守性或仅对数据动作更新。
失败模式、风险与性能
失败模式
- 冻结普通 off-policy 算法的数据后就声称风险已解决。
- 用在线测试回报反复调参后仍称纯离线评估。
- 只统计数据量,不检查状态动作覆盖与记录质量。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
离线 RL 训练好了可以在线微调吗?
可以,但应将数据来源、交互预算、策略选择和评测阶段分开报告;微调性能不能作为纯离线训练性能。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
Farama-Foundation/Minari
为离线强化学习提供标准化数据集 API、数据集目录和数据收集工具。
Farama Foundation · GitHub
仓库信息
加载、创建和管理离线 RL 数据集
主要语言:Python包含数据集或实验需要额外环境