分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

SheepSeb/tinyworldformer

机器学习

一个在 Raspberry Pi Pico 2 W 上同时运行微型神经世界模型与强化学习智能体的研究项目。

297
11
Rust
创建于 8 天前

这个项目训练了两个小型神经网络:一个世界模型根据当前画面和动作预测下一帧与奖励,一个 actor 根据生成画面选择动作,二者都运行在 Raspberry Pi Pico 2 W 上。在板子上真实游戏从不运行:actor 只看世界模型生成的画面,因此游戏是在“自己的梦境”里被游玩和学习的。

它展示了什么

世界模型是一个循环 Transformer,重复使用同一个 block 的权重 1 至 4 次;循环次数越多,精度越高,但速度变慢。画面被切成 2×2 到 6×6 的 patch,解码时会全局地放置单个 sprite,确保球或玩家只出现一个。作者指出,这条解码规则把 Breakout 在留出数据上的逐帧完全正确率从 91.6% 提升到 99.7%(README)。

项目包含五个游戏:Breakout、Doom-lite、Flappy Bird、Pong 和 Pac-Man lite。在两次循环下,逐帧完全正确率从 83.6%(Doom-lite,其 3D 视图让单个像素错误就判定整帧错误)到 100%(Flappy Bird)。作者认为仅看数据精度不够,因为智能体会利用模型错误,于是第二项检查把梦境帧按真实游戏规则回放;在 5,000 个梦境步骤中,Pac-Man 出现 742 次错误游戏状态,而其他被检查的游戏为 0 至 1 次(checking the dream)。

actor 使用 Stream AC(λ),每次只从一个 transition 学习,不需要 replay buffer 或 target network;作者还记录了一些因智能体利用漏洞而做的修复,例如 Doom-lite 的梦境丢失敌人 sprite 后加入噪声增强(README)。

运行方式

  • Pico 2 W 固件: no_std Rust 构建,世界模型矩阵用 int8,嵌入等保留 float32,构建时选择世界模型和智能体。文档中的每个游戏都能装进板子的 4 MB flash 和 512 KiB SRAM,但 Pac-Man 的 460 KiB RAM 已接近上限(on the chip)。
  • 浏览器: 同一个 int8 引擎编译成 WebAssembly,不依赖 wasm-bindgen,负责梦境、智能体和板端学习(browser build)。
  • 本机: Rust crate 可以在终端里运行游戏。

训练和导出使用 Python 与 uv,仓库给出了多阶段流程:记录 transition、训练世界模型、训练智能体、评估梦境,再导出到 Rust(reproduce)。作者说明世界模型训练用了 RTX 4060,而智能体可以直接在 Pico 上学习(HN 回复)。

条件与待确认点

目标是紧凑的演示,不是通用游戏引擎。作者在回复评论时表示,把类似方法用到开放世界这类场景很难不出现幻觉(HN 回复)。README 称尚未测量 Pico 本身的帧率,Doom-lite 和 Pac-Man 的精度也低于较简单的游戏。仓库元数据未声明许可证,这对打算复用代码的人很重要。

本文由 AI 根据项目 README 生成,更新于 2026年10月30日,以项目官方文档为准。

Hacker News 讨论

A tiny world model running games on a Raspberry Pi Pico 2 W
▲ 263 · 18 条评论 · 2026年10月29日