tinyworlds

GitHub
1.2k 98 中等 4 次阅读 2天前MIT视频其他
AI 解读 由 AI 自动生成,仅供参考

TinyWorlds 是 Google DeepMind Genie 架构的极简开源实现,旨在帮助开发者理解如何构建可扩展的自回归世界模型。简单来说,它能让 AI 像人类一样,通过压缩环境规律来预测视频的下一帧画面。

传统模型往往需要大量带有动作标注的数据才能训练,而 TinyWorlds 解决了这一瓶颈。它能在没有先验动作信息的情况下,自动推断帧与帧之间的潜在动作,从而实现更高效的视频生成与物理世界模拟。

这个项目特别适合对 AI 视频生成、强化学习及底层架构感兴趣的研究人员和开发者。TinyWorlds 的独特之处在于它将连续的图像预测转化为离散令牌的选择问题,结合了时空 Transformer、变分自编码器等组件,使得利用大语言模型(LLM)的技术来优化动态预测成为可能。如果你想探索智能体如何“理解”并“生成”世界,TinyWorlds 提供了一个清晰且可实践的代码入口。

使用场景

某机器人研发团队计划利用《塞尔达传说》游戏录像训练智能体的导航能力,试图在无标注动作数据的情况下理解复杂物理环境。

没有 tinyworlds 时

  • 必须依赖昂贵的动作捕捉设备或人工逐帧标注操作指令,数据准备周期长达数月且成本极高。
  • 传统视频生成模型无法准确推断帧与帧之间的潜在动作逻辑,导致预测轨迹出现断裂或不连贯。
  • 通用预训练模型难以捕捉特定游戏世界的物理规则,仿真环境与真实交互之间存在显著分布鸿沟。

使用 tinyworlds 后

  • tinyworlds 通过无监督方式自动推断帧间隐含动作,彻底省去了手动标注动作标签的高昂人力成本。
  • 基于离散 token 的自回归架构能高效压缩世界状态,精准预测下一时刻的环境变化及物体运动规律。
  • 直接加载官方提供的 Sonic 等数据集检查点,数小时内即可构建出具备基础物理认知的动态模型并投入测试。

tinyworlds 通过解耦动作与观测,让研究者能以极低算力成本探索可扩展的世界模型构建路径。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes需配置 WANDB_API_KEY 环境变量;首次运行需通过脚本从 HuggingFace 下载数据和预训练模型;使用 bash 环境执行 export 命令;依赖 requirements.txt 中的具体版本
python未说明
torch
wandb
datasets
huggingface-hub
pyyaml
tinyworlds hero image

快速开始

tiny corp logo

TinyWorlds 是一个基于 Google Deepmind 的 Genie 架构 构建的最小化自回归 (autoregressive) 世界模型 (World Models)。

世界模型无法像 VEO3 那样利用无动作的互联网视频进行扩展。Deepmind 的 Genie 通过不使用任何先验动作数据来推断帧之间的动作,从而解决了这个问题。

TinyWorlds 旨在帮助人们理解 Deepmind 可能用于实现可扩展世界模型的那种巧妙的自回归、无监督方法。

目录

入门

# Installation
git clone https://github.com/AlmondGod/tinyworlds.git
cd tinyworlds
pip install -r requirements.txt
export WANDB_API_KEY=<YOUR_WANDB_API_KEY>
export PYTHONPATH="/workspace/tinyworlds:$PYTHONPATH"

# Training
# 1. download data from huggingface
python scripts/download_assets.py datasets --pattern "zelda_frames.h5"
# 2. run training
python scripts/full_train.py --config configs/training.yaml -- --dataset=ZELDA

# Inference
# 1. pull pretrained sonic checkpoints from huggingface
python scripts/download_assets.py models --suite-name sonic
# 2. run inference
python scripts/run_inference.py --config configs/inference.yaml -- use_latest_checkpoints=true dataset=SONIC

概述

为什么需要世界模型?

塑造世界,生成它

世界模型 (World Models) 是一个将环境当前状态映射到环境下一状态的函数。

为了准确预测环境的下一个状态,该函数必须将世界中所有信息压缩为一组定律。

因此,世界模型捕捉了世界的所有固有结构和涌现现象。

所有深度学习,以及所有智能,都在 试图将宇宙压缩为一个模型。一个通过学习关于宇宙如何运行的启发式规则来预测宇宙下一状态重要方面的模型。

