本节摘要:RL 特点:延迟奖励、探索-利用权衡、非平稳数据分布。挑战:样本效率低、奖励稀疏、训练不稳定、安全约束。
延迟奖励:当前动作的好坏可能要在多步后才显现——围棋一步棋、库存决策一周后才见利润。
非 i.i.d. 数据:(s,a,r,s') 序列强相关,不能像 SL 随机 shuffle batch。
探索-利用:只选当前 Q 最大 → 错过更优策略;随机探索 → 浪费样本。
| 挑战 | 表现 | 常见应对 |
|---|---|---|
| 样本效率 | 需百万步 | 模拟器、模仿学习 |
| 稀疏奖励 | Q 长期为 0 | 奖励 shaping、HER |
| 不稳定 | loss 震荡 | target network、PPO clip |
| 连续动作 | Q 表爆炸 | DDPG、SAC |
| 安全 | 试错代价高 | 约束 RL、离线 RL |
SOURCE 中 AlphaGo/AlphaZero 用自对弈产生密集中间信号;机器人真实环境则样本贵,常先用仿真。
⚠️ 常见坑:奖励只在终局给 ±1——中间状态无梯度,tabula rasa 极难学。
💡 关键直觉:问题驱动选算法——先诊断是「探索不够」还是「价值估计方差大」。
本节说 RL 数据是非独立同分布(non-i.i.d.)的,这是它与监督学习最容易被忽视的差异。下面用一段对比示意来说明后果,以及工程上常用的应对办法。
# 监督学习:数据可以随机洗牌,样本之间无依赖 for epoch in range(epochs): random.shuffle(dataset) # 打乱完全没问题 for x, y in dataset: model.step(x, y) # 强化学习:轨迹内样本强相关,且分布随策略变化 trajectory = [(s0,a0,r0,s1), (s1,a1,r1,s2), (s2,a2,r2,s3)] # 相邻 transition 的 s 高度相关;策略一变,轨迹整体变化
两个层面的"非独立":第一层是时间相关——轨迹里 s_t 和 s_{t+1} 只隔一步,如果按原始顺序逐条喂给神经网络,模型会"过拟合最近的状态",这正是深度 RL 里经验回放(第 5 章 DQN)要解决的;第二层更根本——收集数据的策略本身在变。监督学习的训练集是固定的,而 RL 每次策略更新后,产出的轨迹分布就变了,这是"移动目标"问题的一个来源。
样本效率为何是瓶颈:假设一个环境最优策略需要一百万个样本才收敛。在模拟器里这不是问题,但换到真实机器人上,采集一百万次交互的代价极高。工程上的应对有几条路:先在仿真环境里训练再迁移到真实环境(sim-to-real);用离线数据做离线强化学习;或者干脆降低样本需求——这正是"无模型方法不学环境模型、直接吃经验"的动机。
三种典型故障的快速诊断:训练时如果奖励曲线长时间平坦,优先怀疑探索不足(ε 太小);如果曲线剧烈震荡不收敛,优先怀疑学习率太大或目标不稳定;如果收敛到次优解,优先怀疑奖励设计(Agent 在刷一个你不想量到的指标)。把本节"问题驱动选算法"的思路记住:先诊断症状,再选对应手段,比盲目换算法更有效。
给自己一个真实的失败场景做诊断练习。场景:一个迷宫找出口的智能体,训练一万步后仍然到处乱撞,平均奖励几乎为 0。请按症状排查:先看奖励设计——是不是只在出口给 +1、其余全为 0?若是,这属于"稀疏奖励",连正确的偶然路径都很难碰到,Q 长期为 0 是必然;再看探索——ε 是否被设成了 0 或降得太快?若是,智能体锁死在早期噪声里;最后看学习率——α 太大可能让已学到的价值被后续噪声覆盖。请把这三个嫌疑按"最可能 → 最不可能"排序,并为每项写出一个验证实验(比如"把中间节点奖励改为逐级 +0.1 再跑两万步对比曲线")。做完这个练习,你会获得一种宝贵的"诊断思维":强化学习调参不是碰运气,而是把每个症状对应到具体机制上。这份诊断思路在第 3 章 ε 衰减、第 5 章 DQN 调试里会反复用到,值得单独记住。它也是"问题驱动"这个教程主调的具体落点:先看现象,再定位机制,最后选手段。