kyegomez/OpenMythos
GitHub: kyegomez/OpenMythos
基于公开研究文献从第一性原理重建 Claude Mythos 架构的开源循环深度 Transformer 实现,融合 MoE、MLA/GQA 和 LTI 稳定性约束。
Stars: 8703 | Forks: 1830
# OpenMythos
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, 第一性原理, 计算自适应, 逆向工具