我们的宇宙也可以被视为一个世界模型。它是一个遵循一组定律在每一刻执行的状态到状态的映射。人类在这些基础定律之上体验着许多层的涌现行为。

截至 2025 年,基于视频的世界模型已实际应用为:

  1. 赋予机器人物理世界理解的皮层
  2. 供模型完全在线与物理交互的模拟器
  3. 供人类交互的新现实结构的体验

但人类才刚刚处于为我们自己的世界建模的起步阶段。

TinyWorlds 旨在帮助你更好地理解世界建模,并通过贡献学习

架构概述

tinyworldsarch

TinyWorlds 是一个基于离散 token 的自回归 Transformer,因此我们也可以使用 SOTA(最先进)LLM(大语言模型)技术来改进我们的世界模型。

为什么是离散 token?离散化使我们的动力学预测问题变得容易得多,因为不需要预测图像所在的近无限连续空间,它只需要从我们词汇表(即码本)中的约 1000 个 token 中选择一个。

TinyWorlds 由三个模块组成:

视频 Tokenizer: 这个 Tokenizer(标记器)重建视频序列,中间有一个小的离散瓶颈(我们的视频 token)。这一层将重要信息从视频压缩到 token。

动作 Tokenizer: 这个 Tokenizer 推断两个帧之间的离散动作 token。它通过使用前一帧和一个能看到下一帧的离散动作 token 来重建下一帧的方式进行训练。

动力学模型: 给定过去的动作和帧 token,此模型预测我们的下一帧 token。这应该捕捉我们微型电子游戏世界的物理规律。

构建模块

时空 Transformer

stt

时空 Transformer (Space-Time Transformer) (STT) 是一种用于视频的 Transformer。每个 STT 块包含一个空间注意力层、一个时间注意力层和一个前馈网络 (FFN)。关于自注意力机制的复习,请参阅 Karpathy 的 从零开始构建 GPT 视频

在空间层中,每个 token 关注同一帧中的所有其他 token。在时间层中,每个 token 关注相同位置但在之前时间步的 token。

FFN 是每个嵌入向量上的多层感知机。受神圣仁慈的启发,我使用了 SwiGLU 作为 FFN。SwiGLU 在 Swish 基础上增加了一个门控线性单元 (GLU),其计算方式为

$x_t = W_3[\sigma(W_1x + b1) * W_2x + b2] + b3$ (参见 SwiGLU 图表以获取清晰度)

对于常规 STT,我使用了 均方根归一化 (RMSNorm) 作为归一化器,它比零方差归一化对极端异常值更不敏感。在 RMS 中,我们将输入除以

$\sqrt(\epsilon + x / \sum x^2)$.

对于基于动作条件化的 STT,我使用了 特征线性调制 (FiLM)。FiLM 将每个时间步的动作通过 FFN 传递,以将每个动作潜在变量转换为 Gamma ($\gamma$) 和 Beta ($\beta$) 向量。我们的归一化公式则为

$(x - \mu) / \sigma * (1 + \gamma) + \beta$

变分自编码器

*VAE 很复杂,但以下是概述,省略了许多细节

变分自编码器 (Variational Autoencoders) (VAEs) 定义如下:

  1. 一个编码器网络 (Encoder),用于参数化给定数据 $x$ 下潜在变量 $z$ 的近似后验分布 (posterior distribution) $q(z | x)$
  2. 一个解码器网络 (Decoder),用于参数化给定潜在变量 $z$ 下输入数据 $x$ 的似然 (likelihood) $p(x | z)$

VAEs 最大化 $log(p(x | z))$,即在给定编码器提供的潜在变量 $z$ 的情况下,解码器精确重构输入 $x$ 的可能性。

重要的结论是 $z$ 是低维的,因此对于重构,它将压缩来自 $x$ 的所有重要信息。

有限标量量化

fsq

由于我们需要一组离散的 token(标记),我们将连续的 $z$ 量化为有限个可能的 $z$ 中的一个。

如果向量是高维空间中的点,有限标量量化(FSQ)是一种将空间划分为超立方体的量化方法,向量落入的超立方体即成为其量化表示。

具体来说,我们在 FSQ 中通过以下步骤对向量进行量化:

  1. tanh(x) 将其限制在 [-1,1] 范围内
  2. 缩放/平移至 [0, L]
  3. 四舍五入到最近的整数(量化步长)
  4. 缩放/平移回 [-1,1]

