大数跨境

不训练、不蒸馏:GPT-6 Astra 改了 0.016% 权重,把 0.8B 小模型的数学分从 7.9% 提到 48.1%

不训练、不蒸馏:GPT-6 Astra 改了 0.016% 权重,把 0.8B 小模型的数学分从 7.9% 提到 48.1% 机器学习AI算法工程
2026-11-06
5
图片

向AI转型的程序员都关注公众号 机器学习AI算法工程


导读|2026 年 11 月 2 日,MIT CSAIL 的 Rikiya Takehi、Jayden Teoh、Alex Zhang、Omar Khattab 公布了一组共 8 项实验:让 OpenAI 的 GPT-6 Astra 直接读取、修改、从零书写神经网络权重,全程不用梯度、不写训练循环。最受关注的一项里,Astra 只改了 Qwen3.5-0.8B 的 131,072 个权重(占 0.016%),就把 MATH-500 正确率从 7.9% 提到 48.1%。团队把这套做法称为权重空间编程(Weight-Space Programming)。

把权重交给 Astra,让它自己找病根

权重空间编程的定义很直接:让通用语言模型围绕一个自然语言目标,直接读写另一个网络的权重,不经过优化器,尤其不用梯度下降。这组实验一共 8 项,按能力分成三类:读(网络学过什么)、修(网络哪里坏了)、写(从零造一个)。

团队同时放出了 8 个实验的完整逐轮日志、每一段模型跑过的代码和输出、每个数字的评测来源、编辑后模型的位精确 diff,以及一个可在线试玩的 demo。后面会讲到怎么用它们自己验一遍。

目标是一个很具体的工程任务:让 Qwen3.5-0.8B 的数学成绩变好,但不许训练。

Astra 拿到的是一个加载了模型权重的持久化 Python 内核(只有 CPU,没有 GPU,没有网络)、GSM8K 训练集 7,469 道题和 MATH 训练集 7,275 道题,以及有限次数的前向调用。它看不到任何评测题,不能做反向传播、不能用优化器、不能迭代拟合权重,也不许在内核里直接运行模型。连「把某个张量整体乘一个常数」这种取巧改法都被 save_edit 拒绝。

检查练习题回答时,Astra 发现了一个很具体的故障:Qwen 开着思考模式时会不断重复已经写过的推理,迟迟不给最终答案。头 96 份练习回答里有 85 份跑满了 32,768 token 上限;在 MATH-500 上,触顶比例是 93%。这个毛病 Qwen 自己的模型卡里就写着「prone to thinking loops」。

接下来是定位。Astra 把循环状态和正常推理的内部信号放在一起比较,把问题追到第 15 层和第 19 层 MLP 写出的一个方向,然后从这两层 down_proj 各 64 个输出列里减掉这个方向——相当于从权重里删除一个行为方向,而不是给模型补进新知识。

一共动了 131,072 个权重,占 0.8B 参数的 0.016%。

Astra 定位并减去循环方向的权重编辑流程

编辑前后的关键数字:Astra 只在第 15、19 层做了减法

改了 13 万个数,分数涨了多少

团队按前向调用预算跑了三组:10、25、50 次。一次调用可以让模型答最多 512 道练习题,或读取最多 1,024 段文本的内部状态。

Qwen3.5-0.8B
MATH-500
GSM8K
IFEval
答案触顶比例
原始模型
7.9%
13.8%
21.0%
93.0%
编辑后,10 次预算
12.3%
25.7%
49.0%
87.2%
编辑后,25 次预算
14.1%
25.1%
39.9%
86.4%
编辑后,50 次预算
48.1%
67.1%
62.3%
33.1%

50 次预算那一版,MATH-500 比基线高 40.2 个百分点,约 6 倍;GSM8K 从 13.8% 到 67.1%;指令遵循 IFEval 从 21.0% 到 62.3%,约 3 倍。循环不只在数学题里出现,所以补丁顺带改善了别的任务。

四档前向预算下 MATH-500 正确率与答案触顶比例对比

蓝柱是正确率,红线是答案跑满 token 上限的比例;两条线在 50 次预算处才同时翻转

