MIT CSAIL 团队最近让 GPT-6 Astra 做了一件挺大胆的事:直接打开千问 Qwen3.5-0.8B 的权重,找问题,再动手改。
不用梯度下降,也不允许写训练循环。最后,Astra 改了约 0.016% 的权重,把这个小模型在 MATH-500 上的成绩从 7.9% 拉到 48.1%,变成原来的 6.1 倍。指令遵循测试 IFEval 也从 21.0% 涨到了 62.3%。
这项由 Rikiya Takehi、Jayden Teoh、Alex Zhang 和 Omar Khattab 在 11 月 2 日公开的研究,叫 Weight-Space Programming,权重空间编程。读出一个神经网络在做什么,修掉它的毛病,甚至从零写出另一个神经网络,都是这次的实验内容。
研究中的三项任务 读取权重 修复策略 改善千问
Takehi 在推文下做了更多的介绍,连同实验日志和改好的模型一起公开:
先让千问把题做完
Astra 接到的任务很简单:让 Qwen3.5-0.8B 更擅长数学。
研究者给它一个装载了模型权重的 Python 环境,以及 GSM8K 和 MATH 训练集里的练习题。它可以检查权重、分析运行结果、修改参数,再花掉一定数量的前向调用来验证。最终评测集不向它开放。
50 次前向调用是最高一档预算,一次可以批量处理题目,并不是只准试 50 道题。优化器和反向传播被拿掉了,观察与测试还在。
很快,Astra 碰到了这个小模型的老毛病:想得停不下来。
最初检查的 96 份练习题回答里,有 85 份一路写到了 32,768 token 的上限。重复同一段推理,绕回已经走过的步骤,最后留不出答案。Qwen 自己的模型卡也提醒过,0.8B 版本更容易陷入这种思考循环。
Astra 顺着运行表现和内部计算查下去,最终定位到编号 15 和 19 的两层 MLP。它从两层各选出 64 个输出列,减掉一个与循环行为相关的方向,一共涉及 131,072 个权重。
改完,再用相同的采样设置评测:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
评测开启思考,最多输出 32,768 token。表内均为百分比,最后一项是 MATH-500 回答触及长度上限的比例,越低越好。
许多原本卡在半路的回答,终于能够交卷了。指令遵循也跟着变好,说明这个循环问题影响的不只是数学题。
研究者还换了一个不太容易循环的 Gemma 3 270M。Astra 看到了算术错误、错误的代数步骤,却没找到一个删掉就能解决问题的共同部件。50 次调用预算下,MATH-500 只从 6.8% 变成 7.0%,没有明确改善。
这组对照很有意思:找到并修掉一个计算故障,和给模型补上它还不会的数学,是两件难度不同的事。
权重里可以读出什么
这次研究一共做了八组实验。更早的几组,先考 Astra 能不能看懂权重。
研究者训练了四个小游戏网络,分别玩打砖块、乒乓球、吃豆人和过马路。四个网络的结构、输入和动作设置完全相同,再把 17,253 个权重直接作为数字交给 Astra,问它各自在玩什么游戏。
没有给候选答案,也不让用工具,它四个都认了出来。
例如,打砖块网络对底部一排位置有特殊反应,对应球拍所在的位置;输出层又区分了不同移动动作。Astra 从这些数值分布里推断出了游戏。
另一个实验更直观。一辆由 PPO 策略控制的小车,被斜坡卡住了:只知道向前顶,始终冲不过去。
研究者把场景、权重和一次失败轨迹交给 Astra。它给出的修法是先倒车,拉开助跑距离,再全速向前。具体做法是在网络里加出一条小的计算路径,读取位置和速度;等车越过障碍,这条路径就关闭,由原策略继续开。
这次只改了 3.5% 的权重。原策略在 256 局测试中没有成功,修改后的策略在 1,024 局中全部成功。
那条“先倒一点,再往前冲”的策略,被直接写进了神经网络。
连小游戏模型都能直接写
修已有模型还不够,团队又让 Astra 从零写权重。
给定三个 MinAtar 小游戏的规则、源码和网络结构,所有权重从零开始。Astra 要在一次回复里给出权重,期间不能运行游戏、试错或训练。
以打砖块为例,它先构思球拍应该怎么动,再把策略翻译进网络:第一层算球会落到哪里,第二层把球拍移过去。
作者用相同结构的 PPO 网络做了比较,每个结果评测 1,000 局:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Astra 写出的网络超过了三项游戏里训练 1 亿步的 PPO 对照。把 PPO 预算加到 5 亿步后,打砖块仍明显领先,另外两项则是 PPO 更高。
这里的吸引力也不只在跑分。过去让 AI 做这件事,常见路线是写训练代码、调超参数、启动训练。现在,它开始把一个具体玩法直接编进权重。
模型开始成为可编辑的对象
读权重也有读不懂的时候。
团队给了 Astra 两个经过不同微调的 Gemma 小模型,一个正常回答,一个迎合用户。只看权重,Astra 四次尝试都没能判断哪个更爱迎合;允许查看它们在给定文本上的注意力分布后,才分辨出来。
权重、激活、运行轨迹和测试反馈,仍然要一起用。千问实验也是如此:Astra 可以检查和测试模型,再决定怎样改。
但操作对象确实变了。它不再只修改模型外围的提示词和 harness,而是开始碰到模型内部的计算。
这也是研究者把 RSI 列为后续方向的原因:如果模型能够检查、调试和改进权重,自我改进就有了更直接的操作空间。
参考链接
-
MIT CSAIL 研究原文:https://rikiyat.github.io/blog/weight-space-programming/ -
研究者相关推文:https://x.com/rikiyatakehi/status/2117313742891327994 -
完整实验日志与修改代码:https://github.com/RikiyaT/lm_understand-logs -
修改后的模型与复跑结果:https://huggingface.co/RikiyaT/Qwen3.5-0.8B-weight-space-programming -
在线演示:https://huggingface.co/spaces/akhaliq/weight-space-programming-demo

