"权重空间编程"是平凡的
本文由笔者撰写,Claude Opus 5.5 协助核对事实与润色,经笔者审阅。使用模型:Claude Opus 5.5。
2026 年 11 月 2 日,MIT CSAIL 的 Rikiya Takehi、Jayden Teoh、Alex Zhang 和 Omar Khattab 发表了博客 Sparks of Weight-Space Programming,在社区里反响不小。第二天 arXiv 上就出现了两篇跟进:一篇设想用它改进图像复原扩散模型(2611.04268,作者注明全文只是猜想,没有实验),一篇用它审计放疗临床决策网络(2611.05341)。
博客展示的范式看上去很科幻:不跑梯度下降,不写训练循环,让通用大模型 GPT-6 Astra 直接读写另一个神经网络的权重。作者称之为权重空间编程(Weight-Space Programming,下文简称 WSP)。原文共八个实验,分读、修、从零写三类,传播最广的是开头展示的三个结果:
- 读:只看一个 17,253 参数的策略网络的原始权重,不用工具,就说出它是在哪个游戏上训练的。另一个实验只给一个 7.2M 参数字符级模型中间的四层,它判断出了训练语料是 Python、英文还是罗马字日文,并找出了全部复制头(induction head),没有误报。
- 修:一个用 PPO 训练的小车策略陷入局部最优,256 局一次都没成功。Astra 不用工具,一次回复改了 3.5% 的权重,之后 1,024 局全部成功。
- 改真实 LLM:对 Qwen3.5-0.8B,Astra 只改了 0.016%(131,072 个)的权重,MATH-500 就从 7.9% 升到 48.1%,GSM8K 从 13.8% 升到 67.1%,IFEval 从 21.0% 升到 62.3%。
只看标题和摘要,很容易以为大模型已经能看穿参数矩阵,掌握了某种人类理解不了的能力。原文也确实说,这种能力可能超出我们对人类或常规算法的预期。
但把实验条件和因果链条逐个摊开,会发现 WSP 很平凡(指机制上没有新东西,用的都是已有的可解释性方法和工程手段,只是交给 LLM 自动执行。这不妨碍它在工程上有用)。
已有知识的迁移
这些实验可以归结为同一件事:在受控条件下,被分析网络的权重 或运行时激活 里的结构,对 Astra 来说本来就有迹可循;它能定位问题、做消融或调参,靠的是训练时学到的机械可解释性、控制和线性代数知识。
原文反复强调 Astra 是没有为此专门训练过的通用模型,但这算不上卖点。机械可解释性的论文和代码本来就在训练语料里,用不着谁专门去训。
所以这里发生的不是新直觉的涌现,而是已有知识的迁移,加上自动化的工程执行。按网络大小和实验条件,可以分两种情况来看。
一、较大的网络:脚本与前向运行
在找复制头和修 Qwen3.5-0.8B 这两个实验里,Astra 并没有把几百万个浮点数塞进上下文硬读。
找复制头时,实验给了 Astra 一个 Python 环境分析权重张量(最多运行 100 次),只是不许在任何输入上运行网络或其中某一层。它先找到第一层里一个“往前看一个字符”的头,再通过矩阵相乘,找出后面利用这个头带来的信息去检索的头。原作者也指出,这正是 Anthropic 的 Elhage 等人提出的方法,而他们从没在提示里提过。一个读过大量机械可解释性论文和代码的模型,知道复制头的电路长什么样,写几行脚本把它算出来,是在复现已有的方法。
修 Qwen3.5-0.8B 时给的条件更多。Astra 可以在 Python 里直接操作权重,还可以用一定预算的“前向”让模型做练习题或读入文本,预算分 10、25、50 三档。这里的一次前向是一整批:最多让模型答 512 道题,或读入 1,024 段文本。48.1% 是 50 次预算下的成绩;预算为 10 或 25 时,撞上 token 上限的回答比例只从 93% 降到 87% 和 86%,循环几乎没减少。
Astra 把“思考死循环”追溯到第 15 层和第 19 层 MLP 写出的同一个方向,然后在这两层各取 64 列输出权重,把这个方向减掉。原文没有给出公式,按标准的方向消融来写:设 是单位化的循环方向, 是被选中的一列(一个神经元写入残差流的向量),则
即去掉这些列在 上的分量。
这和开源社区熟悉的 abliteration(从权重里删掉一个方向)是同一类操作,区别只在于这次只动了 128 列而不是整个矩阵,并且“对比激活、找出方向”这一步交给了 LLM。原文自己也说,这一步很像通过删除单个方向来去掉模型的某种行为。
模型本来就会做题,只是被循环卡住答不完;切掉循环方向,能力就放出来了。原文的补充实验也印证了这一点:换成很少陷入循环的 Gemma 3 270M,Astra 怎么改都没能让 MATH-500 提高一个点以上。作者的结论是,改权重能去掉遮住能力的障碍,但加不出模型本来没有的能力。
二、小网络:靠输入输出语义
那么,在不给工具、只看权重的小网络实验里(17K 参数的游戏识别、17 万参数的小车修复),又发生了什么?
隐藏层的神经元可以任意重排而不改变网络功能,一个没有任何上下文的浮点数矩阵本身很难解读。这些实验能做成,前提是 Astra 拿到了足够的语义:输入输出每一维的含义,再视实验而定,加上场景描述、失败的运行记录,或者游戏规则和源码。
当输入的某一维明确是小车速度、输出的某一维明确是某个电机动作时,第一层和最后一层的参数就不再是黑盒,而是一组带变量名的线性系数。游戏识别靠的就是这个:比如在 Breakout 网络里,代表玩家的输入通道,其第一层权重集中在最底下一行,那正是挡板的位置。
小车修复也类似。Astra 并没有逐个去找“出错”的权重,而是在每层借用少量单元,另开一条小通路:读取小车的位置和速度,先倒车,等绿色轮子越过红色区域就关闭,剩下的交给原网络。改动的 3.5% 权重基本就是这条通路,相当于程序员不碰原有代码,只加了一个 if 分支,只不过是用神经网络的形式写的。
从零写网络的实验也是同一回事。三个 MinAtar 游戏里,Astra 拿到了规则、源码和输入输出布局;在 Breakout 中,它让第一层计算球的落点,第二层把挡板移过去,是先构思程序,再“编译”成权重。原文拿它和 PPO 比(517.4 分对训练 5 亿步的 PPO 的 25.3 分),但这个对比说明不了什么:Breakout 本来就有现成的规则解,算落点、移挡板,谁手写一个规则策略都能拿高分,赢一个小网络上的 PPO 基线不值一提。9×9 围棋那个 150 万参数的网络,也是它在 Python 沙盒里用 336 行代码逐层写出来的。
反过来,一旦拿走语义锚点,Astra 就不灵了。有一个实验让它判断两个 Gemma 3 270M 微调副本里哪个会谄媚用户,为了排除从输入输出上找差异的捷径,作者冻结了输入嵌入和输出层。只看权重,Astra 四次都没答出来;允许它看自己构造的文本上的注意力模式之后,三组都判断对了。
常规手段也能做到
说它平凡,最直接的证据是常规手段也能做到同样的事。
读权重这件事,并不需要前沿模型。原文发布第二天,Simon Willison 把游戏识别实验的原始提示词原样喂给笔记本上本地运行的 Qwen 3.8 27B,每题跑四五十分钟到一个多小时,认出了 Pac-Man、Pong 和 Breakout,只在 Freeway 上猜错。他的评价是:一个有经验的人拿着纸笔,花足够的功夫,也能得出同样的结论。
放疗审计那篇跟进论文做得比较扎实:它让 Claude Opus 5.5 在不用工具的情况下,审计 433 到 4,801 个参数的小型临床筛查网络。模型在 18 个植入了缺陷的网络里找出了 16 个,修复时中位数只改 3 个参数。但作者同时发现,这些缺陷在单个神经元上就能看出来;针对每类缺陷挑一个简单统计量,能找到同样的问题;而对其中的混杂和阈值偏移,黑盒测试找得更快。论文的结论也很克制:在小网络里,它能找到并修复让某个输入失效或让阈值偏移的缺陷,但还不能证明一个网络是正确的。
Qwen 那个实验同理。只要知道问题出在死循环,从激活里找出循环方向再把它消掉,本来就是表征工程的常规流程,原文自己也是这么类比的。
结语
把这篇博客还原到实验条件上,能看清两点:
- Astra 能读懂权重和激活,是有边界条件的:要么网络很小,并且输入输出的语义是明示的;要么允许它用 Python 分析权重,像修 Qwen 这样的任务还得加上成批的前向运行。
- 它读写和修改权重的能力,很可能来自训练时见过的知识,比如复制头的电路结构、方向消融、控制算法,所以识别出问题之后知道该怎么改。不过 GPT-6 Astra 的训练数据没有公开,这一点只能推断。
把研究员手工做的机械可解释性分析和表征工程(representation engineering)封装成由前沿 LLM 驱动的自动化闭环,在工程上确实有用,这也是为什么第二天就有人把它套到临床模型审计和图像复原上。但从机制上看,这不是什么神秘的“权重空间原生编程”,而是大模型借助已有知识,对神经网络做了一次自动化的静态分析,再打了个补丁。
评论