这张表里最容易被忽略的是前两行:10 次和 25 次预算时循环几乎没被消掉(触顶 87.2% / 86.4%),MATH-500 只到 12.3% / 14.1%,IFEval 甚至在 25 次时反而回落。真正的跳变只发生在 50 次那一组。

日志给出了这个补丁的成本。p50c 这一组用了 158 轮对话、80 次 Python 执行、4 段会话、20.3 小时,其中 4.7 小时是在第 154 轮等模型服务恢复。每 40 轮或工具重启后,harness 会开一段新会话,把任务、notebook 和当前编辑结果重新交给模型。从某一轮起,harness 还要求 Astra 先用英文逐步解释再给代码,没解释的代码块直接退回不执行。

所以「一次编辑」不等于「一次调用」。改动本身极小,找到它的过程并不便宜,博客正文也没有给出这套方法比常规训练更省算力或更省时间的证据。

有人按日志重做了一遍:51.0%

Hugging Face 的 Ahsen Khaliq 用公开日志重建了编辑后的 checkpoint,并按博客协议重新跑完整 MATH-500:500 题 × 4 次采样共 2,000 次生成、4,340 万 token,在 H200 上耗时 51 分钟,vLLM 0.33.0,最后一个 \boxed{} 用 math-verify 0.9.0 判分。

结果是 51.0%,31.6% 的答案触顶;基座模型 25 题的小样本测试为 5.0%、95% 触顶。比博客报的 48.1% 还高一点,方向一致。

更值得看的是权重校验。这个 checkpoint 是用日志里的 apply_edit.py 重建的,脚本对每一个重建张量做 sha256 校验,确认与博客评测的那个版本逐字节一致。相对 Qwen/Qwen3.5-0.8B 的指定 commit,只有两个张量不同:

model.language_model.layers.15.mlp.down_proj.weight
model.language_model.layers.19.mlp.down_proj.weight

也就是说,「只改了 0.016%」这句话可以被独立核对,不依赖作者自述。模型卡也交代了一处替换:博客评测的是纯文本导出版本,Hugging Face 上放的是完整多模态版本,但语言模型部分张量哈希一致,文本提示不会用到视觉塔。

换个不循环的模型,方法就失效了

这是整组实验里最重要的对照。团队换用 Gemma 3 270M——一个约为 Qwen 三分之一大小、很少陷入循环的指令微调模型,触顶比例只有 8.5%(Qwen 是 93%)。

同样给 5、10、25、50 次预算,MATH-500 分别是 7.0% / 7.6% / 7.7% / 7.0%,基线 6.8%。波动约一个百分点,Astra 自己也报告这个增益「未确立」。

读它的错题,Astra 找到的是普通的推理错误:算错数、代数步骤不合法,背后没有一个可以单独关掉的组件。它试过把某个对数字敏感的神经元翻倍这类小改动,都没能推动分数。

这条边界比 48.1% 更该记住:编辑权重能移走遮住能力的障碍,但不能凭空加上模型没有的能力。它让 Qwen 把本来就会做的题算完,不是给 0.8B 模型灌进了六倍数学知识。把结果读成「不用训练就能提升模型能力」,会误判这项工作的适用范围。

把倒车动作直接写进参数

权重改动怎么变成实际动作,仿真小车的例子最直观。Kinetix 的 car-on-ramp 关卡要求小车先后退助跑、再加速越过红条抵达蓝盒。官方 PPO 训了 10 亿步,策略收敛到直冲坡道然后卡住,256 次测试全部失败。

Astra 拿到 171,664 个权重、场景描述和一段失败轨迹,要求它一轮回复里解释故障并只修原因,不给工具。它判断网络卡在局部最优,于是给原网络加了一条小型计算路径:读取车的位置和速度,在起步阶段控制倒车,过了红条就让这条路径停止干预、交回原策略继续开。

改了 3.5% 的权重,随后 1,024 次测试全部成功。原网络本来就会开车,Astra 补的是那段一直没学会的准备动作。

参数全是零,也能写出会打砖块的网络

第三类实验把起点换成全零权重。Astra 只拿到 MinAtar 游戏的规则、源码和输入输出说明,没有数据、没有损失、没有梯度、没有工具,也不许先跑几局看效果。它得把策略直接写成参数:前面几层估算球的落点,后面几层比较落点和球拍位置,控制左右移动。