Token 词汇表的大小为 ${L^{D}}$,其中 $L$ 是每个维度的分箱(bins)数量,$D$ 是超立方体的维度。如果有 3 个维度且每个维度有 2 个层级,那么立方体内将有 8 个区域,token 词汇表大小为 8。

FSQ VAE(变分自编码器)允许我们学习结构化的超立方体,用作编码输入信息的 token 词汇表。在我们的上下文中,这些超立方体中的一个可能代表向左移动,另一个代表跳跃,另一个代表蹲下,等等。

为了让梯度流向编码器(因为量化是不可微的),我们将量化后的梯度直接传递给量化前的层。

具体来说,解码器以 $z + stopgrad(z_q - z)$ 作为输入,其中 stopgrad 在 PyTorch 中对应 .detach()。解码器仅使用 $z_q$(因为 $z - z = 0$),但梯度仅针对 $z$ 计算。

架构

视频 Tokenizer

videotokenizer

视频 Tokenizer 是一个 FSQ VAE(变分自编码器),它将视频压缩为离散 token。它在实现高质量视频生成的同时降低了动态的维度。

它使用像素混合 2D 卷积将 patch 转换为嵌入。

然后它使用 STTransformer 处理这些嵌入以生成量化 token。

每个视频 token 包含关于其自身 patch 以及同一位置或时间步其他 patch 的信息。

最后,它将视频 token 解码为重建图像。

动作 Tokenizer

actiontokenizer

动作 Tokenizer 也是一个 FSQ VAE(变分自编码器),它是可扩展性的关键。它通过学习推断两帧之间的动作,使我们能够在没有动作标签的情况下进行训练。然后我们基于这些动作来条件化动态模型。

编码器接收一系列帧并输出帧之间的动作 token。

解码器接收所有之前的帧 $(x_1...x_t-1)$ 和量化动作潜在向量 $(a_1...a_t-1)$ 作为输入,并预测下一帧 $(x_2...x_t)$。

动作 token 应学习编码过去帧与当前帧之间最有意义的变化,这应对应于某种高级动作。

在实践中,动作解码器试图忽略动作,仅从图像中推断。为了抵消这种情况,

  1. 我们掩码除第一帧外的所有帧,因此解码器必须学习使用动作序列作为重建信号
  2. 我们通过辅助损失鼓励编码器中的批次方差

在推理时,我们将每个键映射到一个动作 token,该 token 用于条件化动态模型,供用户影响视频生成。

动态模型

dynamicsmodel

在时间步 $t$,动态模型应接收 tokenized 视频 token $z_{1..t - 1}$ 和动作 token $a_{1..t - 1}$,并预测下一帧 token $z{t}$。

在实践中,我们像 MaskGITBERT 一样训练动态模型。

我们掩码一部分 token,并训练我们的模型在给定所有当前和之前帧及动作 token 的条件下预测被掩码的 token。

为了推断给定步骤的动态,我们首先将一个完全掩码的帧附加到我们的上下文序列中。然后,对于 T 个步骤,我们执行以下操作:

  1. 预测每个掩码位置的 logits
  2. 使用 Softmax 计算 token 概率
  3. 从未掩码的位置中采样 k 个最可能的 token
  4. 将它们放入上下文张量中,移除对应的掩码 token
  5. 重复此过程

我选择了 k 的指数调度(第一步采样约 1 个 token,然后约 2 个,然后约 5 个,然后约 20 个,然后约 50 个,以此类推)

TinyWorlds 推理

给定来自训练分布的初始上下文帧,我们首先将它们 tokenized。

然后我们运行以下循环:

  1. 玩家通过在 $[0, |A|]$ 中选择整数指定要使用的 n_actions 个动作 token 之一
  2. 使用上下文窗口 c 上的视频 token t-c...t 和动作 token t-c..t 条件化动态模型,并运行动态推理
  3. 将预测的视频 token 反 tokenize 为用户的新视频帧

随着动作被传递给模型,tokens 由动态模型预测,我们将它们反 tokenize 为帧展示给用户,我们沿时间维度自回归地重复此过程。

此过程还允许我们一次性预测多个未来帧(受内存和训练分布限制),这可以提高推理质量。

数据

datasets

数据从游戏 .mp4s 处理和下采样为 .h5 文件。 您可以在 开始指南 中使用 datasets 命令从 Huggingface TinyWorlds Datasets 下载现有数据集。

