ZetaGPT:让位置信息从外挂变成长出来的尝试
> 论文:ZetaGPT: A Reference Implementation of Positional-Encoding-Free State-Space-Attention Language Models > 作者:Róisín Luo(爱尔兰戈尔韦大学) > arXiv: 2608.09432 > 代码:https://github.com/roisincrtai/zetagpt
一个被当作"标配"的设计选择
打开任何一个现代大语言模型的配置文件,你会看到类似这样的条目:
rope_theta: 10000.0
max_position_embeddings: 8192
这是 RoPE(旋转位置编码)的参数。从 GPT-NeoX 到 Llama 到 Qwen 到 DeepSeek,几乎所有主流模型都用 RoPE 或类似的机制把位置信息"贴"到 token 表示上。位置编码之于 Transformer,就像门牌号之于街道——没有它,注意力机制会把"猫追狗"和"狗追猫"当成同一句话。
这是因为 Transformer 的自注意力计算本质上是 排列等变(permutation-equivariant)的:你把输入序列打乱顺序,注意力输出的维度也会跟着打乱,但数值不变。换句话说,自注意力本身不知道 token 的顺序。
位置编码是解决方案:把位置信息编码进 token,让模型"看见"顺序。但这带来一个工程代价——上下文长度超过训练范围时,位置编码需要外推或微调。RoPE 的 NTK-aware 缩放、YaRN、LongRoPE 等一系列技巧,本质上都是在打这个补丁。
ZetaGPT 提出了一个问题:位置信息能不能不靠外挂,而是从模型结构内部"长出来"?
核心设计:状态空间模块前置
ZetaGPT 的架构思路可以用一句话概括:
在每个 Transformer block 的自注意力之前,先过一个因果状态空间模块(causal state-space module),让循环状态动力学把位置信息编码进 token 表示。
具体来说,每个 block 有三个残差子层:
1. 因果状态空间模块(SSM):基于 Mamba 的选择性状态空间方程,通过递归状态动力学编码序列信息。token 经过这一层后,表示已经"知道"自己在序列中的位置。 2. 门控多头自注意力(Gated Multi-Head Attention):在位置感知的表示上做标准的自注意力。门控机制用来缓解 attention sink(注意力被少数无信息 token 吸引的现象)。 3. 前馈网络(FFN):标准的 MLP。
关键设计是 SSM 在注意力之前。这样注意力层拿到的输入已经是位置感知的,不需要额外的位置编码。位置信息不是被"贴"上去的,而是通过递归状态动力学"长"出来的。
一个类比:为什么递归能编码位置
想象你在读一本小说。你的大脑不是在每读一个字时都重新计算"这是第几个字",而是维持一个累积的上下文状态——读到第 100 个字时,你的大脑状态已经包含了前 99 个字的信息。这个状态本身就是位置的编码。
SSM 做的就是这件事。它维护一个隐状态 $h_t$,每个 token 进来时更新:
$$h_t = a_t \odot h_{t-1} + b_t \odot x_t$$
其中 $a_t$ 是输入相关的衰减系数,$b_t$ 是输入相关的输入门。这个递归结构天然地编码了序列信息——第 t 个 token 的状态包含了前 t-1 个 token 的累积信息。
论文观察到了一个有趣的现象:训练过程中,不同通道的 SSM 会自发地发展出多个记忆时间尺度。定义记忆视界 $\tau = -(\ln a_t)^{-1}$,在训练的前 12,800 步(占训练预算的 19.7%),不同通道的 $\tau$ 会分化——有些通道保持短 $\tau$(快速遗忘,只关注局部上下文),有些通道发展出长 $\tau$(慢速遗忘,维持长程依赖)。
这种多尺度记忆是自发涌现的,不是设计者指定的。这和生物大脑中不同神经元有不同时间常数的现象同构。
模型规格与训练流水线
ZetaGPT 提供了三个配置:
| 配置 | 层数 | 维度 | 参数量 |
|---|---|---|---|
| ZetaGPT-S(默认) | 6 | 384 | 34.4M |
| ZetaGPT-M | 12 | 768 | 159.2M |
| ZetaGPT-L | 24 | 1024 | 479.9M |
训练流水线是端到端的:
1. Tokenizer 训练:基于字节级 BPE,词表大小 50,259。从字节开始意味着任何输入都能编码,没有 OOV(out-of-vocabulary)问题。 2. 预训练:在 WikiText-103 上做语言建模,64,840 步,学习率 2×10⁻⁵。训练损失从 10.90 降到 6.05 nats/token。 3. 监督微调(SFT):用 Alpaca-GPT4 指令跟随数据集,2,342 步。 4. 奖励模型训练:复用 Alpaca-GPT4 数据,2,500 步。 5. RLHF:标准的人类反馈强化学习。 6. 思维链推理:用 GRPO(Group Relative Policy Optimization)在 GSM8K 上训练推理能力,不需要监督思维链数据——推理能力通过纯强化学习涌现。
这条流水线最值得注意的一点是:所有阶段都在同一个架构上跑通。从 tokenizer 到 RLHF 到 CoT,不需要切换架构或加额外组件。这让它成为一个干净的参考实现。
为什么"无位置编码"重要
你可能会问:RoPE 用得好好的,为什么要换?
三个理由:
第一,上下文长度的外推问题。 RoPE 在训练长度内表现良好,但超过训练长度就需要各种缩放技巧。而 SSM 的位置信息是递归累积的——理论上,只要状态不衰减到零,模型就能维持任意长度的位置信息。论文没有直接测试超长上下文外推,但架构上没有硬性长度限制。
第二,位置编码的"贴片"性质。 RoPE 是在注意力计算时通过旋转矩阵把位置信息"贴"到 query 和 key 上。这是一种外部干预——模型的结构本身不知道顺序,靠外挂来补。ZetaGPT 的设计让位置信息从结构内部涌现,更接近生物大脑处理序列的方式。
第三,作为研究基线的价值。 当前几乎所有主流模型都用位置编码,这意味着我们其实不知道"不用位置编码"会怎样。ZetaGPT 提供了一个可复现的基线,让研究者可以系统地研究位置编码的必要性、替代方案、以及不同方案的 trade-off。
门控注意力:顺便解决 attention sink
ZetaGPT 还做了一个附带设计:门控多头注意力。
Attention sink 是 Transformer 中的一个普遍现象——注意力会被分配到少数语义无关的 token 上(如句首的 "the"、标点符号)。近期研究表明 attention sink 和幻觉有关,改善注意力分配可以减少幻觉。
ZetaGPT 在注意力输出上加了一个门控机制,让模型可以动态调节注意力的贡献。这个设计来自 Qiu et al. 2025 的工作,在 pre-layer-norm Transformer 上被证明能缓解 attention sink 和 activation collapse。
这是一个"顺便"的设计——论文的重点是位置编码,但门控注意力是一个值得单独研究的方向。
诚实的评价
这篇论文有几个明显的局限:
模型规模太小。 最大配置 479.9M 参数,在 2026 年的标准下属于玩具模型。论文明确承认了这一点,并指出在这个规模上的结论可能不能直接迁移到数十亿甚至数千亿参数的模型。
预训练数据太窄。 只用 WikiText-103,这是一个维基百科语料,规模和多样性都远不如现代大模型用的万亿级数据。论文没有在 MMLU、HumanEval 等标准基准上报告完整结果。
没有和 RoPE 做直接对比。 论文展示了 ZetaGPT 的训练曲线和涌现现象,但没有在相同参数量、相同数据下直接对比"有 RoPE vs 无 RoPE"的性能差异。这让"无位置编码是否真的可行"这个问题缺少一个干净的答案。
单作者、小团队。 这意味着实验覆盖面有限,复现性需要社区验证。
但这篇论文的价值不在于刷榜,而在于提供一个干净的参考实现。ZetaGPT 是第一个开源的无位置编码小语言模型,代码、数据、训练流程全部开放。对于研究架构创新的人来说,这是一个可以拿来改、拿来对比的基线。
对"换层面解决问题"的再扩展
ZetaGPT 是"换层面解决问题"概念谱系的一个新成员:
- 章鱼 RNA 编辑:不改 DNA,改 RNA——施工图层面解决问题
- 黏菌外化记忆:不用神经元,用物理痕迹——介质层面解决问题
- 鸟类量子磁感应:不用指南针,用自由基对——物理层面解决问题
- SOPHIA 分工:不同状态走不同出口——架构层面解决问题
- EvoThink 原子推理:把推理流分段——颗粒度层面解决问题
- Möbius RoPE:换位置编码的拓扑结构——拓扑层面解决问题
- 螳螂虾声子盾牌:用结构过滤而非蛮力阻挡——过滤层面解决问题
- Euclid-MCP:把推理外包给 Prolog——分工层面解决问题
- Regression Tax:配对评测而非平均通过率——评测层面解决问题
- ACE 上下文工程:subagent 分工而非单上下文——工程层面解决问题
这个谱系的核心洞察是:很多看似必须用"加法"解决的问题(加位置编码、加参数、加数据),其实可以用"换法"解决(换表示方式、换优化颗粒度、换评测构造)。 换层面的方案往往更优雅,也更可能突破原架构的天花板。
结语
ZetaGPT 不会改变大模型格局。34.4M 参数的模型不会和 GPT-5 竞争。
但它做了一件更重要的事:它证明了一个设计选择的可替代性。 位置编码不是天经地义的——它可以被递归状态动力学替代,而且整个训练流水线(从 tokenizer 到 RLHF 到 CoT)都能在这个替代上跑通。
这种"证明可替代性"的工作,价值在于打开一个搜索空间。之前所有人都默认"必须有位置编码",现在有了一个可复现的反例。接下来社区可以问:在这个框架下,多大规模会涌现长上下文能力?多尺度记忆视界能扩展到多长?门控注意力能不能解决更大模型的幻觉?
一个好的参考实现,比一篇刷榜论文更值得读。
---
论文链接:https://arxiv.org/abs/2608.09432 代码仓库:https://github.com/roisincrtai/zetagpt