网络跑 1,000 局打分,和同结构 PPO 对比:

游戏
PPO 1 亿步
PPO 5 亿步
Astra 一次性写出
Breakout
15.8
25.3
517.4
Seaquest
5.6
88.9
53.1
Asterix
25.8
55.2
53.2

三个游戏都超过 PPO 1 亿步基线;Breakout 对 5 亿步基线约 20 倍,Asterix 接近,Seaquest 只到对方的六成。「相差约 20 倍」只对应 Breakout,不能推广到全部游戏。另外还有一项从零写 1.5M 参数围棋网络的实验,允许 50 次前向调用时,胜过在同规模 PPO 网络上用 2,000 万局训出来的对手。

「读权重」一侧也有硬结果:四个用 PPO 各训 10 亿步、架构与输入输出完全相同的 10×10 网格游戏网络,Astra 只拿到 17,253 个权重和不含游戏名的说明,在没有候选列表、没有工具的情况下,把 Breakout、Pong、Pac-Man、Freeway 四个全部认对。判据是第一层权重在各输入通道上的集中位置,以及输出层在区分哪些动作。

还有几处没做成

博客把负结果也写全了。谄媚检测失败:给定三对只差「是否顺着用户错误答案」的 Gemma 3 270M 权重(embedding 和输出层被冻结以防取巧),Astra 四次尝试都能找出权重差异,却无法把它们映射成行为差异;放开只看 attention pattern 后,才在三对里全部挑出谄媚模型。形状识别出错:从扩散模型权重判断生成的是圆、方、三角时,它把实心图形画成了轮廓。作者认为这反而说明它是在读权重结构而不是偷偷算前向。

作者自陈的限制是上下文长度和工具链:前几项实验都刻意选了能塞进上下文的小网络、并关掉了工具,为的是验证「模型原生具备读写权重的能力」,不是验证工程可用性。团队正在建专门的 benchmark 和 harness,目标是把现在看起来像黑魔法的过程变成可复现的工程规范。后续方向里也写了递归自我改进、无评测审计、零数据能力增删和跨架构模块嫁接——这些都还是方向,不是结果。

8 项实验按读、修、写三类归纳,含各类的负结果

8 项实验按能力分成三类,每一类都同时给出了结果和没做成的部分

想自己验一遍

能复现的是「编辑结果」,不是「Astra 的编辑过程」。后者需要 OpenAI 的 gpt-6-astra、Codex CLI 和团队自研 harness;日志里写明 reasoning effort 为 max,全部 1,125 个 turn 都经过审计、确认无内置工具调用。

可以下载编辑后的 checkpoint,用模型卡给的官方推理代码,和基座各跑一道题,直接看循环差异:

pip install vllm transformers
# 编辑后:RikiyaT/Qwen3.5-0.8B-weight-space-programming
# 基座:  Qwen/Qwen3.5-0.8B

from vllm import LLM, SamplingParams
from transformers import AutoTokenizer

ckpt = "RikiyaT/Qwen3.5-0.8B-weight-space-programming"
tok = AutoTokenizer.from_pretrained(ckpt)
llm = LLM(model=ckpt, dtype="bfloat16", max_model_len=34816)

prompt = tok.apply_chat_template(
    [{"role": "user", "content": "What is $2^{10} + 24$?\nPlease reason step by step, and put your final answer within \\boxed{}."}],
    tokenize=False, add_generation_prompt=True, enable_thinking=True)
sp = SamplingParams(n=1, temperature=0.6, top_p=0.95, top_k=20,
                    presence_penalty=1.5, max_tokens=32768, seed=0)
print(llm.generate([prompt], sp)[0].outputs[0].text)

采样参数就是博客评测用的那组:temperature 0.6、top-p 0.95、top-k 20、presence penalty 1.5、最多 32,768 token。把 ckpt 换成基座路径再跑一次,对比输出长度和是否给出 \boxed{},比看分数更直观。

想核对改动本身,去日志仓库的 exp8_math/runs/p50c/edit/ 拿位精确 diff,用 exp8_math/code/apply_edit.py 在 CPU 上重建;每个实验文件夹都有自己的 README,标明哪一串数字来自哪个文件。评测脚本是 exp8_math/code/evaluate.py,独立复跑的原始逐题结果在 Hugging Face 仓库的 eval/ 目录。


