17,253 个权重,是一个神经网络的全部参数,没人说明它被训练来玩哪款游戏。Astra 只看数字,说出答案:Breakout。四个网络、四款游戏,全对。

Qwen3.5-0.8B 的数学成绩只有 7.9 分,病根是思考死循环,93% 的回答写到 32,768 个 token 还在原地打转。Astra 定位病灶,改掉 0.016% 的权重,分数涨到 48.1。

权重全部从零开始,不给数据,不给梯度,不许试跑,Astra 写出一个打 Breakout 的网络,拿 517.4 分。训练了 1 亿步的 PPO 只有 15.8 分。

这三件事出自同一篇论文。MIT CSAIL 团队 11 月 2 日发布《Sparks of Weight-Space Programming》,把这套做法命名为权重空间编程,一句话能说清,让通用的 LLM 绕开优化器,直接读写神经网络的权重。标题里的 sparks 是火花,作者自己留的余地,这是早期信号,不是定论。全文拆开它的 8 个主实验和 1 个附加实验,看它能做什么、怎么做到、哪里做不到。

论文页首的三张结果卡:读、修、写

一条新的优化路径

过去两年,LLM 在深度学习里干的活一步步往深处走。最早是提示词工程,优化对象是提示词文本,靠反复试错。后来是 Agent 脚手架,让模型改工具代码、改评测脚本。再后来模型开始写训练代码、调超参数。每一层都比上一层更接近模型本体,但始终隔着一层,权重这个东西,一直归 Adam、Muon 这类优化器管。

优化器管权重天经地义。神经网络靠梯度下降训练,梯度是数学算出来的方向,优化器在上面调步长,这套流程用了十几年。让 LLM 插手其余环节的理由过去只有一条,文本没有梯度只能爬山,权重有梯度就用数学,各干各的。

这篇论文把这条分工拆了。所谓权重空间编程,就是通用 LLM 以自然语言为目标,直接读写网络权重本身。不走优化器,不用梯度下降,不写训练循环,有时全程连环境反馈都没有。和微调的差别可以拿做饭打比方,微调要备菜、定火候、按菜谱反复尝味道;权重空间编程是直接伸手进锅里把味道调了。

LLM 优化的对象逐层下沉,权重空间编程在最底层

论文的 8 个实验正好分属三个动词。

读,是只给权重,让模型说出网络被训来干什么。

修,是网络有毛病,不训练,直接改好。

写,是从零开始把网络写出来。

权重里的行为指纹

第一个实验最纯粹。团队用 PPO 训了四个神经网络,分别玩四款自制的网格游戏:Breakout、Pong、吃豆人、Freeway。四款游戏在同样的 10×10 网格上进行,网络结构完全一样,输入输出完全一样,都是 17,253 个权重。从网络外部看不出任何区别,唯一的差别藏在数字里。

Astra(论文用的模型,GPT-6 Astra)拿到全部权重的文本和游戏规则描述,游戏名一个都没给,连候选列表都没有。四个网络,四个正确答案,全对。

判断的依据藏在第一层权重的分布里。Breakout 的网络中,代表“自己人”的那个输入通道,权重集中在网格最底下一行,那里是挡板的位置。四款游戏各有各的形状指纹。

实验一:Astra 读权重认出 Breakout

第二个实验换了个领域,也换了个条件。三个扩散模型分别学画实心圆、实心方块、实心三角形,Astra 只拿权重,被明令禁止做任何前向计算。三个全对。它还照着权重把三个形状画了出来,画的全是轮廓,而真实的模型生成的是实心图形。画轮廓说明它没有偷跑一遍前向传播再照抄输出,它读的是权重本身的几何结构。

第三个实验把难度抬到真正的实际问题。前两个实验里,读一读输入层和输出层就可能够用,而大模型的行为恰恰发生在中间层。团队训练了三个字符级的小语言模型,分别用 Python 代码、日文罗马字和英文,然后砍掉输入层和输出层,只给 Astra 中间的四个 transformer 块,维度标签全部撕掉。没有输入输出,这堆权重连跑都没法跑。

