群发资讯网

MIT团队让GPT-6动手改权重,0.8B数学从7.9%涨到48.1%

11 月 3 日上午刷手机的时候看到一条标题,说麻省理工的人让 GPT-6 直接去改通义千问 0.8B 的权重,数学成绩涨了 6 倍。说真的,这种标题一天能看到七八条,我本来准备划过去了。
之所以又折回去,是因为"直接改权重"这四个字太不合常理。过去这些年,调模型参数只有一条路:拿数据喂进去,让梯度下降一点点挪。人是不敢下手改神经网络里那一堆浮点数的,改一个数都说不清会发生什么。现在有人说,一个大模型把别人的网络权重当文本读一遍,自己动手改几个数,就能把成绩抬上去,而且全程不跑梯度。这话要是真的,那就不只是刷分的事了。
我把作者发出来的那篇博客从头到尾读了一遍,又去他挂的日志仓库里数了数文件,尽量把能对上的数字都对了一遍。



11 月 3 日上午 IT之家 挂出的这篇稿子说,MIT 的人把千问 0.8B 的权重改掉万分之一点六,数学卷面分从 7.9% 抬到 48.1%。我按稿子里的链接找到了作者的原始博客,下面这些数字都是从博客和日志里核出来的。
他把 17253 个数字当文本读完就报了答案博客是 11 月 2 日发的,作者是 MIT CSAIL 的四个人:Rikiya Takehi、Jayden Teoh、Alex Zhang 和 Omar Khattab。Takehi 在博客里把这套玩法叫作"权重空间编程"。
最先让我停下来的是第一个实验。他们用 PPO 训了四个小网络去打四款游戏,四个网络的输入通道、可选动作、层数宽度全都一模一样,差别只在权重里。然后把其中 17253 个参数原样铺成文本丢给 GPT-6 Astra,不给任何工具,也不让它运行网络,问它这个网络是打哪款游戏的。
Astra 报的是 Breakout,并且说自己 99% 确定。
它判断的思路是这样的:Astra 没运行模型,靠矩阵相乘就找出了第一层里一个"往回看一个字符"的注意力头,再顺着它往下找出后面那些跟着它做检索的头,然后据此认出这是把重复名字当线索的代码类模型。作者说,这种找"复制头"的做法其实是 Elhage 等人在 2021 年提出的老办法,而他们从没在提示词里跟 Astra 提过。换句话说,这个模型是自己摸出来的。
车开不上坡这个死结,它是靠改权重解开的第二个实验我觉得比刷数学分有意思。他们训了一个开车的小网络,任务是先倒车攒够助跑距离,再全速冲上坡道。PPO 卡在了一个局部最优解上:车总是直着往坡道冲,冲一半停住,然后油门和滑行来回切,就是不往前走。
Astra 拿到的东西是网络权重、场景描述和一段录制好的过程,要求先解释为什么失败,然后自己写新的权重去修。它一次就交卷,改掉了 171664 个权重里的 6073 个,占 3.5%,之后车在 1024 次试验里全部成功——改之前是零。
它的解释也很像人话:这套权重其实是一个对车速敏感的油门/滑行控制器,车冲坡时丢了动量,而倒车档基本没被采样过。所以它加了一小条旁路,专门读车速和位置,等绿轮过了红线就把这条旁路关掉,交还给原本训练出来的策略。



博客里这段是车卡在坡道上的仿真回放:淡粉那条是原始 PPO 策略,冲上去一步就停住;绿点是 Astra 改完 3.5% 权重后重跑的结果,1024 次试验里全部通过。
还有一组零样本写网络的实验。规则和源码给它,权重全是零,不让跑环境也不让用工具,让它一次性把三个 MinAtar 游戏的策略网络权重写出来。写出来的网络全打赢了训练 1 亿步的 PPO:Breakout 拿到 517.4 分,对照组只有 15.8;就算对上训练 5 亿步的版本,Breakout 也有 20 倍的分差,Asterix 咬得很近,Seaquest 拿到对方的六成。
更离谱的是围棋。243 进、6 层 512 宽、82 出的网络,150 万个权重,塞不进上下文,于是给了它一个 Python 沙箱,能读写权重、能用 numpy 分析,但跑一次前向计算要花掉一次预算。一次都不跑,它写的网络就能赢两个更小的 PPO;跑满 50 次,它直接赢了同规格、训了 2000 万局的 PPO。
0.8B 打转这个毛病,官方模型卡自己先写了到这儿我都还当它是个花样。真正让我信这条线的是第八个实验,也就是中文媒体那两天转的那个。
千问 Qwen3.5-0.8B 在思考模式下有个毛病:反复生成同一段话,停不下来。这件事不是 Astra 发现的,是千问自己的模型卡先写的。



