看别人开车,再学着打方向,听起来就是监督学习。问题在于你这一步偏了一点,下一步看到的路就已经不是老师当时看到的路。单步预测误差不大,整段行为仍然可能很差。自动驾驶里,这正是开环分数好看、闭环却出事的原因,见端到端驾驶与闭环评测。

Behavior cloning 的目标很直接

行为克隆(BC)直接从示范数据学习动作:

$$ L_{\rm BC}=-\mathbb E_{(s,a)\sim\mathcal D_{\rm expert}} [\log\pi_\theta(a\mid s)]. $$

它不需要 reward,也不需要让 agent 大量试错。代价是数据来自 expert 访问的状态,而部署时来自 learner 自己访问的状态。方向盘向边缘偏一点,后续观测(observation)不断偏离,训练集中又没有“如何回到路中间”的示范。

这不意味着更多数据永远没用;是说相同窄覆盖上的更多数据未必解决新状态下的恢复问题。

误差为什么会沿时间积累

做一个简化分析:在第一次偏离 expert 之前,每一步出错概率至多为 $\epsilon$,偏离之后暂时不保证能恢复。Union bound 给出到第 $t$ 步为止(含第 $t$ 步)已经出错的概率至多为 $\min(1,t\epsilon)$;不需要假设各步独立。

把 expert 轨迹(trajectory)与 learner 轨迹放在同一初始条件和环境随机性下比较;在首次动作偏离前,两条轨迹相同。若偏离后每一步的额外损失最多为 1,那么长度 $T$ 的期望累计额外损失满足:

$$ \mathbb E[\text{累计额外损失}]\le\sum_{t=1}^{T}\min(1,t\epsilon) \le\frac{T(T+1)}{2}\epsilon. $$

这解释了 $O(T^2\epsilon)$ 从哪里来:一次错误可能影响后面很多步。它是这些简化条件下的坏情况上界,不是预测真实任务损失的公式;能恢复的环境往往好得多。

数据更多,为什么仍可能学错

问题 一个例子 应该改哪里
观测不够 一帧看不出物体正靠近还是远离 加历史或记忆,但别把观测直接当完整状态
动作有多个合理模式 绕障碍向左 -1、向右 +1 都安全,均方误差却可能学出直行 0 用能表达多峰分布的策略(policy)(如混合分布、离散选择),而不是只预测均值
学了捷径 在玩具导航数据里,角落的颜色一直提示 expert 下一步向哪走,部署时颜色却不再可靠 改变或遮掉线索做对照,检查行为是否依赖真正相关的信息

第二种在真机器人上很常见:扩散动作头怎样同时学到两个峰、每次只走其中一条,动作块怎样避免在两条路线之间来回抖,见机器人学习:从示范中学动作。第三种是因果混淆(causal confusion)的直观例子。增加历史可能提供真正的状态信息,也可能给模型更多捷径。不能因为输入更全,就默认行为更可靠;DAgger 也不是自动识别因果的算法。

DAgger:补的是自己会走到的状态

先用 BC 得到初始策略;让 learner 运行,在它访问到的状态向 expert 请求正确动作;把新标注并回旧数据,再训练。早期可以混合执行 expert 与 learner,逐步减少依赖。

为什么直接多收一点 expert 自己的轨迹,不是同一件事?

Expert 可能从不走到路边,所以不会示范那里怎么恢复。DAgger 改变的是标注状态分布:去 learner 实际遇到的地方问 expert。它需要可查询的 expert,也要控制采样危险;并不是把部署错误免费变成监督数据。

经典分析里,BC 的错误在坏情况下会随时域复合;DAgger 在 no-regret 等条件下改善累计损失界。不要把常见的 $O(T^2\epsilon)$ 与 $O(T\epsilon)$ 当成任何环境下测得的固定性能倍率。

IRL:从行为猜目标,不是读心术

