跑不出来的时候,先看这张表
最后一章不讲新东西,只把前面二十三章折成一张能用的表,外加三个你应该按顺序问自己的问题。
那张表
为什么「奖励层」排第一
这是这本书最想留给你的一条实践判断,值得单独说:
算法层的毛病会喊。NaN、发散、报错、Q 值单调涨到天上去——这些都在数值上留下痕迹,你盯着曲线就能发现。
奖励层的毛病不喊。损失在降,分数在涨,曲线漂亮得能直接放进论文——只有行为是错的。
第 20 章那个「当场趴下刷姿态分」的小人,训练日志是这样的:最好分从第 3 代起稳定在 5.140,群体均值也稳定在 5.140,教科书级别的收敛曲线。前进距离一直是 0.000 米。
而我当时的第一反应是去调学习率。那是完全查错了层。
所以排查顺序应该反过来:先查那个不会喊的,再查那个会喊的。因为会喊的那个,你不查它也会自己找上你。
三个问题
如果这张表太长记不住,就记这三个问题。按顺序问,绝大多数事故会当场现形。
① 它真的能拿到奖励吗
最容易被跳过的一步,也是最便宜的一步。
# 五分钟,能省你几天的算力
hits = 0
for ep in range(1000):
s, _ = env.reset()
total = 0
while True:
s, r, term, trunc, _ = env.step(env.action_space.sample()) # 纯随机
total += r
if term or trunc: break
if total > 0: hits += 1
print(f"随机策略 1000 局里拿到正奖励 {hits} 次")
如果是 0 次,别开训。先解决探索问题——课程学习、几条人类演示、势函数塑形,随便哪个都行,但必须先解决。(第 21 章)
② 它拿到的是我想给的那个吗
去看录像。
这一条没有替代品。奖励黑客在数值上是完美的——目标函数确实被最大化了,而且往往比正常行为最大化得更彻底、收敛得更快。
唯一的检测手段是把它渲染出来看一眼。三十秒,能省你三天。(第 20 章)
③ 有没有一种更省事的活法能拿更多分
这一问是唯一一个你必须替它想的——因为它一定会想到。
逐项过一遍你的奖励函数,问:这一项能被无限刷吗?特别警惕这三类写法:
- 只看某一时刻的状态 → 改成按时间积分(第 20 章那个 bug)
- 奖励某个可逆的状态变化(靠近、拿起、进入某区域)→ 改成势函数形式
γΦ(s') − Φ(s) - 用一个能无限重复的事件计数(撞到补给、碰到球)→ 加冷却,或者每个只算一次
全书,一页
| 章 | 一句话 |
|---|---|
| 01 | 「AI 自己学会了」里,AI 做搜索,你做打分 |
| 02 | 五个词描述完整个领域,其中只有奖励是你写的 |
| 03 | 纯贪心必然完蛋,因为它没有机会发现自己错了 |
| 04 | 探索该做多少,取决于你还剩多少局 |
| 05 | MDP 五样东西,两样是你写的,一样你永远拿不到 |
| 06 | γ 不是精度,是你替 agent 决定的耐心 |
| 07 | 价值从终点往回一圈圈长出来(与 AIMA 逐位一致) |
| 08 | 贝尔曼方程只有一个加号:左边眼前,右边以后 |
| 09 | 策略比价值先定下来,价值只是中间品 |
| 10 | 不知道概率?走一万次取平均。代价:只学得会走过的地方 |
| 11 | 拿估计更新估计,就不用等一局结束 |
| 12 | 「不知道规则」和「学不到最优」是两回事 |
| 13 | SARSA 知道自己会犯错,所以离悬崖远一点 |
| 14 | 表格装不下不是因为硬盘不够,是它学不会「相似」 |
| 15 | DQN 五个零件里只有一个是深度学习 |
| 16 | 致命三角:奖励全为 0 也能炸到 10⁶ |
| 17 | 不学价值直接学策略,绕开 max 就绕开了「动作必须可枚举」 |
| 18 | 相信这批数据,但只相信一步之内 |
| 19 | 五行 reward,五种生物,物理常数一个都没改 |
| 20 | 它没有作弊,是你的规格写漏了 |
| 21 | 用塑形的训练,用稀疏的验收;验收的尺子不能进训练 |
| 22 | 奖励模型不是「什么是好回答」,是「标注员倾向于选哪个」 |
| 23 | 造会走路的小人,需要的是一行写对了的 reward |
| 24 | 先查不会喊的那一层 |
最后
这本书的主线是两句话,现在再念一遍:
你写的从来不是策略,是打分器。
而它会精确地最大化你写下的东西——不是你想要的东西。
前十八章那些算法会过时。DQN 已经很少有人用了,PPO 迟早也会被换掉,今天的 SOTA 五年后大概率只剩历史意义。
但那两句话不会过时。因为它们说的不是某个算法的性质,是「用一个数字去表达一个意图」这件事本身的性质。
而这件事的适用范围,比强化学习大得多:
- 你给团队定的 KPI,和团队实际会做的事
- 推荐算法优化的点击率,和用户实际想要的内容
- 游戏里的日常任务奖励,和「玩家玩得开心」
- 考试分数,和「学会了」
每一条都是同一个结构:一个说不清楚的真实目标,一个可度量的代理指标,和一个会精确最大化后者的优化器。
经济学管这个叫古德哈特定律。强化学习只是把它加速了几百万倍——人类员工优化 KPI 要几个月,agent 几分钟就能把你的奖励函数榨干,然后把结果摆在你面前。
所以这本书最后想留下的,是一个习惯,而不是一套知识:
每次你写下一个「什么算好」的定义之后,停三秒,问一句:有没有一种更省事的活法,能拿到更高的分?
如果有,那它一定会找到。不是因为它坏,是因为它在做你让它做的事。
那个小人还在屏幕上跑。
你现在知道它抽搐的时候在探索,摔倒的时候在学习,站起来的那一刻是标准差收缩到了某个值。
你也知道,它跑成什么样,在作者敲下那一行 reward 的时候就已经决定了——只是作者自己当时也不一定看得出来。
去写你自己那一行吧。然后记得看录像。