纯棋盘输入训练贪吃蛇AI:简化设计击败复杂特征工程

开发者用朴素棋盘输入训练贪吃蛇智能体,发现简单观测优于复杂特征工程,并揭示gamma与失败回放的关键作用。
本文介绍了一个用C++和PyTorch训练的贪吃蛇强化学习项目。开发者采用PPO算法和残差CNN,仅用6个one-hot通道表示棋盘状态,在3000万步训练后平均得分267(满分297)。实验表明,将gamma从0.995调到0.998使得分从107跃升至150;简单固定棋盘输入(得分192.8)胜过复杂特征工程版本(178.5)。失败回放需以步数衡量覆盖率,否则数据占比不足1%。智能体在获胜前价值估计常为负,呈现“预期失败却获胜”现象。用后期快照练习会导致性能崩溃,价值校准仍是开放问题。项目代码已开源。
在强化学习领域,特征工程往往被视为提升性能的关键,但一位开发者的实验却给出了相反的答案:用最朴素的棋盘输入,反而训练出了更强的贪吃蛇智能体。

项目背景与训练配置
开发者用 C++17 构建了贪吃蛇引擎,通过 pybind11 提供 Python 绑定,并封装成 Gymnasium 环境,随后花费约三天时间训练智能体。最终模型在 200 局贪心策略游戏中平均得分 267(满分 297),其中 21% 的对局填满了整个棋盘。
训练配置如下:
- 算法:PPO + GAE,32 个并行环境,rollout 长度 256,gamma 0.998,lambda 0.97,小型残差 CNN 作为 actor-critic。
- 观测:固定 20x15 棋盘(带围墙),6 个 one-hot 通道分别表示蛇头、颈部、身体、尾巴、食物和墙壁。没有以蛇为中心的旋转,没有身体顺序通道,也没有辅助头。
- 动作:4 个绝对方向键。
- 奖励:每步 -0.01,吃到食物 +10,死亡 -50,填满棋盘 +100。
- 失败回放:32 个环境中有 8 个从过去碰撞前 20 到 50 步的快照重新开始,每次回放上限 200 步。
- 总训练步数:3000 万步。
PPO与GAE:PPO(Proximal Policy Optimization)是一种基于策略梯度的强化学习算法,通过重要性采样和裁剪目标函数,在保证策略更新幅度的同时提高样本效率。GAE(Generalized Advantage Estimation)则是一种优势函数估计方法,利用时序差分误差的指数加权和来平衡偏差与方差,其参数lambda(此处0.97)控制权衡。两者结合常用于连续或离散动作空间的任务,如贪吃蛇。
残差CNN:残差网络(ResNet)通过跳跃连接缓解深层网络的梯度消失问题,使训练更稳定。此处用作actor-critic网络,分别输出动作概率和价值估计。小型残差CNN能有效提取棋盘的空间特征。
one-hot通道:将棋盘每个格子的状态编码为独立的二值通道(如蛇头、身体、食物等),避免数值大小引入虚假的序关系,使卷积网络能清晰区分不同实体。
关键发现:简单输入与关键参数
Gamma 的影响远超预期
早期实验中,仅将 gamma 从 0.995 调到 0.998,平均得分就从 107 跃升到 150,其他参数毫无变化。这说明在贪吃蛇这类长序列决策任务中,折扣因子对价值传播的影响极为关键。
折扣因子gamma:在强化学习中,gamma(0到1之间)决定未来奖励的现值权重。gamma越接近1,智能体越重视长期回报;越小则越短视。贪吃蛇任务中,吃到食物和最终填满棋盘需要长序列决策,因此较高的gamma(如0.998)能更有效地传播远期的价值信号,避免智能体因短期惩罚(每步-0.01)而忽视长期收益。这解释了为何仅调整gamma就能大幅提升性能。
输入工程越少,效果反而越好
开发者曾尝试更复杂的输入设计:以蛇为中心的旋转视图、身体顺序通道、以及一个辅助的危险预测头。但普通固定棋盘智能体在可比阶段以 192.8 对 178.5 的得分胜出,并且自行学会了干净的蛇形扫荡策略。这挑战了“更多特征等于更好性能”的直觉,至少在贪吃蛇任务中,让网络从原始状态中自行学习空间关系似乎更有效。
碰撞规则与回放机制的细节
最初,蛇头可以移动到尾巴正在离开的格子,因为尾巴在同一步会移走。这意味着正前方的身体有时致命、有时安全,智能体需要从输入的微小差异中区分两者。将规则改为所有身体格子(包括尾巴)都算碰撞后,训练效果得到改善。
失败回放机制只有在以“步数”而非“对局数”衡量时才有效。第一版回放了四分之一的新对局,但对局长达数千步,导致回放数据不到训练总量的 1%。调整后,回放才真正发挥作用。
反直觉现象与待解问题
智能体“预期失败”却获胜
最令人惊讶的发现是:智能体在获胜前一刻的价值估计通常为 -30 到 -50。也就是说,它一边“认为自己要输”,一边完成了填满棋盘的操作。开发者推测,失败回放只存储失败对局的位置,因此它练习过的拥挤棋盘几乎都以碰撞告终,导致价值估计偏悲观。
价值估计的悲观偏差:价值函数(critic)通过历史经验学习状态价值。当失败回放仅包含失败对局时,这些状态的价值被反复更新为负值(碰撞导致-50奖励),导致智能体对拥挤棋盘的价值估计系统性偏低。然而,策略(actor)可能仍能发现获胜路径,因为策略更新依赖于优势函数(实际回报减价值估计),悲观的价值反而使优势为正,鼓励探索。这种价值与策略的分离在深度强化学习中并不罕见,但需谨慎校准以避免训练不稳定。
辅助危险头的局限
单独测试的辅助危险头版本达到了 99.7% 的召回率,但仍会漏掉一种罕见的直线配置,导致自信的碰撞。而用每局游戏的后期快照进行练习(以修正终局附近的价值估计)后,性能大幅崩溃:评估得分从 190-230 降到 40-130,早期游戏循环(蛇绕圈直到死亡、从不找食物)重新出现。
根据开发者测试,剩余失败大多来自游戏后期自由空间分裂成不连通的区域。如何在不破坏整体稳定性的前提下校准长回合末端的价值估计,仍是开放问题。
实践启示
这个项目提供了几个可复用的经验:折扣因子在长序列任务中优先级极高;简洁的观测设计可能优于手工特征工程;失败回放需要以步数为单位衡量覆盖率;价值估计的校准与训练稳定性之间存在微妙权衡。
项目代码和最佳模型权重已开源在 GitHub(Partha11/hatchling),文档也可在线获取,适合想复现或进一步实验的开发者参考。

相关推荐

合理使用制度为何对AI时代人人有益
从Hacker News讨论出发,解析合理使用(Fair Use)原则在AI训练与内容创作中的法律逻辑、争议焦点及其对创作者与技术生态的双重影响。

Salesforce 3.75亿美元收购Rune,AI物流技术补强国防业务
Salesforce 据报道以 3.75 亿美元收购国防科技初创公司 Rune,这家 AI 物流公司的技术将用于补强 Salesforce 的 Missionforce 国防平台,也延续了 Salesforce 近期的并购节奏。

Mistral Large 4开源万亿参数,微软6万员工自愿离职
Mistral Large 4 开源万亿参数多模态模型,编码智能体评测得分 48;闪迪财报显示 AI 推理重塑 NAND 需求;谷歌 Gemini 上线应用内文件编辑,OpenAI 上调 Codex 额度,微软向 6 万员工提供自愿离职方案。