Newshot

线性规划能做权重空间编程吗?

Translation(model translation, not the source's own text)

文章标题:线性规划能做权重空间编程吗?

正文: 上周,MIT CSAIL 发表了《Sparks of Weight-Space Programming》。给定一个小型网络的原始权重,GPT-6 Astra 能够判断出它是被训练来玩哪个游戏的。仅给定一个游戏的规则,它就能从零开始写出一个小型网络的权重,并且击败了用 PPO 训练了 1 亿步的网络。没有梯度,没有训练循环,只是对权重所计算的内容进行推理。他们创造了“权重空间编程”这个说法。

在另一个实验中,他们让 Astra 通过编辑权重来提升 Qwen3.5-0.8B 的数学能力。Astra 只改动了 0.016% 的权重,MATH-500 准确率就从 7.9% 跃升到 48.1%。1

看了 Astra 的编辑过程后,我意识到它的搜索大部分是在通过试错求解一个线性规划。它花了大约 8 小时和 28 次前向传播来选择改哪些权重、改多少。而几次 LP 求解,每次大约一分钟,就能完成同样的工作,且改动的权重少了 8 倍。在这篇文章中,我将带你过一遍这次编辑,解释为什么它是一个 LP,以及这对修复本身意味着什么。

思考循环

小型推理模型有一个常见的失败模式:它们会陷入思考循环,反复重复同样的几行内容,而不是完成推理。Qwen3.5-0.8B 尤其容易如此,它的模型卡片也说明了这一点。在 MATH-500 上,基座模型 93% 的回答都撞上了 32,768 token 的上限,始终没能给出答案。

这次编辑修复了循环,所以它能在模型发生循环的任何地方提供帮助。这包括指令遵循:IFEval 从 21% 提升到了 62%。

Qwen3.5-0.8BMATH-500GSM8KIFEval触及 token 上限
基座7.913.821.093.0%
Astra 的编辑48.167.162.333.1%

在很少发生循环的 Gemma 3 270M 上,Astra 无法有意义地提升其数学能力。正如作者所说,编辑权重可以移除一个障碍,让隐藏的能力显露出来,但无法添加模型本身不具备的能力。

Astra 是如何修复循环的

Transformer 使用残差连接:每一层的输出会加到其输入上,而不是替换它。让一个 token 穿过网络,你会得到一个单一的向量,每一层都会向它相加,这被称为残差流(在这个模型中是 1,024 维的)。当模型陷入循环时,残差流会朝一个一致的方向偏移。Astra 的修复方法是编辑两层,使它们所添加的内容指向相反的方向。

找到循环方向

Astra 写了四对短文本,每一对都是一段富有成效的推理和同一推理的循环版本。它把全部八段文本输入模型,并记录每个 token 在某一层的残差流向量。对循环文本取平均得到一个向量,对富有成效的文本取平均得到另一个向量。它们的差,经过归一化后,就是循环方向 uuu:即模型陷入循环时残差流的移动方向。

编辑权重

每个 MLP 都以一个矩阵 WWW 结尾(称为 down_proj)。在每个 token 处,它把 MLP 的 3,584 维隐藏激活 hhh 转换为 1,024 维的输出 WhWhWh,然后将其加到残差流 xxx 上:

所以 MLP 的输出始终是同样这 3,584 个向量的加权和,也就是 WWW 的列 wjw_jwj​。WWW 决定了这些向量是什么;激活 hjh_jhj​ 决定了在每个 token 处每个向量被加入多少。

每一列都有一部分指向 uuu 方向。这个量,u⊤wju^\top w_ju⊤wj​,就是每当 hjh_jhj​ 活跃时,第 jjj 列在多大程度上把模型推向循环。Astra 的编辑减去了它的一个倍数 α\alphaα:

当 α=1\alpha = 1α=1 时,沿 uuu 的分量消失了,所以该列不再把模型推向循环。对第 15 层和第 19 层的每一列都这样做,使 GSM8K 和 MATH 训练题上的准确率从 9% 提升到了 33%。当 α=6\alpha = 6α=6 时,分量被翻转了:一个原本沿 uuu 写入 +a+a+a 的列,现在写入 −5a-5a−5a,并且每当被使用时,就把模型推离循环。

文章标题:线性规划能做权重空间编程吗?

正文: 每个被编辑的列都按同一个向量 uuu 的倍数改变。因此整个编辑就是一个方向 uuu 加上每列一个数值,vj=−α (u⊤wj)v_j = -\alpha\,(u^\top w_j)vj​=−α(u⊤wj​),对于未被改动的列该值为零。这是一个秩-1 的改动:

在每个 token 处,它向残差流中加入 (v⋅ht) u(v \cdot h_t)\,u(v⋅ht​)u:即一定量的 uuu,其大小由被编辑列的活跃程度决定。其他方向不变。

这样就剩下 vvv 待选:编辑哪些列,以及 α\alphaα 取多大。Astra 通过反复试错确定,在一批新的训练问题上逐一测试每次编辑:

对第 15 层和第 19 层的编辑准确率
基础模型~9%
所有列,α = 133%
所有列,α = 243%
所有列,α = 348%
随机方向(对照)12.5%
前 64 列,α = 655%

比 α=1\alpha = 1α=1 更强地推动帮助更大,而随机方向毫无作用。最终编辑仅对每层中在循环文本上写入 uuu 最多的 64 列使用 α=6\alpha = 6α=6。

时间花在哪里

论文公开了 Astra 的完整日志:每次工具调用、每次前向传播、每条它写给自己的笔记。Astra 有一个加载了权重的 Python 内核,以及 50 次前向传播的预算,每次都是在它选择的训练问题或文本上对模型进行批量运行。

编辑在大约 10 小时后被冻结,最后 17 次传播在不做任何改动的情况下重新测试了它。2 在这 10 小时中,找到 uuu 花了 15 分钟。找到 vvv 花了约 8 小时。

选择 v 是一个线性规划

Astra 在寻找一个 vvv,能强力地将循环 token 推离 uuu,同时几乎不影响有效 token。由于在 token ttt 处的推力是 v⋅htv \cdot h_tv⋅ht​,对 vvv 是线性的,这两个要求都是线性不等式。

我从基础模型自身的轨迹中标注 token:循环 token(RRR),位于循环深处;有效 token(PPP),在循环开始之前较远处,3 并记录它们在第 15 层和第 19 层的激活 hth_tht​。每个都成为一个约束,LP 选择 L1 范数 ∑j∣vj∣\sum_j |v_j|∑j​∣vj​∣ 最小的 vvv:

实际上没有 vvv 能满足所有约束,因此每个约束都有一个带惩罚的松弛变量。

最小化 L1 倾向于使 vvv 稀疏。L1 球是一个菱形,当你将它扩大直到触及可行域时,它通常在某个角点处触及,那里大多数坐标恰好为零。因此 LP 既选择了列,也选择了数值。

为了每层恰好得到 8 列,我保留效果最大的 8 列,并将其余固定为零后再次求解。4

这用几次 LP 求解替代了 Astra 8 小时的搜索,包括其列的选择和 α\alphaα 的选择。一个现成的求解器(HiGHS)在这些约束上每次耗时超过 20 分钟,因此我编写了一个 GPU 求解器(PDHG,PDLP 背后的算法),在大约一分钟内达到其最优解的 0.2% 以内。5

结果

我测试了两种 LP 编辑。两者都使用 Astra 的层。一个使用 Astra 的方向 uuu。另一个使用启发式方向:用简单的重复检测器将模型自身轨迹中的 token 标记为循环或有效,然后取它们平均残差流之差。这与 Astra 使用的配方相同,只是去掉了手写文本,因此不涉及 LLM。我在一个单独的 128 问题开发集上调整了 LP 的设置;图表和表中的所有内容都基于从未用于拟合或调优的数据。

改变的权重数GSM8K 测试MATH-500IFEval
基础模型014.17.022.9
Astra 的编辑130,18868.250.961.9
LP,Astra 的方向16,29169.651.759.7
LP,启发式方向16,27165.447.860.4

使用 Astra 的方向,LP 在每个基准上都与 Astra 的编辑相当,在噪声范围内,而改变的权重少了 8 倍。使用启发式方向,它达到了大约 93% 的效果。

还出现了一些其他情况:

  • 搜索才是关键,而 LP 取代了搜索。在 dev 集上,沿用 Astra 的配方(取前 64 列,α=6\alpha = 6α=6)作用于启发式方向、不再重新搜索,得分为 44.5。LP 的得分为 54.7。
  • 列不同,修复相同。LP 的 8 列与 Astra 的 64 列只共享 3 列(第 15 层)和 1 列(第 19 层)。许多稀疏解都有效;真正重要的是沿 u.u.u 方向的总推力。
  • 随机方向毫无作用。在 dev 集上,同样大小的随机 uuu 得分为 10.2,而基座模型为 10.9。

一个 steering vector 也能完成同样的工作

一次编辑只能通过激活值来区分循环 token 和有效 token,而循环在充分展开之前无法从激活值中识别出来。6 因此,在 dev 集上,让 LP 只对类似循环的 token 施加推力,效果并不比对所有 token 施加推力更好。

LP 在第 15 层的 8 列在 89% 的 token 上都是激活的,而且它们带来的推力在 token 之间几乎不变,所以这次编辑接近于沿 uuu 方向的恒定推力。恒定推力不需要权重编辑。它可以直接作为一个 steering vector 加入,即在每个 token 处向残差流加入一个固定向量。

下表将 LP 编辑沿 uuu 方向的平均推力,以三种强度加到未编辑模型的第 15 层和第 19 层上:

Steering 强度(× LP 编辑的平均推力)Dev 集MATH-500
0.5×51.6
1×57.850.8
2×31.2

作为对比,在同样的运行中:LP 编辑在 dev 集上得分为 62.5,在 MATH-500 上为 53.2;Astra 的编辑为 59.4 和 50.0;基座模型为 10.9 和 7.0。这里的 MATH-500 每题只采样一次。

在 1× 时,steering vector 基本恢复了全部修复效果。窗口很窄:在 0.5× 时循环又回来了,在 2× 时循环停止了,但推理崩溃了。

唯一的区别在于交付方式。LP 编辑是一个普通的 checkpoint;steering vector 则需要在推理时加入额外的代码。

局限与下一步

这只是一个模型。LP 仍然依赖 Astra 来确定层,而且最佳结果也使用了 Astra 的方向。启发式方向在没有 LLM 的情况下也能完成大部分工作,但并非全部。

循环最终也被证明可以用恒定推力修复,所以 LP 的逐 token 约束最终并没有那么重要。一个应当改变某些 token、而不影响其他 token 的行为,会是更好的测试。在没有 agent 的情况下选择层,是另一个尚未解决的问题。

最后,这只是针对消除循环进行了测试。许多其他行为,比如拒绝或谄媚,可以通过在残差流中加入或移除单个方向来引导。7 如果一个行为可以用一个方向来引导,那么如何将其构建到权重中应该也是同一个 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 次前向传播失败,且未计入其预算。完整明细在报告中。 ↩︎
  • 如果一个 token 及其之前的共 16 个 token 已经在答案中更早出现过,则该 token 被视为重复。循环从第一个之后至少 80% 的剩余 token 都是重复的位置开始。循环 token 是在循环开始至少 64 个 token 之后的重复 token。有效 token 是在循环开始至少 256 个 token 之前出现的 token,或者出现在已完成的答案中的任意位置。 ↩︎
  • 每一列按 ∣vj∣|v_j|∣vj​∣ 乘以 hjh_jhj​ 的标准差排序,大致表示在典型 token 处它沿 uuu 增加了多少。 ↩︎
  • PDHG(primal-dual hybrid gradient)只需要矩阵-向量乘积,因此所有 token 约束可以一次性放入 GPU,并且它返回一个精确稀疏的 vvv。 ↩︎
  • 对第 15 层激活的线性探针一旦循环已经开始,就能区分循环 token 和有效 token(AUC 0.93),但在循环刚开始时效果差得多(0.73)。 ↩︎
  • 或者你是否能让它听起来像她。 ↩︎

The translation is machine-generated and individual terms may be off. Nothing is rewritten or cut; the original is authoritative.

Published by Hacker News
This site only summarises and aggregates; copyright stays with the original author. Headlines and summaries follow the source — where they differ, the original wins.
Read the original ↗