上周,麻省理工学院发布了题为《重量空间编程的火花》(Sparks of Weight-Space Programming)的研究成果。该研究展示了一种名为“重量空间编程”的新范式:通过推理直接计算并修改神经网络的权重,而无需传统的梯度下降或训练循环。

在实验中,GPT-6 Astra 模型能够根据一个小网络原始的权重判断其被训练用于玩哪个游戏,并能从零开始编写权重,模拟经过 PPO 算法训练 1 亿步后的网络状态。另一项实验表明,Astra 仅通过编辑 Qwen3.5-0.8B 模型中 0.016% 的权重,就使其在 MATH-500 基准测试中的准确率从 7.9% 跃升至 48.1%。
深入分析 Astra 的编辑日志发现,其大部分搜索过程本质上是在解决一个线性规划问题(Linear Program, LP)。Astra 耗时约 8 小时、进行了 28 次前向传递来确定需要修改哪些权重以及修改幅度。相比之下,直接求解对应的线性规划问题仅需约一分钟,且最终方案修改的权重数量减少了 8 倍。本文旨在解析这一过程,论证为何该操作可被视为线性规划。
思考循环缺陷
小型推理模型普遍存在“思考循环”缺陷,即反复输出相同的几行内容而无法完成推理任务。Qwen3.5-0.8B 尤其容易陷入此困境。在 MATH-500 测试中,基础模型有 93% 的回答因达到 32,768 token 的限制而未得出最终答案。
Astra 进行的权重编辑有效修复了这一问题,从而提升了模型在多个领域的表现。例如,在 IFEval 指令遵循评估中,得分从 21% 上升至 62%。
| Qwen3.5-0.8B | MATH-500 | GSM8K | IFEval | 达到 Token 限制比例 |
|---|---|---|---|---|
| Base | 7.9 | 13.8 | 21.0 | 93.0% |
| Edited by Astra | 48.1 | 67.1 | 62.3 | 33.1% |
值得注意的是,在较少出现循环问题的 Gemma 3 270M 模型上,Astra 无法显著提升其数学能力。正如作者所言,权重编辑的主要作用是消除阻碍隐藏能力发挥的障碍。
Astra 如何修复循环
Transformer 架构采用残差连接机制:每一层的输出是加到输入上,而非替换输入。追踪 Token 在网络中的流动路径,会得到一个单一向量,每一层都向该向量添加内容,这被称为残差流(在本模型中为 1,024 维)。当模型陷入循环时,残差流会朝一个一致的方向偏移。Astra 的修复策略是编辑特定两层,使它们添加的内容指向相反方向,从而抵消这种偏移。
确定循环方向
Astra 首先构造了四对短文,每对包含一段富有成效的推理文本和一段相同内容的循环版本。运行所有八个文本后,它在特定层记录了每个 Token 的残差流向量。通过计算循环文本的平均向量与生产性文本平均向量的差异并进行归一化,得出了“循环方向” $u$,即模型陷入循环时残差流的移动方向。
编辑权重矩阵
每个 MLP 模块的最后是一个称为 down_proj 的矩阵 $W$。对于每个 Token,它将 MLP 的 3,584 维隐藏激活 $h$ 转换为 1,024 维输出 $Wh$,并加到残差流 $x$ 上:
$$x \leftarrow x + Wh, \qquad Wh = \sum_j h_j \, w_j$$这意味着 MLP 的输出始终是 3,584 个固定向量的加权总和。矩阵 $W$ 决定了这些向量的具体形态,而激活值 $h_j$ 决定了每个 Token 中各个向量被添加的权重。
如果某一列向量部分沿着 $u$ 方向,那么标量 $u^\top w_j$ 表示当激活 $h_j$ 活跃时,该列将模型推向循环的程度。Astra 执行的编辑操作减去一个倍数 $\alpha$:
$$w_j \to w_j - \alpha \, (u^\top w_j) \, u$$当 $\alpha = 1$ 时,沿 $u$ 的分量消失,该列不再推动模型进入循环。在第 15 层和第 19 层对所有列应用此编辑后,GSM8K 和 MATH 训练集上的准确率从 9% 提升至 33%。当 $\alpha = 6$ 时,该分量被翻转:原本沿 $u$ 写入 $+a$ 的列现在写入 $-5a$,每次使用时都将模型推离循环。
每个被编辑的列都改变了同一向量 $u$ 的倍数。整个编辑操作可以表示为方向 $u$ 加上每列的一个数值 $v_j = -\alpha\,(u^\top w_j)$,其余列为零。这是一个秩为一的变化:
$$\Delta W = u\,v^\top$$在每个 Token 处,它向残差流添加 $(v \cdot h_t) \,u$,其中 $u$ 的方向由编辑决定,大小取决于被编辑列的活跃度。除了这个方向外,没有其他变化。
剩下的任务是选择向量 $v$:确定编辑哪些列以及 $\alpha$ 的大小。Astra 通过试错法,在新一批训练问题上测试每一个编辑方案:
| 第 15 和 19 层的编辑 | 准确率 |
|---|---|
| Base 模型 | ~9% |
| 所有列,α=1 | 33% |
| 所有列,α=2 | 43% |
| 所有列,α=3 | 48% |
| 随机方向 (对照组) | 12.5% |
| 前 64 列,α=6 | 55% |
结果显示,随机方向几乎无效。最终的编辑方案仅在每层的前 64 列中使用 $\alpha = 6$,这些列在循环文本上沿 $u$ 方向贡献最大。
时间分配分析
MIT 公布的日志详细记录了 Astra 的所有工具调用和前向传递。Astra 拥有一个 Python 内核,加载权重预算为 50 次前向传递,每次批量运行训练问题或其选择的文本。
最后的 17 次前向传递主要用于重新测试,未改变任何编辑。在整个过程中,找到方向 $u$ 仅花费 15 分钟,而寻找最优向量 $v$ 则耗费了 8 小时。
选择 v 本质上是线性规划
Astra 的目标是找到一个向量 $v$,使得循环 Token 远离方向 $u$,同时尽量不影响生产性 Token。由于符号 $t$ 的推力定义为 $v \cdot h_t$,这是关于 $v$ 的线性函数,因此这两个要求都可以转化为线性不等式约束。
在循环开始前,研究者标记了基础模型自身轨迹中的 Token:深层循环中的 Token ($R$) 和生产性 Token ($P$),并记录了它们在层 15 和 19 的激活值 $h_t$。线性规划问题旨在最小化 $v$ 的 L1 范数:
$$ \begin{aligned} \min_v \quad & \sum_j |v_j| \\ \text{s.t.} \quad & v \cdot h_t \le -\delta && t \in R \quad \text{(至少偏离 } u \text{ 距离 } \delta\text{)} \\ & |v \cdot h_t| \le \varepsilon && t \in P \quad \text{(最多偏离 } \varepsilon\text{)} \end{aligned} $$在实践中,不存在满足所有严格约束的 $v$,因此每个约束都引入了带有惩罚项的松弛变量。
最小化 L1 范数往往导致 $v$ 稀疏。几何上,L1 球的形状像钻石,当它扩张以触及可行区域时,通常会在角点相交。因此,LP 自动选择了特定的列及其数值。
为了得到每层 8 个关键列,保留了效果最大的 8 列。这一方法取代了 Astra 长达 8 小时的搜索过程。现有的通用求解器(如 HiGHS)处理这些约束需要超过 20 分钟,因此研究者编写了一个基于 GPU 的 PDHG(原始-对偶混合梯度)求解器,能在几分钟内返回精确稀疏的 $v$。
实验结果
研究者测试了两种 LP 编辑方案。两者均使用 Astra 确定的层号。一种使用 Astra 计算的方向 $u$;另一种使用启发式方向:通过简单的重复检测器将模型自身轨迹中的 Token 标记为循环或生产性,然后取平均残差流的差异。后者完全不需要 LLM 参与手写文本配对。
所有图表和表格中的数据均来自从未用于组装或调节的独立开发集。
| 改变的权重数量 | GSM8K 测试 | MATH-500 | IFEval | |
|---|---|---|---|---|
| Base 模型 | 0 | 14.1 | 7.0 | 22.9 |
| 编辑:Astras | 130,188 | 68.2 | 50.9 | 61.9 |
| LP,Astra 的方向 | 16,291 | 69.6 | 51.7 | 59.7 |
| LP,启发式方向 | 16,271 | 65.4 | 47.8 | 60.4 |
在使用 Astra 的方向时,LP 在所有基准测试中与 Astra 的编辑效果相当(在噪声范围内),但修改的权重数量减少了 8 倍。使用启发式方向时,达到了目标效果的约 93%。
其他观察结果包括:
- 搜索的重要性:LP 取代了搜索过程。如果在开发集中重复使用 Astra 的配方(前 64 列,$\alpha = 6$)而不重新搜索,得分仅为 44.5;而皮质检测得分为 54.7 分。
- 不同列,相同修复:LP 在第 15 层选出的 8 列中,只有 3 列与 Astra 的第 15 层共享;在第 19 层只有 1 列共享。这表明许多稀疏解决方案都是有效的,重要的是总推力沿 $u$ 方向。
- 随机方向无效:在开发集中,使用相同大小的随机 $u$ 得分为 10.2,略高于基础模型的 10.9,证明方向选择至关重要。
单一方向向量即可实现同等效果
权重编辑只能通过激活值区分循环 Token 和生产性 Token,且在循环开始后识别能力更强。在开发组中,要求 LP 仅针对循环式 Token 进行约束并不比针对所有 Token 更好。
第 15 层的 LP 选出的 88 列在 89% 的 Token 上是活跃的,它们添加的推力在不同 Token 间几乎没有变化。因此,编辑效果接近于沿 $u$ 方向的恒定推力。既然恒定推力不需要修改权重,它可以作为一个定向向量直接在推理时添加到残差流中。
下表展示了在未编辑模型的层 15 和 19 添加 LP 编辑的平均推力 $u$ 的效果,强度分别为 LP 编辑平均推力的 0.5 倍、1 倍和 2 倍:
| 转向强度 (× LP 编辑的平均推力) | 开发集 | MATH-500 |
|---|---|---|
| 0.5× | 51.6 | - |
| 1× | 57.8 | 50.8 |
| 2× | 31.2 | - |
作为对比,在相同运行条件下:LP 编辑在开发集得分为 62.5,MATH-500 为 53.2;Astra 编辑分别为 59.4 和 50.0;基础模型分别为 10.9 和 7.0。(注:此处 MATH-500 为每题单次采样结果。)
在 1× 强度下,转向向量恢复了绝大部分修复效果。然而窗口很窄:0.5× 时循环重现,2× 时循环停止但推理崩溃。
唯一的区别在于交付方式:LP 编辑生成的是普通的检查点文件;而转向向量需要在推理阶段额外部署代码。
局限性与未来展望
目前该研究仅针对单一模型。LP 仍然依赖 Astra 来确定最佳层号,且最佳结果使用了 Astra 计算的方向。虽然启发式方向在没有 LLM 参与的情况下也能达到大部分效果,但并非全部。
此外,循环问题被发现可以通过恒定推力修复,这意味着 LP 中针对单个 Token 的约束并未发挥主要作用。未来若需改变某些 Token 的行为而保留其他 Token,将是检验这些约束更有效性的场景。如何在没有智能体辅助的情况下自动选择层号仍是待解决的开放问题。
最后,本研究仅测试了移除循环行为。许多其他行为,如拒绝回答或谄媚倾向,也可以通过在残差流中添加或移除单一方向来引导。如果某种行为可以通过单一方向控制,将其构建进权重的过程理论上应遵循相同的 LP 逻辑,但这仍需进一步验证。
相关代码、编辑记录及完整报告已在 GitHub 发布。
引用信息
请引用本工作为:
Barry, Nathan. "Can a Linear Program Do Weight-Space Programming?"
nathan.rs (Nov 2026). https://nathan.rs/posts/weight-space-lp.
或使用 BibTex 引用格式:
@article{barry2026wslp,
title = "Can a Linear Program Do Weight-Space Programming?",
author = "Barry, Nathan",
journal = "nathan.rs",
year = "2026",
month = "Nov",
url = "https://nathan.rs/posts/weight-space-lp"
}
Rikiya Takehi, Jayden Teoh, Alex Zhang and Omar Khattab, Sparks of Weight-Space Programming, MIT CSAIL, 2026. 日志依据 CC BY 4.0 协议发布,本文中关于 Astra 运行的所有细节均源自该日志。 ↩︎
Astra 的完整运行共耗时 158 轮对话和 20.3 小时,其中 4.7 小时为服务中断时间。19 次前向传递失败但未计入预算。详细分解见原文报告。 ↩︎