千问官方模型卡里那段提醒,就是这次改动的起点。卡里说 0.8B 比其他 Qwen3.5 更容易进入思考循环,可能导致回答收不了尾,建议用户自己调采样参数,或者用流式输出及时掐断——Astra 要修的,正是官方自己承认的这个毛病。
Astra 拿到的就是这个问题。它先定位,说这个循环来自第 15 层和第 19 层 MLP 写出来的一个方向,然后把这两层里各 64 个输出列减掉这个方向,一共动了 131072 个权重。0.8B 的 8 亿参数里,这个量是 0.016%。
结果写在表里:给 50 次前向计算的预算,MATH-500 从 7.9% 抬到 48.1%,GSM8K 从 13.8% 抬到 67.1%,衡量指令遵循的 IFEval 从 21.0% 抬到 62.3%。最右一列是"答到 32768 token 上限还没收尾"的比例,从 93.0% 掉到 33.1%。



表里最后一行是给模型 50 次前向计算后的结果:数学卷子 MATH-500 从 7.9% 涨到 48.1%,小学算术 GSM8K 从 13.8% 到 67.1%,指令遵循的 IFEval 从 21.0% 到 62.3%。最右一列是答满 3 万 2 千 token 还没收尾的比例,从 93% 掉到 33.1%。
这个改动是在一个像 notebook 一样的 Python 会话里做的,模型能加载权重、能挑训练集里的题去跑前向计算,但全程不许用梯度、不许反向传播,也没有常规训练循环。博客自己写得很克制:这不是完全没有计算,它花了最多 50 次前向计算的预算,只是没用梯度去更新参数。



这张 0.8B 的结果卡把四个指标前后摆在一起:浅条是改之前,绿字的百分比是改之后。MATH-500 是 7.9% 到 48.1%,GSM8K 是 13.8% 到 67.1%,IFEval 是 21.0% 到 62.3%;最下面那行是答满 32768 token 没停的比例,从 93.0% 掉到 33.1%。
作者自己留的反面证据,比成绩单更值钱标题党到这儿就该结束了,但博客最后那个对照实验才是这篇东西真正让我服气的地方。
他们换了个模型,Gemma 3 270M,指令微调过的,只有千问 0.8B 的三分之一大。这个模型几乎不打转,答满 token 上限的比例只有 8.5%,而千问是 93%。同样的玩法,Astra 改不动它。翻它的失败样本,看到的都是普通的算错和代数变形错,没有一个可以"关掉"的单一部件。它的改动依然很小很准,比如把某个响应数字的神经元放大一倍,但没有一项让 MATH-500 挪动超过一分左右,Astra 自己也承认这个提升不成立。
作者的结论写得很清楚:改权重能移开挡住能力的障碍,但不能凭空造出一个模型本来没有的能力。
这事到底该怎么看我自己翻了半天,觉得最该记住的不是 48.1% 那个数字,而是作者把边界一起交出来了。千问那 6 倍分差的主因,是把一个反复打转、答不出结论的毛病摘掉了,让模型能把自己本来就会的题做完;碰上本来就不打转的 Gemma,同一套手法就失效。这两件事放在一篇博客里,比只报一个涨幅可信得多。
还有一处细节值得记一下。第七个实验里,识别哪个模型被微调成了"顺着用户说话"的角色,只给权重时 Astra 连着四次都没认出来;后面松了口,允许它看注意力的落点,它才在三组对照里全部认对。也就是说,权重本身不是万能的入口,至少现在还得配点别的东西。
需要说清楚的是,这套结论目前只有作者自己的一份材料在撑。我搜过 arXiv,用"weight-space programming"没搜到对应论文,作者名下也没有这篇,所以它现在是一篇博客加一份日志,不是同行评议过的论文。能查证的部分倒是齐的:代码和每次调用的原始日志都放在 GitHub 上(RikiyaT/lm_understand-logs,10 月 29 日建库,公开后几天涨到 284 星),1125 轮调用逐轮标注了有没有放开工具;被改过的 0.8B 权重也传到了 Hugging Face,有第三方帮忙重跑并放了个在线演示。
所以我的判断是:这个思路值得盯着,数字先别急着信到小数点后。真要下结论,得等别的团队用同样的条件把 Gemma 那个反面结果也复现一遍——那才是这套方法能不能立住的关键。