# Astra 只改了 0.016% 的权重，Qwen 的 MATH-500 就从 7.9% 跳到 48.1%

**Summary:** MIT CSAIL 的研究者报告，GPT-6 Astra 直接改写了 Qwen3.5-0.8B 的权重，MATH-500 得分从 7.9% 升到 48.1%。作者认为关键在于模型不再反复绕圈，更多回答终于写完。换成 Gemma 3 270M 后，同样的手法没带来可靠提升，所以这更像修掉了一个具体故障，而不是凭空补上数学能力。

- Canonical: https://markhuang.ai/zh/news/astra-qwen-weight-space-loop-repair
- Language: zh-CN
- Author: [Mark Huang](https://markhuang.ai/about)
- Published: 2026-11-02
- Section: News
- Tags: 权重空间编程, GPT-6 Astra, Qwen3.5-0.8B, 模型评测, 机制可解释性
- Source: [Rikiya Takehi and colleagues](https://rikiyat.github.io/blog/weight-space-programming/)
- License: https://creativecommons.org/licenses/by-nc/4.0/

---

![玻璃棒与陶瓷节点织成的一片网格里，一条铜色回路借琥珀色接点改道](https://cdn.markhuang.ai/news/astra-qwen-weight-space-loop-repair/hero.webp)

*由 OpenAI imagegen 生成的概念插图：一次局部修补让一条重复的路径改了道，而网络其余部分保持完整。这是比喻，不是 Qwen 的实际结构。*

小模型数学考得差，有时候不是不会算，而是反复绕圈，最后连答案都没写完。MIT CSAIL 的研究者在 2026 年 11 月 2 日发布的 [Sparks of Weight-Space Programming](https://rikiyat.github.io/blog/weight-space-programming/) 里报告：GPT-6 Astra 直接改写了 Qwen3.5-0.8B 的权重，把它的 MATH-500 得分从 7.9% 提到 48.1%。权重指的是一组数值，它们决定神经网络怎么处理信息。这一次 Astra 没有重新训练模型，只是直接改动了这组数字。

这个修复我信。作者的解释是：Astra 改掉了模型反复循环的毛病，Qwen 本来就算得出的题，终于有机会把答案写完。换我来决定要不要重新训练一个表现很差的模型，我会先搞清楚一件事：它到底是缺知识，还是只是答不完。

## 分数涨上去，是因为没写完的回答少了一大截

在作者最强的那次 Qwen 实验里，MATH-500 上撞到 32,768 token 输出上限的回答占比，从 93.0% 降到 33.1%。原模型经常把全部输出额度耗在绕圈上。改完之后，真正把答案写出来的回答多了很多。两组对比用的是同样的采样设置。

根据[公开的实验日志](https://github.com/RikiyaT/lm_understand-logs/tree/main/exp8_math)，Astra 查明这种重复来自两个内部层共同形成的一种模式，于是只动这两层里的部分权重，把重复压了下去。补丁落在 131,072 个权重项上，大约占整个模型的 0.016%。日志还分清了两种情况：哪些权重项是这次编辑直接改的，哪些是四舍五入之后数值仍然不同。

其他任务也跟着涨。作者报告 GSM8K 从 13.8% 升到 67.1%，测指令遵循的 IFEval 从 21.0% 升到 62.3%。这挺像一个拖累好几个任务的故障被摘掉了。这些数字是研究者自己测的，我没有复现。

Qwen 自己的[模型卡](https://huggingface.co/Qwen/Qwen3.5-0.8B/blob/main/README.md)就提醒过，0.8B 这个版本容易陷进思考循环，建议调整生成设置，并在流式输出时盯住异常内容。在这场测试里，这个模型大半输出额度都花在没写完的回答上；光是能把话说完，分数就有很大的上升空间。不过这些数字回答不了另一个问题：这块补丁，和“不碰权重、只把生成参数调到最好”相比，究竟差多少。

## 找到这块补丁，花了几个小时

Astra 没有训练目标模型，可它拿到的反馈并不少：一个能直接操作权重的 Python 工作区、带答案的练习题，还有运行模型的次数上限。研究者禁止它用梯度下降（平时靠训练误差调整权重的那套办法），但允许它查看结果，再回头改自己动过的地方。

```mermaid
flowchart TD
    A["检查 Qwen 的权重和练习题"] --> B["提出一处直接的权重改写"]
    B --> C["在预算内运行模型，拿回反馈"]
    C --> D["分析结果，再改一版"]
    D --> B
    D --> E["提交最终修改后的权重"]
    E --> F["研究者用 Astra 看不到的测试集评测"]
```

最强的那次 Qwen 实验只给了 Astra 50 次前向传播。这里的“一次”指一批请求，不是一道题：一批最多能给 512 道练习题出答案，或者查看 1,024 段文本的内部活动。编辑期间，Astra 看不到最终的评测集。

日志记下了更细的过程：158 轮对话、80 次 Python 运行，从第一轮到最后一轮横跨 20.3 小时，其中 4.7 小时在等一次模型服务中断恢复。所以这 20.3 小时既算不出真实的计算量，也估不准成本。补丁是一轮轮检查和修改磨出来的。

## 换到 Gemma 上，同样的手法不灵了

作者也试了 Gemma 3 270M，在他们这套设置下它很少绕圈。在[后续实验](https://github.com/RikiyaT/lm_understand-logs/tree/main/exp8_math/gemma_followup)里，编辑前它的 MATH-500 是 6.8%，跑完 50 次前向传播那一档也只到 7.0%。试过的几档预算，都没换来站得住脚的提升。Astra 看到的都是普通的推理错误，找不到哪个局部故障能被单独摘掉。

Gemma 这个结果我挺当回事。Qwen 那次成功，摘掉的是一种能被指认、也确实堵住有用答案的行为。但要靠这套办法给本来不会数学的模型补上数学能力，这些实验还证明不了。

翻看模型内部、直接动手改权重，也不是头一回了。[Elhage 等人 2021 年的 transformer-circuits 工作](https://transformer-circuits.pub/2021/framework/index.html)就直接从小模型的权重出发，分析它的计算过程。[Arditi 等人 2024 年的研究](https://arxiv.org/html/2406.11717v1)表明只改动一小块权重，就能明显改变模型的拒答行为。不同的是，这次动手的是一个通用大模型。而那些被记录下来的失败，正好标出了这套做法的边界。

## 先弄清模型为什么错

如果我的团队在用很小的模型，第一步我会把答错的题和没答完的题分开统计，而不是混在一起看平均分。然后在同一批留出数据上，比较调生成设置和改权重这两条路。Qwen 模型卡上那句提醒，本身就是先试简单办法的具体理由。

检查的范围我也会往外扩一点，不能只看想修的那一处。同一项研究里还有个实验：Astra 想只凭权重认出哪个是谄媚模型（被训练成顺着用户给的错误答案走），试了四次都失败。直到研究者补上“模型把注意力放在哪里”的反馈，它才认出来。要把权重检查当成审计手段来用，这个失败很要命。再说，一块极小的补丁也没法证明其他行为都没被动过。

我在[写 AI 解释与审计记录](https://markhuang.ai/news/llm-shows-work-hides-answer-cause)时说过，解释得拿实际行为去验证。权重空间编程吸引我，是因为它可能让某些具体故障变得好修。这次 Qwen 实验里，重复少了，模型交出的有用答案就多了不少。哪怕还没人证明能用同样的办法教它新数学，这一点本身就值得记一笔。
