稀疏奖励与模仿学习¶
经典 RL 假设环境每步都给出有意义的奖励,但现实中奖励往往极其稀疏——机器人走整个迷宫只有找到出口那一刻才得分。而模仿学习则提供了另一条路径:不需要奖励函数,直接从专家演示中学习策略。
一、稀疏奖励问题¶
1.1 什么是稀疏奖励?¶
| 奖励类型 | 示例 | 特点 |
|---|---|---|
| 稠密奖励 | 每走一步 -1 分,吃金币 +10 | 每步都有反馈,易学习 |
| 稀疏奖励 | 只有通关时 +1,其他时刻 0 | 绝大部分时间没有反馈信号 |
稀疏奖励为什么难?
智能体在探索初期几乎不可能偶然完成任务 → 得不到正面奖励 → Q 值全是 0 → 无法学到任何有用的策略。
想象一个从未见过锁的人被丢进一个密室,完全靠随机尝试找到出口——这就是稀疏奖励下智能体的处境。
1.2 稀疏奖励的数学困境¶
在稀疏奖励下,策略梯度近似为零:
因为绝大多数轨迹的 \(G_t = 0\)(没拿到奖励),梯度信号几乎为零,无法有效更新参数。
二、解决稀疏奖励的方法¶
2.1 奖励塑形(Reward Shaping)¶
手动设计中间奖励,引导智能体朝目标方向前进。
其中 \(F\) 是人工设计的塑形函数。
示例:机器人走迷宫
- 原始奖励:到终点 +1,其他 0
- 塑形后:距终点每近 1 格 +0.1,撞墙 -0.05
奖励塑形的风险
如果塑形函数设计不当,智能体可能会"钻空子"——找到获取塑形奖励但不完成真实任务的方法。
基于势函数的奖励塑形(PBRS) 可以证明不改变最优策略:
其中 \(\Phi(s)\) 是状态的势函数(如到目标的负距离)。
2.2 好奇心驱动探索(Curiosity-Driven Exploration)¶
核心思想¶
给智能体一个内在奖励:对"新奇"状态的好奇心。
ICM(Intrinsic Curiosity Module)¶
ICM 由两个模块组成:
- 正向模型:预测执行动作 \(a_t\) 后的下一个状态 \(\hat{s}_{t+1} = f(s_t, a_t)\)
- 内在奖励:预测误差越大,说明这个转移越"意外",奖励越高
直觉理解
小孩子喜欢探索新事物——看到没见过的东西会特别兴奋。ICM 就是给智能体装上了这种"好奇心":去没去过的地方,做没做过的事,能获得额外奖励。
2.3 后见经验回放(HER)¶
核心思想¶
HER(Hindsight Experience Replay)的关键洞察:失败的经历也有价值。
即使没到达目标,我们可以假装"我的目标就是实际到达的地方"——这样每条轨迹都有成功的经验。
算法¶
原始目标:到达 G(如迷宫终点)
实际轨迹:s₀ → s₁ → s₂ → s₃(没到 G,失败了)
标准经验回放存储:
(s₀, a₀, r=0, s₁, G) ← 全是失败经验
(s₁, a₁, r=0, s₂, G)
(s₂, a₂, r=0, s₃, G)
HER 额外存储(后见替换目标为 s₃):
(s₀, a₀, r=0, s₁, G'=s₃)
(s₁, a₁, r=0, s₂, G'=s₃)
(s₂, a₂, r=1, s₃, G'=s₃) ← "到达目标"!成功经验!
HER 的优势
- 不需要修改算法或奖励函数
- 与任何 Off-Policy 算法兼容(DQN、DDPG、SAC)
- 在机器人操作任务中效果显著
2.4 课程学习(Curriculum Learning)¶
从简单任务开始,逐步增加难度:
阶段 1:迷宫只有 3 格 → 轻松学会基本移动
阶段 2:迷宫扩展到 5×5 → 学会转弯和规划
阶段 3:迷宫扩展到 10×10 → 学会长距离导航
阶段 4:完整迷宫 + 随机障碍 → 泛化能力
2.5 方法对比¶
| 方法 | 是否需要领域知识 | 适用场景 | 实现难度 |
|---|---|---|---|
| 奖励塑形 | 需要(设计奖励) | 目标明确的任务 | 低 |
| 好奇心探索 | 不需要 | 迷宫、探索类任务 | 中 |
| HER | 不需要 | 多目标任务(如机器人抓取) | 低 |
| 课程学习 | 需要(设计难度梯度) | 复杂度可分级的任务 | 中 |
三、模仿学习(Imitation Learning)¶
3.1 动机¶
如果有专家的演示数据(如人类操作的录像),能否跳过奖励函数,直接学习?
| 方法 | 需要的数据 |
|---|---|
| 强化学习 | 奖励函数 |
| 模仿学习 | 专家演示 \(\{(s_i, a_i)\}\) |
3.2 行为克隆(Behavioral Cloning, BC)¶
思路¶
最简单的模仿学习:把专家演示当作监督学习数据,训练策略网络。
- 离散动作:交叉熵损失
- 连续动作:MSE 损失
# 行为克隆 = 监督学习
for states, expert_actions in expert_dataloader:
predicted_actions = policy(states)
loss = criterion(predicted_actions, expert_actions)
optimizer.zero_grad()
loss.backward()
optimizer.step()
问题:复合误差(Compounding Error)¶
分布偏移问题
训练时:策略看到的都是专家轨迹上的状态(训练分布)
测试时:策略自己做的动作可能导致偏离专家轨迹 → 到达从未见过的状态 → 产生更大误差 → 偏离更远
误差像滚雪球一样累积——一步小错导致状态偏移,偏移导致更大的错误。
误差随时间步 \(T\) 呈二次增长: \(\epsilon_{\text{total}} \propto T^2\)
3.3 DAgger(Dataset Aggregation)¶
DAgger 通过迭代式数据收集解决分布偏移问题:
1. 用专家数据训练初始策略 π₁
2. 循环 N 次:
a. 用当前策略 πₙ 在环境中收集轨迹
b. 请专家标注这些轨迹中每个状态应该采取的动作 ← 关键!
c. 将新数据加入训练集
d. 在完整训练集上重新训练 πₙ₊₁
DAgger 的核心思想
让策略在自己可能到达的状态上也有专家的指导。即使策略犯了错到了陌生状态,专家也会告诉它"在那个状态应该怎么做"。
缺点:需要交互式的专家标注,在很多场景中不现实(如让人类在模拟器中实时标注)。
3.4 逆强化学习(Inverse RL, IRL)¶
思路¶
不直接学习策略,而是从专家的行为中推断出奖励函数,然后用标准 RL 在此奖励函数下训练。
直觉理解
看一个人天天早起跑步(专家行为),推断他可能追求"健康"这个奖励。然后基于"健康"这个奖励函数,可以设计出"早睡、健康饮食、定期运动"等一系列好策略。
3.5 GAIL(Generative Adversarial Imitation Learning)¶
GAIL 将 GAN 的思想引入模仿学习:
- 生成器(策略 \(\pi_\theta\)):尝试生成和专家一样的行为
- 判别器(\(D_\phi\)):区分"这段行为是专家的还是策略生成的"
训练到最后,判别器无法区分策略和专家 → 策略已经学会了专家的行为。
四、模仿学习方法对比¶
| 方法 | 需要什么 | 优势 | 劣势 |
|---|---|---|---|
| 行为克隆 | 专家数据(离线) | 简单快速 | 复合误差,需要大量数据 |
| DAgger | 交互式专家 | 解决分布偏移 | 需要专家在线标注 |
| IRL | 专家数据 | 泛化能力强 | 计算昂贵,需要在内部循环中跑 RL |
| GAIL | 专家数据 | 不需显式奖励函数 | 训练不稳定(GAN 通病) |
五、RL + 模仿学习的结合¶
在实际应用中,纯 RL(从零试错)和纯模仿学习(只看专家)都有局限。两者结合是最强大的范式:
5.1 演示数据预训练 + RL 微调¶
5.2 演示数据加入回放缓冲区¶
将专家演示 \(\mathcal{D}_{\text{expert}}\) 和智能体自身经验 \(\mathcal{D}_{\text{agent}}\) 混合放入 Replay Buffer:
训练采样时按一定比例混合两者。
5.3 应用场景¶
| 场景 | 方法 |
|---|---|
| 自动驾驶 | 行为克隆(大量人类驾驶数据)+ RL(安全约束微调) |
| 机器人操控 | 遥操作演示 + HER + SAC |
| 游戏 AI | 人类玩家数据预训练 + PPO 自我博弈 |
| 大语言模型 | SFT(行为克隆)+ RLHF(PPO 微调) |
关键概念速查¶
| 概念 | 一句话解释 |
|---|---|
| 稀疏奖励 | 大部分时间步奖励为 0,信号极少 |
| 奖励塑形 | 手动设计中间奖励引导学习 |
| 好奇心探索 | 内在奖励驱动访问新奇状态 |
| HER | 失败经验中"假装目标是实际到达的地方" |
| 行为克隆 | 把专家演示当监督学习 |
| DAgger | 迭代式收集策略实际遇到的状态让专家标注 |
| IRL | 从专家行为反推奖励函数 |
| GAIL | 用 GAN 思想让策略生成与专家无法区分的行为 |