Inverse RL 问:什么 reward 能解释 expert 的行为?一个策略常能被很多奖励(reward)函数解释。给所有轨迹加上相同常数,或者做合适的 potential shaping,都可能保持策略排序。

因此必须加入假设或归纳偏置,例如奖励的函数族、最大熵模型、偏好比较。Expert 也可能受能力、信息和成本约束;观察到的行为不必等于完全理性的最优偏好。这里不推导完整 MaxEnt IRL 优化过程。

用偏好学习 reward,要防止哪里失真

对同一个任务的两个结果,常用成对概率模型:

$$ P(y^+\succ y^-\mid x)=\sigma(r_\phi(x,y^+)-r_\phi(x,y^-)). $$

它把选择变成 reward difference 的监督,但不自动区分质量、长度、风格和标注者偏好。训练策略再不断优化这个 reward 时,可能找到标注覆盖之外的漏洞。必须保留独立的任务验证,不能让提供奖励的那个 judge 再来判定训练是否成功。

偏好对怎样真的更新 reward model?

假设同一个问题,标注者选择 A 而不是 B,模型当前给分 $r_A=1,r_B=0$。预测 A 获胜的概率为 $\sigma(1)\approx0.731$,负对数似然约 0.313。

$$ L=-\log\sigma(r_A-r_B),\qquad \frac{\partial L}{\partial r_A}=p-1,\quad \frac{\partial L}{\partial r_B}=1-p. $$

这里对两个输出分数的梯度约为 −0.269、+0.269。如果直接把这两个分数当作独立变量更新,下降会抬高 A、压低 B。但实际训练改的是共享的网络参数,两个分数不一定一升一降:例如 $r_A=2w,r_B=w$,增大 $w$ 会让两者都升高,分差也在增大。

两边同时加 100,概率与 loss 都不变。因此这份监督首先约束分差,不能把绝对 reward 100 当作“比 reward 1 好一百倍”。

如果标注者偏爱长答案,模型也可能学到长度捷径。可以让内容质量相同、长度不同,或者长度相近、事实质量不同,分别检查。两位标注者意见不一致时,先看问题是不是存在真实偏好差异;不必把所有分歧都称作标注错误。

有示范以后,最值得补什么数据?

观察到的失败 比“再收一些好示范”更具体的补法 限制
小偏差后不会恢复 在 learner 访问的偏离状态询问 expert Expert 要能安全、可靠地回答
同一状态有多个合理动作 保留多种动作及条件,不压成均值 模型也要能表达多峰选择
看见固定背景就乱猜动作 改背景、保留任务条件,做对照 不要把真正有用的上下文一并删掉
Reward 高但实际完成差 收集独立任务结果、困难偏好对 不能只继续用同一个评分器标注

DAgger 的一轮是“执行 learner → 询问这些状态的 expert 动作 → 聚合数据 → 重新拟合”,不是“把 learner 自己选的动作当作正确标签”。标注预算有限时可以挑危险、分歧或不确定状态,但采样规则也会改变覆盖;不能只标模型最自信的成功轨迹。

怎样接回语言模型

SFT 类似学示范,RL 用结果反馈改行为;两者不是谁淘汰谁。先有一个能完成基本任务的策略,再决定哪种反馈能提供示范之外的信息。人类偏好、程序验证和环境奖励各有盲区。

参考:DAgger · Causal Confusion in Imitation Learning。下一步可读 RLHF,或固定日志能支持多少推断。

本页术语 6
行为克隆 behavior cloning, BC
用示范中的状态与动作做监督学习;不自动处理自己行动后遇到的新状态
观测 observation
智能体实际收到的信息,可能只是环境完整状态的一部分
轨迹 trajectory
与环境交互得到的一串状态、动作和奖励;采样时也可能只保存其中一段
策略 policy
给定状态,规定怎样选动作;可以输出一个动作,也可以输出动作的概率分布
因果混淆 causal confusion
把与示范动作相关、却不能可靠支持决策的线索当成依据
奖励 reward
RL 里指导策略更新的标量信号