kyegomez/OpenMythos

GitHub: kyegomez/OpenMythos

基于公开研究文献从第一性原理重建 Claude Mythos 架构的开源循环深度 Transformer 实现,融合 MoE、MLA/GQA 和 LTI 稳定性约束。

Stars: 8703 | Forks: 1830

# OpenMythos

Version Twitter Discord PyTorch

OpenMythos 是 Claude Mythos 模型的开源理论实现。它实现了一个包含三个阶段的循环深度 Transformer (Recurrent-Depth Transformer, RDT):**Prelude**(前置 Transformer 块)、循环的**循环块**(最多 `max_loop_iters` 次)以及最终的 **Coda**。Attention 可以在 MLA 和 GQA 之间切换,并且前馈网络使用带有路由专家和共享专家的稀疏 MoE,非常适合探索计算自适应、深度可变的推理过程。 ## 安装 ``` pip install open-mythos #uv pip install open-mythos ``` 要在 `GQAttention` 中启用 Flash Attention 2(需要 CUDA 和构建工具): ``` pip install open-mythos[flash] ``` ## 用法 ``` import torch from open_mythos.main import OpenMythos, MythosConfig attn_type = "mla" # or "gqa" base = { "vocab_size": 1000, "dim": 256, "n_heads": 8, "max_seq_len": 128, "max_loop_iters": 4, "prelude_layers": 1, "coda_layers": 1, "n_experts": 8, "n_shared_experts": 1, "n_experts_per_tok": 2, "expert_dim": 64, "lora_rank": 8, "attn_type": attn_type, } if attn_type == "gqa": cfg = MythosConfig(**base, n_kv_heads=2) else: cfg = MythosConfig( **base, n_kv_heads=8, kv_lora_rank=32, q_lora_rank=64, qk_rope_head_dim=16, qk_nope_head_dim=16, v_head_dim=16, ) model = OpenMythos(cfg) total = sum(p.numel() for p in model.parameters()) print(f"\n[{attn_type.upper()}] Parameters: {total:,}") ids = torch.randint(0, cfg.vocab_size, (2, 16)) logits = model(ids, n_loops=4) print(f"[{attn_type.upper()}] Logits shape: {logits.shape}") out = model.generate(ids, max_new_tokens=8, n_loops=8) print(f"[{attn_type.upper()}] Generated shape: {out.shape}") A = model.recurrent.injection.get_A() rho = torch.linalg.eigvals(A).abs().max().item() print( f"[{attn_type.upper()}] Spectral radius ρ(A) = {rho:.4f} (must be < 1)" ) ``` ## 模型变体 从 1B 到 1T 参数的预配置规模: ``` from open_mythos import ( mythos_1b, mythos_3b, mythos_10b, mythos_50b, mythos_100b, mythos_500b, mythos_1t, OpenMythos, ) cfg = mythos_7b() # returns a MythosConfig model = OpenMythos(cfg) total = sum(p.numel() for p in model.parameters()) print(f"Parameters: {total:,}") ``` | 变体 | `dim` | 专家数量 | `expert_dim` | 循环次数 | 上下文 | 最大输出 | |---|---|---|---|---|---|---| | `mythos_1b` | 2048 | 64 | 2048 | 16 | 4k | 4k | | `mythos_3b` | 3072 | 64 | 4096 | 16 | 4k | 4k | | `mythos_10b` | 4096 | 128 | 5632 | 24 | 8k | 4k | | `mythos_50b` | 6144 | 256 | 9728 | 32 | 8k | 4k | | `mythos_100b` | 8192 | 256 | 13568 | 32 | 1M | 128k | | `mythos_500b` | 12288 | 512 | 23040 | 48 | 1M | 128k | | `mythos_1t` | 16384 | 512 | 34560 | 64 | 1M | 128k | ## 训练 在 FineWeb-Edu 上训练 3B 模型的脚本位于 [`training/3b_fine_web_edu.py`](training/3b_fine_web_edu.py)。 **单 GPU:** ``` python training/3b_fine_web_edu.py ``` **多 GPU(自动检测 GPU 数量):** ``` torchrun --nproc_per_node=$(python -c "import torch; print(torch.cuda.device_count())") training/3b_fine_web_edu.py ``` 关键设计选择: | 特性 | 详情 | |---|---| | 优化器 | AdamW | | 数据集 | `HuggingFaceFW/fineweb-edu`(默认为 `sample-10BT`,完整运行可切换为 `sample-100BT` 或 `default`) | | 分词器 | `openai/gpt-oss-20b`,通过 `MythosTokenizer` 实现 | | 并行策略 | 通过 `torchrun` 实现的 PyTorch DDP,分片流式数据集 | | 精度 | 在 H100/A100 上使用 bfloat16,在较旧 GPU 上使用 float16 + GradScaler | | 调度策略 | 线性预热(2000 步) → 余弦衰减 | | 训练目标 | 30B tokens(~针对循环架构进行 Chinchilla 调整后) | ## 文档 | 页面 | 描述 | |---|---| | [`docs/open_mythos.md`](docs/open_mythos.md) | `OpenMythos` 类的完整 API 参考——构造函数、`forward`、`generate`、所有子模块、配置参考以及使用示例 | | [`docs/datasets.md`](docs/datasets.md) | 推荐的训练数据集,以及针对每种模型规模的 token 预算指南 | ## 核心假设 Claude Mythos 被怀疑是一个**循环深度 Transformer (Recurrent-Depth Transformer, RDT)** ——也被称为循环 Transformer (Looped Transformer, LT)。它没有堆叠数百个独特的层,而是回收一部分层,并在每次前向传递中多次运行它们。权重相同。循环更多。思考越深。 这不是思维链 (Chain-of-Thought)。没有中间 token 输出。所有这些推理都**静静地发生在单次前向传递中**,在连续的潜空间内。 ## 架构 循环 Transformer 将其层划分为三个功能块: ``` Input ↓ [Prelude P] — standard transformer layers, run once ↓ [Recurrent Block R] — looped T times ↑_______↓ (hidden state h updated each loop with input injection e) ↓ [Coda C] — standard transformer layers, run once ↓ Output ``` 在每个循环步骤 t 的循环块更新规则: ``` h_{t+1} = A·h_t + B·e + Transformer(h_t, e) ``` 其中: - `h_t` 是循环 t 之后的隐藏状态 - `e` 是编码后的输入(来自 Prelude),在每次循环时注入 - `A` 和 `B` 是可学习的注入参数 - Transformer 块照常应用 Attention 和 MLP 在每个步骤注入 `e` 可以防止模型发生漂移——它在整个循环深度中保持原始输入信号活跃。 完整的实现位于 [`open_mythos/main.py`](open_mythos/main.py)。有关详细的 API 演练、配置选项和使用示例,请参阅 [`OpenMythos` 类参考](docs/open_mythos.md)。 ### Attention 实现 Attention 层可以通过 `cfg.attn_type` 进行切换: | 选项 | 类 | 描述 | |---|---|---| | `"gqa"` | `GQAttention` | 分组查询 Attention (Ainslie 等人, 2023) —— KV 头少于 Q 头(`n_kv_heads < n_heads`),将 KV-cache 内存减少 `n_heads / n_kv_heads`。当安装了 `flash-attn>=2.8.3` 时,使用 **Flash Attention 2** (Dao 等人, 2023):GQA 被原生处理(无需 KV 头扩展),I/O 受限最优,当缺少该包时会透明地回退到手动缩放点积 Attention。 | | `"mla"` | `MLAttention` | 多潜变量 Attention (DeepSeek-V2) —— 缓存压缩的 KV 潜变量(`kv_lora_rank`)而不是完整的 K/V,通过拆分 RoPE / 无 RoPE 的头维度实现位置感知压缩。 | RoPE 在缓存之前应用于 Q 和 K,因此缓存的值在检索时不需要重新旋转。 ## 为什么这能解释 Mythos ### 1. 系统性泛化 普通的 Transformer 无法以训练期间从未见过的方式组合知识。循环 Transformer 则通过了这项测试。这种能力是通过一个**三阶段顿悟 (grokking) 过程**涌现出来的: 1. 记忆化——模型拟合训练分布 2. 分布内泛化——模型处理已知的组合 3. 系统性泛化——模型突然且出人意料地处理 OOD (分布外) 的新颖组合 这就是为什么 Mythos 在面对新问题时,在感觉上与其他模型有本质的不同——能力是发生相变瞬间跃迁出来的,而不是逐渐涌现的。 ### 2. 深度外推 在 5 跳推理链上进行训练。在 10 跳上进行测试。普通的 Transformer 会失败。循环 Transformer 则会成功——通过在推理时运行更多循环。这直接印证了一个观察结果:Mythos 能够在没有显式思维链 的情况下处理深度组合问题(多步数学、长期规划、多层论证)。 推理时的循环越多 = 推理链越深 = 能解决更难的问题。 ### 3. 潜在思维作为隐式思维链 每次循环迭代在功能上等同于思维链的一个步骤,但是是在连续的潜空间而不是 token 空间中操作。运行 T 次循环的循环模型隐式地模拟了 T 步的 CoT 推理。这已被正式证明 (Saunshi 等人, 2025)。 此外,连续的潜在思维——不同于离散的 token 输出——可以同时编码**多个备选的下一步**。这允许在推理空间中进行类似于广度优先搜索的操作,而不是单一确定的推理路径。该模型实际上在每次前向传递中探索了许多可能的方向,然后再进行收敛。 ### 4. 没有参数爆炸 运行 L 次 k 层的循环模型可以达到 kL 层非循环模型的质量,但只使用了 k 层的参数。对于 Mythos 规模的部署,这一点至关重要: - 内存占用量不会随推理深度增加而增长 - 推理时的计算量随循环次数而非模型大小进行扩展 - 这使得更深的推理在参数量方面变得“免费” ## 稳定性问题(以及可能的解决方案) 训练循环模型出了名的不稳定。两种主要的失败模式是: - **残差爆炸**——隐藏状态 `h_t` 在循环中无限制地增长 - **损失突刺**——由于注入参数中存在较大的谱范数,训练突然发散 ### 动力系统视角 将循环重铸为残差流上的离散线性时不变 (LTI) 动力系统。忽略非线性的 Transformer 贡献,递推变为: ``` h_{t+1} = A·h_t + B·e ``` 对于这个 LTI 系统,稳定性完全由 A 的**谱半径**决定: - `ρ(A) < 1` → 稳定,收敛 - `ρ(A) ≥ 1` → 不稳定,发散 根据经验,每次发散的训练运行都学习到了 `ρ(A) ≥ 1`。每次收敛的运行都保持了 `ρ(A) < 1`。 ### 修复方法 约束注入参数,从而**在构造上**保证稳定性: 1. 将 A 参数化为连续的负对角矩阵 2. 使用 ZOH/Euler 方案进行离散化:`A_discrete = exp(Δt · A_continuous)` 3. 通过 `A := Diag(-exp(log_A))` 并带有一个可学习的标量 `Δt` 来强制负性 4. 这确保了无论学习率或批次噪声如何,`ρ(A) < 1` 始终成立 结果是:循环模型对超参数选择的鲁棒性显著提高,即使在高学习率下也能干净地训练。这就是 Parcae 架构 (Prairie 等人, 2026),它代表了 Anthropic 用于使 Mythos 可训练的最可能类别的解决方案。 ## 循环模型的缩放定律 Parcae 确立了循环训练的第一个可预测的缩放定律: - **训练**:对于固定参数和固定 FLOP 预算,增加平均循环次数并减少 token 数量,比在更多数据上以最少循环进行训练能产生更低的损失。最佳循环次数和最佳 token 数量都遵循跨规模具有一致指数的**幂定律**。 - **推理**:更多的测试时循环次数按照**可预测的、饱和的指数衰减**提高质量——收益是真实的,但在递减。这反映了思维链的推理时缩放定律。 在 770M 参数下,循环模型可以达到在相同数据上训练的 1.3B 固定深度 Transformer 的下游质量——大约**以一半的参数实现了相同的质量**。 应用于 Mythos:如果在这些缩放定律下进行训练,Mythos 的参数效率可能比看起来要高得多,其表面“能力”的很大一部分来自于循环深度而不是原始参数数量。 ## 循环索引嵌入假设 一个关键的未决问题是,循环块在每次迭代中的行为是否**完全相同**,或者它是否可以学会在不同的循环深度做不同的事情。 如果在循环之间没有任何位置信号,相同的权重必须同时处理早期阶段的模式匹配和晚期阶段的细化——这是一个严格的约束。一个**类似于 RoPE 的循环索引嵌入**在每一步与输入一起注入,将允许相同的参数在迭代中实现功能不同的操作,就像 RoPE 允许相同的 Attention 头在不同的序列位置表现不同一样。 如果 Mythos 使用了这种技术,那么每个循环都不是一次重复——它是一个独特的计算阶段,它们共享权重但在不同的表示机制中运行。这将大幅增加循环块的表达能力,而无需增加参数数量。 ## 过度思考问题 循环越多并不总是越好。超过一定深度后,过度的循环会**降低预测质量**——隐藏状态越过解决方案漂移成噪声。这就是“过度思考”失败模式。 最初的 Universal Transformer (Dehghani 等人, 2018) 通过使用**自适应计算时间 (Adaptive Computation Time, ACT)** 停止机制解决了这个问题:一个针对每个位置学习的标量,动态决定何时停止循环。较难处理的位置会获得更多计算;简单的 token 会提前停止。 Mythos 几乎可以肯定拥有此机制的某个版本。该模型不能天真地对每个输入运行最大数量的循环——它需要一个学习到的信号来指示答案何时已经收敛。ACT 机制还使模型在某些假设下是**图灵完备** 的,这对它可以解决的问题类别具有理论意义。 ## 专家混合 —— 疑似用于大参数量 循环 Transformer 解释了 Mythos 推理的深度,但没有解释广度。使用相同的权重处理截然不同的领域——代码、数学、文学、科学、法律——需要**专家混合**。疑似的设计是将循环块中的每个 FFN 替换为细粒度的 MoE 层:每个 FFN 被拆分为许多小型专家(正常大小的 1/m),路由器通过学习的亲和度分数每个 token 选择其中的 top-mK,并且少数**共享专家**无论路由如何都始终被激活,以吸收跨领域的通用知识——语法、基本推理、一般上下文——否则这些知识将被每个路由专家冗余地学习。在训练期间动态调整路由器 logits 上的偏置项来防止路由坍塌,从而在不扭曲损失信号的情况下保持专家之间的负载平衡。 随着隐藏状态 `h_t` 在循环迭代中演变,路由器可能会在每个深度选择不同的专家子集,使得每个循环尽管共享权重,但在计算上却是独特的。MoE 提供广度;循环提供深度。如果激活率约为 5%,Mythos 可以容纳数千亿的总参数,而每个 token 只激活其中的一小部分——真正的参数数量(如果曾经披露的话)将是一个存储数字,而不是一个计算数字。 ## 记忆-推理权衡 循环模型表现出一种有趣的二分法:循环改善了推理,但可能损害记忆。循环结构针对迭代组合进行了优化——向前运行推理链——但并没有本质上改进对死记硬背事实的存储。 这对应于 Mythos 的一个可观察特征:它对从未见过的新问题推理得异常出色,但其事实回忆可能不一致。该架构在结构上偏向于组合而非记忆。 基于循环的正则化 (Saunshi 等人, 2025) 可用于在训练期间平衡这种权衡——对推理任务应用更强的循环约束,同时为检索任务放宽约束。 ## 通过 LoRA 适配实现参数重用 来自松弛递归 Transformer (Bae 等人, 2024) 的一种互补方法:与其要求每次循环的权重完全相同,不如在每次迭代中添加一个小型的**深度方向 LoRA 模块**。这保留了权重共享的紧凑性,同时允许每个循环略微调整其行为。 结果是: - 每个循环共享一个大型通用权重矩阵(递归基础) - 一个小型秩为 r 的适配矩阵改变了每次迭代深度的行为 - 总参数开销极小 这弥合了纯权重绑定(参数效率最高,表达能力较差)和完全独立的层(表达能力最高,无参数节省)之间的差距。Mythos 可能处于这个频谱的某个位置。 ## 连续深度方向批处理 递归架构的一个下游后果是:**连续深度方向批处理**。因为所有的 token 共享相同的循环块,模型可以针对不同的 token 或序列在不同的深度退出循环——在同一个批次中,快速处理简单的输入,并以更多次迭代处理困难的输入。 理论分析表明推理吞吐量有 2-3 倍的提高。对于像 Mythos 这样同时服务众多用户的已部署模型来说,这将是一个实质性的效率提升。 ## 总结:Mythos 可能是什么 | 属性 | 描述 | |---|---| | 架构 | 循环深度 Transformer (Prelude + 循环块 + Coda) | | FFN 层 | 疑似 MoE —— 细粒度专家 + 常驻的共享专家 | | 参数量 | 总量非常大;每个 token 激活的比例很小(估计约 5%) | | 推理机制 | 通过迭代潜在更新实现隐式多跳——步骤之间无 token 输出 | | 推理时缩放 | 更多循环 = 更深推理,遵循可预测的指数衰减 | | 训练稳定性 | LTI 约束的注入参数,谱半径 < 1 | | 循环差异化 | 可能使用每次迭代的循环索引位置嵌入(类似于 RoPE) | | 停止机制 | 自适应计算时间 或学习到的收敛标准 | | Attention | GQA(可选 Flash Attention 2)或带有压缩 KV 潜变量缓存的 MLA | | 缩放定律 | 最佳训练将循环和数据一起缩放,而不仅仅是参数 | | 推理与记忆 | 结构上偏向组合;记忆化需要单独处理 | | 部署 | 连续深度方向批处理实现了每个请求的可变计算量 | ## 参考文献 ### Twitter / X - 为什么 Claude Mythos 这么强——循环 Transformer 理论 (Sigrid Jin):https://x.com/realsigridjin/status/2044620031410266276 - LT 对参数化知识的隐式推理解锁了泛化能力 (Yuekun Yao):https://x.com/yuekun_yao/status/2044229171627639004 - 循环 Transformer 的循环轨迹和输入注入 (rosinality):https://x.com/rosinality/status/2043953033428541853 - 稳定循环语言模型的 Parcae 缩放定律——推文串 (Hayden Prairie):https://x.com/hayden_prairie/status/2044453231913537927 - 类似 RoPE 的循环索引嵌入想法用于区分跨迭代的功能 (davidad):https://x.com/davidad/status/2044453231913537927 - 关于循环 Transformer 争议,作者 ChrisHayduk:https://x.com/ChrisHayduk/status/2045947623572688943 - 关于循环 Transformer 争议的总结,作者 @realsigridjin https://x.com/realsigridjin/status/2046012743778766875 ### 论文 - MoE 中的细粒度专家分割和共享专家隔离:https://arxiv.org/abs/2401.06066 - 循环、思考与泛化——循环深度 Transformer 中的隐式推理:https://arxiv.org/pdf/2604.07822 - Parcae——稳定循环语言模型的缩放定律:https://arxiv.org/abs/2604.12946 - Parcae 博客:https://sandyresearch.github.io/parcae/ - Universal Transformers:https://arxiv.org/pdf/1807.03819 - 带有潜在思维的推理——循环 Transformer 的力量:https://arxiv.org/abs/2502.17416 - 训练大型语言模型在连续潜空间中进行推理:https://arxiv.org/abs/2412.06769 - 松弛递归 Transformer——通过逐层 LoRA 实现有效的参数共享:https://arxiv.org/pdf/2410.20672 - 混合深度 Attention:https://arxiv.org/abs/2603.15619 ## 引用 如果您在研究中使用 OpenMythos 或基于此项工作,请引用: ``` @software{gomez2026openmythos, author = {Kye Gomez}, title = {OpenMythos: A Theoretical Reconstruction of the Claude Mythos Architecture}, year = {2026}, url = {https://github.com/kyegomez/OpenMythos}, note = {Recurrent-Depth Transformer with MoE, MLA, LTI-stable injection, and ACT halting} } ``` ## 许可证 MIT License — 版权所有 (c) 2026 Kye Gomez。有关完整文本,请参见 [`LICENSE`](LICENSE)。
标签:Apex, DLL 劫持, GQA, MLA, NLP, PyTorch, RDT, Transformer, 人工智能, 凭据扫描, 大语言模型, 开源模型, 循环深度Transformer, 推理优化, 机器学习, 模型架构, 注意力机制, 深度学习, 混合专家模型, 理论研究, 用户模式Hook绕过, 稀疏MoE, 第一性原理, 计算自适应, 逆向工具