强化学习通关马里奥 · Day 2:从奖励设计踩坑,到发现「站桩」陷阱

1342 字
7 分钟
强化学习通关马里奥 · Day 2:从奖励设计踩坑,到发现「站桩」陷阱

强化学习通关马里奥 · Day 2:从奖励设计踩坑,到发现「站桩」陷阱#

这是「用强化学习通关马里奥」系列的第二篇。Day 1 我厘清了概念(定义动作、拆分奖励),Day 2 开始真正落地:把游戏改造成 RL 能交互的环境,调奖励、加观测、跑 PPO。这一天的收获很反直觉 —— 真正值钱的不是模型学会了什么,而是我踩了一路奖励设计的坑,最后撞见一个更根本的问题。

今天做了什么#

Day 2 的核心是把「环境」跑通并让 PPO 开始学。技术上我走了一条从浏览器到无头引擎的路径:

  • 先在浏览器里跑通 reset/step 闭环,验证能读状态、注入动作、检测死亡
  • 但浏览器被渲染帧率卡死(约 15 步/秒),训练慢到不可用
  • 于是把游戏引擎抽出来在 Node 里无头跑,省掉渲染和音频,速度提升约 1670 倍(5845 步/秒)
  • 这一步的收获是:RL 通关马里奥的难点不在算法,而在「怎么把游戏改造成环境」 —— 要 mock 掉 canvas、document、localStorage、音频一堆浏览器依赖,让纯物理/碰撞逻辑能跑。

我踩的奖励设计的坑(Day 2 真正的学费)#

Day 1 我提过奖励拆分(往右走+1、死亡-100),Day 2 真正落地时才发现没那么简单。我一共改了 4 版奖励,每一版都暴露一个新问题:

第 1 版:前进分太弱,死亡太狠#

往右走 +0.05/单位,死亡 -10。结果 PPO 学到的不是前进,而是少动、晚死 —— 因为动就有撞死的风险,不动反而安全。净收益恒为负。

第 2 版:前进分加大#

往右走 +0.5/单位,死亡 -1。这次 reward 转正了(+25),但 maxX 反而下降。因为 PPO 发现:在一个安全区域来回走(没敌人没坑的地方)能持续赚前进分,比冲到危险区划算。PPO 学会「安全区刷分」。

第 3 版:改用 maxX 增量#

改成「只有本局最远推进量(maxX)创新高才得分」,想消除刷分。结果 PPO 直接站桩不动 —— 因为「不动=0 分(安全)」优于「前进=可能死(-1)」。

第 4 版:加终点距离 + 里程碑奖励#

加了「越接近终点增量越高」和「每突破一段给大奖励」,想让 PPO 有动力往前冲。这一版观测也加了「前方视野」(读取前方 pipe、Goomba 的距离),让 PPO 能看到障碍。

结果:所有 episode 都停在出生点(maxX=16),reward=-1。 比之前更糟。

AI 的评价与纠错#

这一路 AI 帮我校准了很多认知,几个关键点:

奖励整形的本质是博弈,不是数字 单纯调「前进分」「死亡罚」的权重往往无解 —— 因为 PPO 总能找到「钻空子」的策略:安全区刷分、站桩、少动晚死。奖励设计的关键是让「推进」成为唯一划算的选择,而不是调大某个数字。

「前方视野」只是输入,不是规则 我给观测加了 pipe/Goomba 距离,但没有写死「看到 pipe 就跳」。决策逻辑全靠 PPO 自己学。视野只是给模型更多信息,怎么用是训练出来的。

真正的问题往往在环境,不在算法 一路改奖励不是徒劳,但它掩盖了一个更底层的问题:玩家有时会在平坦地面上被判定死亡(没有敌人、没有坑,却 dying=true)。这个环境 bug 不修,PPO 就永远学不会「往前」,只会学会「别动」。

撞见的真问题:为什么 PPO 会「站桩」#

Day 2 最深的教训是最后这个发现。我一直在调奖励、加视野,却忽略了最基础的现象:训练日志里总有约 40% 的 episode 停在出生点(maxX=16)。我一直以为是「正常波动」,直到最后一版全部站桩,才意识到这是信号,不是噪声。

站桩的根本原因:当「动」有风险(可能撞死 -1)、「不动」无风险(0 分)时,PPO 的最优解就是不动。而且我发现 玩家在无头环境里,明明在平坦地面上也会被判定死亡 —— 环境本身阻止了玩家稳定前进。这个环境 bug 不修,上层再好的奖励、再全的视野都是空中楼阁。

明天的方向#

Day 2 的结论很清醒:先别急着调算法、改奖励,先把「环境为什么让玩家无法稳定前进」这个根问题查清楚、修掉。 具体来说:

  • 彻底查清玩家在平坦地面被判「死亡」的真实原因(某个碰撞对象?某个判定 bug?)
  • 确认「写死右移」这种标准动作序列,玩家能否稳定且自然地前进
  • 在环境健康的基础上,再谈奖励、视野、课程学习

一点心得#

Day 2 最大的收获不是技术,而是一种警惕:在 RL 里,「模型没学好」往往是表象,真正的问题躲在环境里。一味调参、改奖励,很容易在错误的土壤上反复施肥。先确认土壤(环境)是健康的,再谈种什么(算法)、怎么浇(奖励)。

路还长,但方向清楚了很多。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

强化学习通关马里奥 · Day 2:从奖励设计踩坑,到发现「站桩」陷阱
https://blog.hypoy.cn/posts/ai/reinforcement-learning-day2/
作者
Hypoy
发布于
2026-08-27
许可协议
CC BY-NC-SA 4.0
随机文章随机推荐
Profile Image of the Author
Hypoy
Hello, I'm Hypoy.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
15
分类
6
标签
41
总字数
25,461
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.4
文章许可
CC BY-NC-SA 4.0