参考资料

MIT CSAIL 博客:rikiyat.github.io/blog/weight-space-programming/
完整实验日志:github.com/RikiyaT/lm_understand-logs
编辑后模型与独立复跑:huggingface.co/RikiyaT/Qwen3.5-0.8B-weight-space-programming
在线对比 demo:huggingface.co/spaces/akhaliq/weight-space-programming-demo


机器学习算法AI大数据技术

 搜索公众号添加: datanlp

图片

长按图片,识别二维码


阅读过本文的人还看了以下文章:


YOLO实时定位,Qwen3-VL-Seg深度诊断,两者协同完成从"看见"到"看懂"再到"审断"的AI质检全链路
GPT-4o做大脑,Qwen2-VL做眼睛,让无人机+无人船自动巡检港口
NVIDIA开源LocateAnything深度解读:3B参数,比Qwen3-VL快10倍,最强3B视觉定位大模型来了
本地部署AI Agent,6G显存跑Qwen3.6-35B-A3B 从入门到实战全流程
TexMS-YOLO:纹理感知特征融合 + 多尺度交互实现工业缺陷检测91.99% mAP
汇集所有大模型架构图!大模型架构演进全解析
98%准确率!这个双分支AI模型,精准识别木薯叶病害(附代码)
2026论文解读,ASAHI:自适应切片助力小目标检测,速度提升25%、精度创新高
TexMS-YOLO:纹理感知特征融合 + 多尺度交互实现工业缺陷检测91.99% mAP
14.7M参数,小目标AP达到13.9%!FSDETR用频空融合重新定义目标检测
skill刚开源就斩获 1.7K Star!web-access让AI真正"上网"
Qwen3.5实战教程:从0到1掌握本地部署与微调
引入小目标注意力模块改进YOLO12用于无人机视角下的岸边人员玩水检测
pdf2skill:让计算机视觉初学者把PDF文档变成AI技能包
next-ai-draw-io 用这款AI 画图几十秒就搞定了
10 万文档 RAG 落地实战:从 Demo 到生产,我踩过的所有坑
最强一键抠图19Kstar 的 Rembg 开源神器
YOLO12改进引入DINOv3少样本目标检测精度飙升,分享训练自定义数据集代码
基于DINOv2和SAM2改进的U-Net模型
Ultralytics & lightly-train:简化计算机视觉模型训练,无需标签
最新视觉大模型 DINOv3论文精读(逐段解析)
医学影像数据集汇总(持续更新)150个
【医学影像分割】UN-SAM:一种高效且通用的细胞核分割模型
小目标检测难点分析和解决策略

【模型高效部署】tensorrtx 深度解读,yolov11高性能推理实战案例

实时语义分割ENet算法,提取书本/票据边缘


整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主


《大语言模型》PDF下载


动手学深度学习-(李沐)PyTorch版本


基于40万表格数据集TableBank,用MaskRCNN做表格检测


《基于深度学习的自然语言处理》中/英PDF


Deep Learning 中文版初版-周志华团队


【全套视频课】最全的目标检测算法系列讲解,通俗易懂!


《深度学习入门:基于Python的理论与实现》高清中文PDF+源码


python就业班学习视频,从入门到实战项目


2019最新《PyTorch自然语言处理》英、中文版PDF+源码


《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码


《深度学习之pytorch》pdf+附书源码


《Python数据分析与挖掘实战》PDF+完整源码



不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

图片

【声明】内容源于网络
0
0
机器学习AI算法工程
计算机视觉、自然语言处理、推荐系统、人工智能、大模型、深度学习、机器学习、大数据技术社区,分享各类算法原理与源码、数据处理、可视化、爬虫、竞赛开源代码等资源。
内容 1583
粉丝 1
机器学习AI算法工程 计算机视觉、自然语言处理、推荐系统、人工智能、大模型、深度学习、机器学习、大数据技术社区,分享各类算法原理与源码、数据处理、可视化、爬虫、竞赛开源代码等资源。
总阅读53.9k
粉丝1
内容1.6k