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