一句话定义

世界模型(World Model) 是一个预测器:输入当前观测和一个动作,输出下一帧观测,有时再带一个奖励值。它不判断「这是什么」,而是学环境的状态怎么变。

和识别模型的分工很清楚:识别模型回答「画面里有什么」,世界模型回答「接下来会变成什么样」。前者是分类,后者是动力学。

它解决什么问题

在真实世界里试错很贵,有时不可逆。机器人撞一次、车开错一次、门店里把整排货架推倒一次,代价都不是重跑一遍程序能补回来的。

世界模型给的是先在模型里演一遍的能力:策略在生成的帧序列里试,失败只浪费算力。它对端的两个动机也来自这里——数据不够时可以拿它生成训练场景;策略上线前可以拿它做压力测试。

关键做法

2026 年 10 月 Hacker News 上被顶到 270 赞的项目 tinyworldformer(作者 SheepSeb)把这件事压到了单片机上,正好可以当解剖样本。

  • 帧切成 token。Breakout 的 20×16 帧按 2×2 切块,Doom-lite 的 32×32 按 4×4,Pac-Man 的 48×48 按 6×6,每帧落在 36 到 80 个 token 之间。每个 token 的嵌入是块内各格学习向量之和,块内位置另有一张独立的表,避免顺序信息被加和抹掉。位置向量和动作向量也一起加进去。
  • 共享权重的循环 Transformer。整个模型只有一个 block(注意力加 ReLU MLP)、一套权重,重复跑 1 到 4 遍,每一遍之前把输入加回去。每一遍的输出都对着真实的下一帧训练,于是圈数变成一个可以在运行时拧的旋钮:少跑几圈换帧率,多跑几圈换准确率。板子上为了保住帧率用两圈。
  • 压到能上芯片。世界模型 26k 到 131k 参数、每帧 2 到 8 百万次乘加、权重 q int8;旁边的决策网络是两层隐层 MLP、9k 到 16k 参数、float32。两者都跑在 RP2350 的 core 1 上,core 0 管 USB 和显示屏——一颗双核单片机同时装着「想象」和「决策」。
  • 在生成的画面里训练策略。板上的 agent 可以换成从零开始的版本,只在模型生成的帧里学,不接真游戏。这是世界模型最实用的一面:环境成了可复制的软件,不再是一次性的硬件。

效果用精确帧率衡量——预测帧的每一格都与真实下一帧一致的比例。两圈时 Breakout 99.99%、Flappy Bird 100%、Pong 99.45%、Pac-Man 86.4%、Doom-lite 83.6%。Doom-lite 加一圈升到 85.9%,四圈反而回落到 84.7%:多算不等于更对。

常见误区

  • 把生成的画面当记录。 世界模型输出的是「最可能的下一帧」,不是「发生过的下一帧」。取证、纠纷、防损要的是原始录像,不是模型认为应该发生什么。
  • 以为随机事件也能预测。 项目在统计精确帧率时,把随机事件之后那一帧直接排除——开球方向、敌人重生位置、下一个管口高度,这些本来就只能采样,不能预测。
  • 以为帧里有全部状态。 四个游戏里差距最大的 Doom-lite,第一人称视野只有 768 格,一面墙的着色差一格整帧就算错;作者的说明是游戏状态几乎总是对的,这个数字比实际玩起来难看。同一套方法在不同任务上差出十几个点,通常不是模型的问题,是观测没把状态装全。
  • 忽略误差累积。 一步错,下一步的输入就是错的,rollout 越长越偏。所以世界模型的评测要按步数分开报,而不是只报平均。

用不上的时候

  • 需要精确计数、逐笔对账、事后举证的场合。这类需求要的是记录与检索,不是生成。
  • 环境里有大量不可观测的隐藏变量,且这些变量决定结果。帧里没有的东西学不出来。
  • 需要长时间稳定推演。误差会顺着 rollout 放大,超过一定步数就没有参考价值。
  • 部署侧连 int8 量化后的小模型都放不下。这项目已经把门槛压到几十 KB 级参数,再往下压,模型容量不足以表达状态转移。

参考

GitHub 项目 SheepSeb/tinyworldformer(Rust,2026-10-22 创建,作者 SheepSeb),项目页 https://sheepseb.github.io/stealth/posts/tinyworldformer.html;Hacker News 讨论 2026-10-29(270 赞 / 19 评论)。参数量、每帧乘加数、精确帧率、圈数对照表与随机事件说明均取自该项目页,未做二次推算。

延伸阅读

相关词条


火眼识别提供端侧视觉引擎与设备管理平台,相关方案见 火眼识别官网。