可用数据集包括:

  1. PicoDoom (picodoom_frames.h5),Doom 的极简版本
  2. Pong (pong_frames.h5),经典游戏
  3. Zelda Ocarina of Time (zelda_frames.h5),原始 2D 塞尔达游戏之一
  4. Pole Position (pole_position_frames.h5),像素赛车游戏
  5. Sonic (sonic_frames.h5),原始游戏

要创建新数据集,请在 datasets.py 中创建新的 dataclass 并指定 mp4 路径。提交 PR 或直接私信我,将你的数据集上传到 HF 仓库,以便其他人使用 :)

训练/推理加速

TinyWorlds 支持以下 torch 特性以加速训练和/或推理:

  1. Torch compile,允许我们对某些预优化的操作(如 attention 和 matmuls)使用更快的 CUDA kernels
  2. 分布式数据并行 (DDP),允许我们通过在每台 GPU 上使用相同模型不同数据的方式使用多 GPU 进行训练
  3. 自动混合精度 (AMP),根据当前节点使用的浮点范围将某些操作从 FP32 扩展到 BF16
  4. TF32 训练,允许我们对张量核心优化的 matmuls 和 convolutions 使用 NVIDIA TensorFloat32

形状标注键

所有张量均进行了形状标注,并使用 einops(张量操作库)进行张量操作,缩写如下:

B: 批次大小
T: 时间/序列维度(帧数)
P: 每帧的 patch token 数量
E: 嵌入维度 (d_model)
L: 视频分词器潜在维度
A: 动作分词器潜在维度(动作维度)
D: 每个视频分词器维度的箱数
L^D: 视频分词器的词汇表大小
C: 图像通道
H: 像素网格高度
W: 像素网格宽度
Hp: Patch 网格高度
Wp: Patch 网格宽度
S: Patch 大小

贡献指南

仍有许多待办事项可能带来显著的性能提升……

  • 在前馈网络 (Feedforward Network) 中实现混合专家 (Mixture of Experts)
  • 尝试使用 RoPE(旋转位置编码)/AliBi 位置编码 (Position Embeddings)
  • 尝试不同的优化器 (optimizers) (Muon, SOAP)
  • 添加更多数据集(Terraria, Street Fighter, <your favorite retro videogame>)
  • 尝试使用 AdaLN-Zero 替代 FiLM(增加预缩放参数)
  • 为 MaskGIT 添加新的调度器,如余弦和 Halton
  • 将动作分词器中的 mean pool + concat 替换为 length-2 windowed attention + mean
  • 通过生成、保存和加载预处理后的图像 patch 嵌入而不是完整帧来加速动力学训练
  • 扩展规模:通过在更多 GPU 上训练并添加 FSDP(全分片数据并行)支持扩展到数十亿参数 —— 由 alekseymalakhov11 完成

杂项

TinyWorlds(不包括数据集和外部资源)采用 MIT 许可证。TinyWorlds 是一个独立的研究项目,与 DeepMind 或 Google 无关联、未获其认可或赞助。

aesthetic 设计灵感来源于 TinygradTinygpu

常见问题

相似工具推荐

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

awesome-machine-learning

awesome-machine-learning 是一份精心整理的机器学习资源清单,汇集了全球优秀的机器学习框架、库和软件工具。面对机器学习领域技术迭代快、资源分散且难以甄选的痛点,这份清单按编程语言(如 Python、C++、Go 等)和应用场景(如计算机视觉、自然语言处理、深度学习等)进行了系统化分类,帮助使用者快速定位高质量项目。 它特别适合开发者、数据科学家及研究人员使用。无论是初学者寻找入门库,还是资深工程师对比不同语言的技术选型,都能从中获得极具价值的参考。此外,清单还延伸提供了免费书籍、在线课程、行业会议、技术博客及线下聚会等丰富资源,构建了从学习到实践的全链路支持体系。 其独特亮点在于严格的维护标准:明确标记已停止维护或长期未更新的项目,确保推荐内容的时效性与可靠性。作为机器学习领域的“导航图”,awesome-machine-learning 以开源协作的方式持续更新,旨在降低技术探索门槛,让每一位从业者都能高效地站在巨人的肩膀上创新。

72.1k|★☆☆☆☆|2天前
开发框架其他

scikit-learn

scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最

65.6k|★☆☆☆☆|今天
开发框架其他数据工具

keras

Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。

63.9k|★★☆☆☆|昨天
开发框架数据工具其他