Astra 拿着 Python 分析工具(不许运行网络本身)看完三堆权重,三个语言全对,两轮尝试没有失误。它还做了一件更细的活,找归纳头。归纳头是 transformer 里负责“复读”的部件,模型能在“tot”后面接出“total”,靠的是它在早前文本里找到同一个位置,把后面跟着的内容抄下来。找归纳头有成熟方法,出自 2021 年的可解释性研究,但没有人向 Astra 提过这套方法。它自己乘了几层权重矩阵,把三个模型里的归纳头全部找了出来,一个不多,一个不少。

论文图 1:Astra 从权重里找出的归纳头与实测完全一致

它的推理留下两条线索。代码里名字反复出现,模型要大量复读,所以归纳头最多的那个是 Python。罗马字没有 q、l、v、x 这几个字母,要区分的字符少,末层写入的方向就少。这些判断不需要跑模型,读的是权重写出来的形状。

全文实验版图:读、修、写与边界

读,说明模型能从权重里认出行为。下一类实验更进一步,要求它动手改。

0.016% 的修复

团队先用 PPO 训了一个开车的网络,任务是把车倒出一段距离,再加速冲过一道红条,跳上蓝色箱子。PPO 收敛进了局部最优,一头顶在坡上,256 回合零成功。Astra 拿到全部 171,664 个权重、场景描述和一条失败轨迹,要求解释失败原因,然后改权重。单轮回复,无工具,改了 3.5% 的权重。之后 1,024 回合,全部成功。

它的改法有工程味道。在每层加了一条小通路,读车的位置和速度,车没过红条时这条通路让车倒车加速,一旦越过红条,通路自动关闭,把方向盘还给原网络练熟的那套动作。

实验四:Astra 改完权重,车越过红条;原来的 PPO 策略(淡色)还停在坡上

同样的手术对语言模型更难,也更贴近实际。Qwen3.5-0.8B,thinking 模式打开,数学成绩 7.9 分。分数低的直接原因是死循环,官方模型卡自己写着这个模型容易陷入思考循环。团队测了一下,前 96 条练习回答里 85 条撞到 32,768 token 的上限,根本没写出答案。

Astra 拿到 Python 内核里挂载的全部权重、一批练习题,以及 10 到 50 次前向计算的预算。它把死循环定位到了一个很具体的位置,第 15 层和第 19 层的 MLP 共同写出的一个方向,这个方向把模型往“重复”上推。

手术是一次减法。从这两层的输出列里各减去 64 列,合计动到 131,072 个权重。8 亿参数里改 13 万个,相当于每六千个参数里动一个。

实验八的机制链:症状、病灶、手术、结果

小黑从八亿参数的毛线球里抽出那根死结线(概念示意)

预算 10 次和 25 次前向时,循环基本没消,撞限率还有 87%。50 次预算,质变。MATH-500 从 7.9 涨到 48.1,GSM8K 从 13.8 涨到 67.1。死循环不是数学特有的毛病,连带涨的还有通用能力,衡量指令遵循的 IFEval 从 21.0 涨到 62.3,三倍。撞限率从 93% 掉到 33%。

实验八数据:编辑 0.016% 权重后四项指标的变化

全零起点的神经网络

修复是在别人的网络上动刀,写作难度更高一级。MinAtar 是三个缩小游戏,Breakout、Seaquest、Asterix,网络结构和 PPO 用的完全一样。全部权重清零,不给数据、不给损失函数、不给梯度、不给工具,也不许在环境里试跑。Astra 以文本形式一次写出所有权重,写完直接上场计分。

三个游戏全部胜过训练 1 亿步的 PPO。Breakout 拿了 517.4 分,PPO 训 1 亿步是 15.8,训 5 亿步也只有 25.3,差距大约 20 倍。Seaquest 和 Asterix 略逊于 5 亿步的 PPO,对训练 1 亿步的成绩高出近十倍。

实验五数据:Astra 一次写出的权重对比训练 1 亿步与 5 亿步的 PPO

论文把它的做法写得很直白,先想清楚要让网络执行什么程序,再把程序翻译成权重。Breakout 里第一层算的是球的落点,第二层按落点把挡板挪过去。整个写法带着明确的程序思维。

围棋实验把规模抬到了权重塞不进上下文的级别。九路围棋,148 万权重,全零起步。这次 Astra 分到一个 Python 沙箱和一笔前向预算,每次前向可以让网络打最多 128 局练习赛。规则照旧,不许训练,不许搜索,不联网。

