On-policy 与 Off-policy
区分生成数据的行为策略与被优化的目标策略是否相同。
学习目标
- 区分生成数据的行为策略与被评价或改进的目标策略。
- 独立复核“单步重要性加权改变估计对象”的输入、计算和解释。
- 重要性采样能修正已有支持上的分布差异。
为什么重要
区分生成数据的行为策略与被评价或改进的目标策略。
学习前需要掌握
背景与问题
一个驾驶员用带随机探索的路线采集数据,学习器却想评估始终选择最快路线的策略。两者面对的是不同的动作分布;未经处理直接平均历史奖励,通常是在评价采样驾驶员,而不是目标策略。
概念定义
行为策略生成实际动作,目标策略是学习器要评价或改进的策略。on-policy 在与目标匹配的数据分布下学习;off-policy 允许二者不同。online/offline 描述能否继续收集数据,是另一条分类轴。
直观理解
用“按城市人群比例抽到的问卷”估计某个特殊群体偏好,需要检查样本来源;直接平均往往回答了另一个人群的问题。强化学习还增加了动作改变后续状态分布的困难。
核心原理
SARSA 的下一动作来自行为策略,因此其 TD 目标包含当前探索行为的后果。Q-learning 则使用贪心最大值作为目标,即使行为仍在 ε-greedy 探索,也是典型 off-policy 控制。
重要性采样以目标概率除以行为概率修正分布,但需要目标支持包含于行为支持。若行为从不尝试某动作,就无法靠除法恢复它的结果;长轨迹比率乘积还可能造成极大方差。
off-policy 不意味着任意旧数据都能稳定复用。函数近似、自举和分布偏差叠加时可能发散;PPO 使用固定旧策略的小批数据做有限轮更新,也不能据此无限使用任意 replay。
数学表达
单步重要性比率
μ 为行为策略;若目标策略有正概率,行为策略也必须提供正概率支持。
变量含义
π目标策略μ行为策略ρ动作重要性权重
计算步骤
- 1行为策略的期望奖励为 0.8×1+0.2×3=1.4。
- 2两个重要性比率是 0.5/0.8=0.625 和 0.5/0.2=2.5。
- 3加权期望为 0.8×0.625×1+0.2×2.5×3=2。
代码对应位置
示例 1单步重要性加权改变估计对象:行为期望为 1.400,修正后的目标策略期望为 2.000。
变量解释
| 变量 | 含义 |
|---|---|
π | 目标策略 |
μ | 行为策略 |
ρ | 动作重要性权重 |
完整数值示例
单步重要性加权改变估计对象
已知条件
- 行为策略动作概率为 0.8、0.2;目标策略为 0.5、0.5。
- 动作奖励分别为 1、3,行为与目标均覆盖两个动作。
计算步骤
- 行为策略的期望奖励为 0.8×1+0.2×3=1.4。
- 两个重要性比率是 0.5/0.8=0.625 和 0.5/0.2=2.5。
- 加权期望为 0.8×0.625×1+0.2×2.5×3=2。
计算结果
行为期望为 1.400,修正后的目标策略期望为 2.000。
处理前后对比
- 重要性采样能修正已有支持上的分布差异。
- 离线数据缺少目标动作时,本例的计算条件不成立。
计算与实现步骤
- 标记 behavior policy
- 标记 target policy
- 判断是否相同
- 选择校正机制
代码实现
示例 1
单步重要性加权改变估计对象
example_01.py用途:行为期望为 1.400,修正后的目标策略期望为 2.000。
behavior = [0.8, 0.2]
target = [0.5, 0.5]
reward = [1.0, 3.0]
raw = sum(p * r for p, r in zip(behavior, reward))
corrected = sum(b * (t / b) * r for b, t, r in zip(behavior, target, reward))
print(f"behavior_value={raw:.3f}, target_value={corrected:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
行为期望为 1.400,修正后的目标策略期望为 2.000。
b- 偏置项。
Step 1 · 1–6 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
behavior = [0.8, 0.2]
target = [0.5, 0.5]
reward = [1.0, 3.0]
raw = sum(p * r for p, r in zip(behavior, reward))
corrected = sum(b * (t / b) * r for b, t, r in zip(behavior, target, reward))
print(f"behavior_value={raw:.3f}, target_value={corrected:.3f}")预期输出或运行结果
behavior_value=1.400, target_value=2.000
常见错误 · 3 条
- 把 off-policy 误写成不能与环境交互。
- 对行为概率为零的目标动作直接做重要性加权。
- 认为使用 replay 就自动解决了全部分布偏差。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 把 off-policy 误写成不能与环境交互。
- 对行为概率为零的目标动作直接做重要性加权。
- 认为使用 replay 就自动解决了全部分布偏差。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Sutton 与 Barto《Reinforcement Learning: An Introduction》(第 5、6 章)。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 把 off-policy 误写成不能与环境交互。
- 对行为概率为零的目标动作直接做重要性加权。
- 认为使用 replay 就自动解决了全部分布偏差。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
off-policy 和 offline 是同义词吗?
不是。SAC 可以在线交互并用旧 replay 做 off-policy 更新;offline RL 在训练期间不允许用当前策略向环境收集新样本。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。