第 11 章 · 模仿学习、反向 RL 与元 RL
第 10 章 离线强化学习处理"只有历史数据、不能交互"的场景,但仍假设数据带有显式奖励信号。本章处理两种更极端的情形:(1) 完全没有奖励函数——只有专家示范轨迹,怎么办?(2) 环境本身在不断变化——智能体必须学会"快速适应新任务"。前者引出模仿学习(Imitation Learning, IL)与反向 RL(Inverse RL),后者引出元 RL(Meta-RL)。两者最终在 LLM 时代合流:SFT 本质是行为克隆,InstructGPT 三阶段可重写为 BC + RL + RL,而 In-Context RL 揭示了"RL 算法本身可被蒸馏进 transformer"。
13.1 行为克隆与 DAgger
第 6 章策略梯度假设环境提供 reward。但很多真实任务中我们只有专家示范——人类驾驶员的轨迹、熟练工人的操作记录、高质量问答对。模仿学习直接从示范学策略,跳过奖励函数的设计。
监督学习的视角
最朴素的方案是把模仿学习当成监督学习:把 (st,at) 当作 (输入, 标签),最小化负对数似然:
LBC(θ)=−E(s,a)∼Dexpert[logπθ(a∣s)]
其中 Dexpert={(si,ai)}i=1N 是专家示范数据集。这就是 LLM 监督微调(SFT)的标准损失。
def behavior_cloning_step(policy_net, expert_batch):
states, actions = expert_batch
log_probs = policy_net.log_prob(states, actions)
loss = -log_probs.mean() # 负对数似然
optimizer.zero_grad()
loss.backward()
optimizer.step()
return loss.item()BC 的致命缺陷
BC 训练时专家状态分布是 dexpert(s),但部署时智能体访问的是 dπθ(s)。一旦策略在某一步犯了小错,状态就偏离专家轨迹,进入从未见过的区域,下一步错误概率更高——误差指数级累积。
形式化地,假设每步错误概率为 ϵ,T 步后仍在专家分布附近的概率约为 (1−ϵ)T→0。DAgger 论文(Ross et al. 2011)证明了 BC 的期望误差上界:
E[t=0∑T1[πθ(st)=π∗(st)]]≤O(T2ϵ)
误差随 horizon 平方级放大。这就是为什么纯行为克隆的自动驾驶在长程任务上几乎不可用。
DAgger 与 迭代收集"失败状态"
Dataset Aggregation 的核心洞察:与其让智能体在专家没见过的状态下挣扎,不如主动收集这些失败状态,请专家标注。
def dagger(env, expert, policy_net, n_iterations=20, n_traj_per_iter=50):
dataset = []
for it in range(n_iterations):
# 1. 用当前策略 rollout(注意:不是用专家!)
trajectories = []
for _ in range(n_traj_per_iter):
s = env.reset()
traj = []
done = False
while not done:
# β 混合:早期多用专家保证安全,后期多用策略
beta = max(0.0, 1.0 - it / 10)
if np.random.rand() < beta:
a = expert(s)
else:
a = policy_net.act(s)
s_next, r, done, _ = env.step(a)
traj.append((s, a))
s = s_next
trajectories.append(traj)
# 2. 关键:对策略访问到的状态(包括失败状态)请专家重新标注
for traj in trajectories:
for s, _ in traj:
a_expert = expert(s)
dataset.append((s, a_expert))
# 3. 用扩展后的数据集重训策略
train_bc(policy_net, dataset)DAgger 让训练分布从 dexpert 逐渐逼近 dπθ——解决分布偏移的根本病因。理论上 DAgger 的误差上界降为 O(Tϵ),线性增长,远好于 BC 的 O(T2ϵ)。
| 方法 | 训练数据来源 | 是否解决分布偏移 | 需要专家在线标注 |
|---|---|---|---|
| BC | 仅离线专家数据 | ❌ | ❌ |
| DAgger | 专家 + 策略访问的状态 | ✅ | ✅(关键限制) |
| GAIL | 专家 + 策略 rollout | ✅(隐式) | ❌(只需状态-动作对) |
DAgger 的工程瓶颈是需要专家在线交互。人类驾驶员很难实时为 AI 生成的"奇怪状态"标注正确动作。这推动了下一节"从示范反推奖励"的反向 RL 路线。
本节总结
行为克隆(BC)是最朴素的模仿学习——把专家轨迹当作监督数据训练策略。但它有分布漂移问题:训练时只在专家状态分布上学习,部署时一旦偏离就再也回不来。DAgger 通过让专家纠正 agent 的实际轨迹解决这个问题。
下一节 13.2 逆向 RL 与 GAIL 不再直接模仿动作,而是从专家行为反推奖励函数——这就是逆向强化学习(IRL)。