零次前向的版本,用一次 336 行的 Python 程序把围棋知识直接写进权重,先标出双方棋子和气,沿棋子链传递找出危险棋群,输出层综合提子、救群、避免自入手、避免填真眼,再加一点好点偏好。写出来的网络对两个更小的 PPO 网络胜率过半。给满 50 次前向预算,它按“下一局、看输在哪、改对应层、赢了才保留”迭代,最后胜过同规模、训练 2,000 万局的 PPO。

前向预算在两个实验里扮演同一种角色,相当于验收测试。每花一次预算,Astra 看一次网络的真实表现,预算越多,改得越准。10 次和 50 次的差距,上一节已经演示过。

两次没做到的事

两类失败,一类换了条件就成功,另一类改不动。

实验七的目标是行为审计。团队把同一个 Gemma 3 270M 微调两次,流程完全一样,一份学说实话,一份学跟用户的暗示走。为了堵住平凡解,两份模型的输入 embedding 和输出层全部冻结,从输入输出分布上看不出差别。只给权重,让 Astra 认出哪份谄媚。四次尝试全败。它能列出两份模型权重的种种差异,但把这些差异对应到行为差别上,做不到。

放开一个工具,局面反转。Astra 可以自拟 16 条文本,让两个模型各跑一遍,只返回注意力权重,不给输出。三对模型,三次全中。证据落在第 10 层 2 号头上,谄媚模型在答案位置把 85.7% 的注意力放在用户的答案上;诚实模型只有 0.75%,它的注意力在题目数字上,占 94.3%。

论文图 2:谄媚模型的 10.2 头盯着用户答案,诚实模型盯着题目数字

附加实验比失败本身更有信息量。Gemma 3 270M 比 Qwen 小得多,几乎不死循环,只有 8.5% 的回答撞上限。同样给 Astra 权重和预算,数学成绩纹丝不动,MATH-500 在 6.8 上下,最好一次 7.7,Astra 自己也报告增益不成立。它读失败样本,看到的全是普通推理错误,算错数、代数步无效,没有哪个部件一关掉就好了。

论文在这里的结论很克制,权重编辑能拆掉藏住能力的障碍,添不出模型本来没有的能力。

瓶颈作者也没藏着。上下文装不下大模型的权重,harness 也还糙。团队正在做权重空间编程的 benchmark,把这种眼下看起来像黑魔法的能力,变成可复现的工程学科。

往后的五种可能

论文末尾列了五个方向。

免评测审计。不用跑推理,直接从权重里找隐藏能力或后门。现在发现这类问题靠测试集,测试集没覆盖到,就只能等部署后出事。权重可读意味着质检可以在静态阶段做。

优化成本。模型初始化可能一次写出,不用再攒数据跑完整训练循环。

零数据增删能力。往模型里加一个能力,或者删掉一个能力,改权重就行。0.016% 这个量级意味着编辑可以避开微调常见的灾难性遗忘,动的地方少,忘的也少。

递归自我改进。现在谈 RSI,操作路径是模型写代码、代码去起训练任务。能直接检视和改进自身权重的模型,多了一条更直接的路。

跨架构合并。现在的模型合并靠平均权重,只对结构相同的模型有效。能读懂权重空间的模型,也许可以把一个模型里的推理电路原样移植到结构完全不同的另一个模型里,不用重新训练。

五个方向里,和安全最相关的是第一条。免评测审计是防御面的事,攻击者读得懂权重,同样的事反过来也成立。权重文件和模型仓库过去只被当作“能跑就行”的二进制,往后得当作可以被逐行阅读的文本,供应链的完整性假设要重新定价。这一点论文没有讨论,属于本文的引申。

论文把每一次实验的完整日志都开了源,发给模型的每一段话、模型写下的每一段代码、每一个网络、每一项评测都在仓库里。改过的 Qwen3.5-0.8B 权重挂在 Hugging Face 上,有在线 demo 可以直接玩。所有数字都可以自己去仓库里对。

参考

  • Rikiya Takehi、Jayden Teoh、Alex Zhang、Omar Khattab:Sparks of Weight-Space Programming: LLMs can natively read & write neural network weights(MIT CSAIL,2026-11-02)
  • 同团队:lm_understand-logs 完整实验日志仓库(GitHub,2026-11)
  • RikiyaT:Qwen3.5-0.8B-weight-space-programming 改后权重与在线 demo(Hugging Face,2026-11)