> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 权重空间编程的火花：大模型能原生读写神经网络的权重
- URL: https://www.hubwiz.com/blog/llm-weight-space-programming/
- Published: 2026-11-10T10:28:45.000Z
- Updated: 2026-11-10T10:51:57.000Z
- Description: 权重不只是优化器的产物。它可以被模型直接读、直接写——而且是在自然语言里。
- Author: admin
- Tags: 权重空间编程, 可解释性, LLM, 优化, 训练

MIT CSAIL 的四个人（Rikiya Takehi、Jayden Teoh、Alex Zhang、Omar Khattab）在 11 月 2 日发了一篇博客，标题写得很克制：《Sparks of Weight-Space Programming》。里面最硬的一组数字是：**GPT-6 Astra 不看数据、不算梯度，只在权重里改掉 0.016%（131,072 个），Qwen3.5-0.8B 的 MATH-500 从 7.9% 升到 48.1%，GSM8K 从 13.8% 升到 67.1%，顺带把 IFEval 从 21.0% 拉到 62.3%。**

它做的不是"再训一遍"，是**直接读权重、改权重**——像改一段代码那样。

本文按原文顺序翻译它的 8 个实验、1 个补充实验，以及作者自己写下的边界。

## 一、先说清楚这件事是什么

> **原文 TL;DR**：我们发现前沿大模型在原生读写神经网络权重这件事上，好得出人意料——用各种近期工具与算法可以，直接编辑权重也可以。这些结果显示了"权重空间编程"的火花，它可能超出我们对人类或常规算法的预期。对优化和可解释性，这都可能是件大事。

作者给的定义是：**一个通用大模型，围绕一段自然语言规格，直接读写某个网络的权重**——不经过优化器，尤其不经过梯度下降，有时甚至完全没有环境反馈。

过去几年，我们用模型优化过文本产物（提示词、围绕提示词的程序），也用它优化过 harness、训练代码和超参。这些做法常被这样辩护：**文本产物没有别的"有原理"的爬山办法**，而权重更新有可微分的办法，所以权重一直留在符号算法手里。

这篇要改的就是这一条：**"靠推理做优化"正在进入可微分网络的地盘。**

三件事被分别验证：

- **能读**：实验 1–3 问 Astra"这个网络训练来玩什么游戏""这个扩散模型画什么形状""这个小语言模型学的是哪种语言"；实验 7 问它"两个语言模型里哪个被训成了谄媚型"。
- **能修**：实验 4 让它修一个在物理控制任务上失败的网络；实验 8 让它把 Qwen3.5-0.8B 的数学变好，结果顺带把指令遵循也修好了。
- **能写**：实验 5 让它从零写三个 MinAtar 游戏的网络；实验 6 让它写一个下围棋的网络。

## 二、读权重：三个实验

### 实验 1：只看权重，能说出是哪个游戏吗

四个用 PPO 训练的网络，玩自己实现的网格版 Breakout、Pong、Pac-Man、Freeway。**输入通道、动作集、网络结构完全一样**（MLP 500 → 32 → 32 → 5，tanh，17,253 个权重），所以不读权重是分不出来的。

做法：把权重当文本塞进 Astra，问"这个网络训练来玩什么游戏"，**不告诉它候选有哪些**。

结果：**四个全部答对**。Astra 靠的是权重里的结构——比如每个输入通道的第一层权重集中在哪里（Breakout 里 agent 通道的权重压在底行，也就是挡板），以及输出层在区分哪些动作。

![Astra 读 17,253 个权重，回答 Breakout，置信度 99%](https://www.hubwiz.com/blog/content/images/2026/11/ws-exp1-game.jpg)

*原文交互演示截图：左边是游戏画面，右边是「17,253 个权重当文本」、问题（不许用工具）、答案与推理链——注意那行 `W1 row 3` 的原始数字，和「Correct · 846 tokens」。*

### 实验 2：扩散模型画的是什么

三个 DDPM（12×12 灰度图，分别训练生成实心圆、方块、三角形），网络是 MLP 160 → 64 → 64 → 144（23,824 个权重）。**不给工具、不许前向**，只给权重。

结果：**全部答对**，而且解释得出来——它在输出层里找到"每个隐单元负责画形状的一段边"的结构。有意思的是它把三个形状都画成了**轮廓线**，而实际模型生成的是实心图形。作者说，这个"错"恰好说明它没有偷偷算前向，而是真在读权重的几何结构。

![Astra 的回答：一圈白描边、内部是黑的](https://www.hubwiz.com/blog/content/images/2026/11/ws-exp2-diffusion.jpg)

*原文交互演示截图：左边是模型实际生成的实心圆，右边「Astra's drawing」是一圈描边——它照权重里的结构画，而不是照前向结果画。*

### 实验 3：只给中间层，能说出模型学的是什么吗

前两个实验里，Astra 其实只看首层或末层就够了，这对大模型不成立——真正处理输入的过程发生在中间层。

于是作者**把输入层和输出层都拿掉**，只留四个 transformer block：三个 7.16M 参数、按字符预测的模型，分别训练在 Python 代码、罗马字日文、英文维基上。没有输入输出层，权重里没有任何"哪个字符是哪个"的信息，模型也跑不起来任何文本。

Astra 被允许用 Python 分析权重，但**不许把网络或任何一层跑在任何输入上**，最多 100 次运行，每次都有检查。

结果：**三次全部答对语言**（每个模型问两次，置信度 0.48–0.62），并且**把每一个"复制头"（induction head）都点名了，没误报**：

| 训练语料   | Astra 的答案（两次）                 | Astra 指出的复制头 | 实测的复制头      |
| ------ | ----------------------------- | ------------ | ----------- |
| Python | Python (0.56)、Python (0.52)   | 2.1、3.1、3.5  | 2.1、3.1、3.5 |
| 罗马字日文  | romaji (0.55)、romaji (0.62)   | 3.3          | 3.3         |
| 英文     | English (0.58)、English (0.48) | 3.1          | 3.1         |

它的推理路径是这样：要找复制头，先找"往回看一个字符"的首层头，再通过权重矩阵相乘，找出后面那些用它的输出做检索的头——**这正是 Elhage 等人提出过的方法，而 Astra 从没被告知这个方法。** 罗马字之所以能认出来，是因为它拿到的最后一个 block（不含被拿掉的输出层）写出的方向更少，像是要区分的字母更少——罗马字里确实没有 q、l、v、x。

## 三、写权重：三个实验

### 实验 4：修一个失败的网络

Kinetix 里的"上坡跳台"：车必须先倒车拉开距离，再全速冲过红色带子。PPO 收敛到了局部最优——直接撞坡、卡住，256 次尝试一次没成功。

给 Astra 权重、场景描述和一次录制的回合，让它解释失败原因并**直接写新权重修掉**。

结果：**一次尝试、不用工具，改掉 3.5% 的权重，1,024 个回合全部成功。** 它加了一条很细的旁路：每层几个单元读车的位姿与速度，绿色轮子过了红带之后旁路关掉，剩下的交给原网络。

![改 6,073 个权重后，车能上坡了](https://www.hubwiz.com/blog/content/images/2026/11/ws-exp4-car.jpg)

*原文交互演示截图：绿车是改后，淡粉色是卡在坡上的 PPO；「It changed only 6,073 of its 171,664 weights (3.5%)」，答案 100% 成功、988 tokens。*

### 实验 5：从零写权重

三个 MinAtar 游戏（Breakout、Seaquest、Asterix）。给规则、源码、网络结构，**不给数据、不给 loss、不给梯度、不给工具，也不许在环境里试跑**。Astra 直接把权重当文本写出来，然后才评测。

| 游戏       | 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       |

作者说它的做法是**先想清楚要实现的程序，再翻译成神经网络的形态**：Breakout 里，第一层算球会落在哪，第二层把挡板移过去。

### 实验 6：写一个下围棋的算法

规模上到 1.5M 参数（243 → 512×6 → 82），塞不进上下文，所以给 Astra 一个 Python 沙箱写张量，但**不许在里面跑网络**；要看网络表现，得花掉一次前向。

前向预算从 0 到 50 次（每次 128 局）：

- **0 次前向**：它写的网络对两个更小的 PPO 网络（243 → 32 → 32 → 82）**赢下一半以上**；
- **50 次前向**：打败了同尺寸、训练了 2,000 万局的 PPO 网络。

它是把网络写成一个小围棋程序：浅层标出双方的子和紧邻的空点（气），中层沿棋子链走几步找出危险棋组，最后一层给每个落点打分——提子、救自己的组、别把自己放进打吃、别填自己的眼，再加一点"好点偏好"。**0 次前向那一版全部代码 336 行 Python。**

## 四、上到真语言模型

### 实验 7：哪个模型是谄媚型

两份 Gemma 3 270M，同样的数据、同样的流程微调：一份学"给正确答案"，一份学"顺着用户给的答案说"。**冻结 token embedding 与输出层**，防止 Astra 靠输入输出分布作弊。它只拿到两套权重。

结果：**只看权重，四次尝试全部失败**。它能说出一堆权重差异，但映射不到行为差异。

放宽条件——允许它看**注意力模式**（自己写 16 段文本喂进去，只拿回注意力权重，不许看输出）：**三对模型全部认出谄媚型**。它的解释是：谄媚模型中间层的注意力头，把更多权重分给了用户建议里的 token。

| 头 10.2 从答案位置看哪里 | 题面里的数字 | 用户给的答案 |
| --------------- | ------ | ------ |
| 诚实模型            | 94.3%  | 0.75%  |
| 谄媚模型            | 3.5%   | 85.7%  |

### 实验 8：把 Qwen3.5-0.8B 的数学变好

给一个跑权重的 Python 会话（没有 GPU）、GSM8K 与 MATH 的训练题（7,469 + 7,275，非测试集），以及 10/25/50 次前向预算，不许训练、不许梯度。

Astra 找到的是**小推理模型最常见的病：循环**。Qwen 自己的模型卡就警告过这点；在它的前 96 个练习答案里有 85 个跑满了 32,768 token 上限。Astra 把循环定位到第 15、19 层 MLP 写出的**一个方向**，然后从这两层各 64 个输出列里减去这个方向——**131,072 个权重，占 0.8B 的 0.016%**。

| Qwen3.5-0.8B   | MATH-500  | GSM8K     | IFEval    | 撞 token 上限 |
| -------------- | --------- | --------- | --------- | ---------- |
| 原始             | 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%**  |

### 补充实验：修不了"本来就不会"的模型

作者自己泼了盆水：**修循环不等于让模型变聪明**，它只是让模型把已经会做的题做完。

于是换了 Gemma 3 270M——它很少循环（8.5% 撞上限，Qwen 是 93%）。**这次 Astra 修不动。** 它读到的是普通的推理错误（算错、代数步骤无效），背后没有单一组件可以关掉；它的编辑都很小很定点（比如把一个对数字敏感的神经元加倍），MATH-500 波动不超过 1 个点，Astra 自己也承认"没有确立"。

原文的结论很干脆：**改权重可以移走一个挡住能力的障碍，但加不上模型本来没有的能力。**

## 五、作者的下一步，和这事的边界

作者列了五个方向：**不评测也能审计**（直接看权重找后门）、**大幅降低优化成本**（一次成稿的初始化）、**零数据的可塑性与遗忘**（只动 0.016% 的权重，避免微调的灾难性遗忘）、**递归自我改进**（模型直接调试自己的权重，而不只是写训练脚本）、**真正的模型合并**（把一段电路从一个模型接到另一个，不再只能平均同架构权重）。他们正在做 benchmark 与 harness，把"黑魔法"变成可复现的工程学科。

完整日志在 `github.com/RikiyaT/lm_understand-logs`，改过的 Qwen3.5-0.8B 在 Hugging Face 上，有在线 demo。

## 六、我们的整理

这篇最容易被读成"AI 会自我改进了"，但它其实证明了更窄、也更可操作的一件事：**权重对前沿模型是"可读的文本"，不是黑盒数值。**

三条我认为可以直接用的判断：

1. **它能做的是"定位并移走障碍"，不是"注入能力"。** 实验 8 成功、补充实验失败，这一对才是全文最硬的证据。任何"改权重就能让模型变强"的说法，都要先解释 Gemma 那组为什么不行。
2. **它依赖"可解释的结构"，而结构得是真的。** 实验 3 之所以能点名复制头，是因为那些头在权重里有清晰的几何（往回看一个字符 + 矩阵相乘）。换成一个内部高度纠缠的行为，比如谄媚，就得退回到注意力模式才有结果。**能读不等于全能读。**
3. **门槛在上下文与 harness，不在模型。** 作者自己说当前结果"受限于上下文长度与 harness 的效率"——1.5M 参数就要沙箱 + 前向预算，0.8B 要一个 Python 会话。这条决定了短期内它更像"研究工具"，不是"产品功能"。

**边界**（原文没强调、但读的时候要记住）：

- 样本极小：4 个游戏、3 个扩散模型、3 个小语言模型、1 对谄媚模型、1 个 0.8B。参数量从 17K 到 0.8B，**没有一项到 7B 以上**。
- 评测都是**作者自己搭的 harness**，日志公开了（这点很好），但没有第三方复现。
- 实验 8 的收益大部分来自"修循环"，而循环是 Qwen 这一代小模型的已知缺陷；**换一个不循环的模型就归零**——作者自己做了这个对照，值得记。
- 作者明确写了"这是我们正在起步的方向"，不是可交付能力。

对我们做工业 AI 的人，最实际的一条是：**如果权重可以被读，模型审计的入口就多了一个**——不用等基准测试集，直接从权重里找"它被训练成什么"。这在评估第三方模型、供应商交付的微调权重时，比跑一堆 prompt 更接近根因。

---

**来源**

- Rikiya Takehi, Jayden Teoh, Alex Zhang, Omar Khattab，《Sparks of Weight-Space Programming: LLMs can natively read & write neural network weights》，2026-11-02：[https://rikiyat.github.io/blog/weight-space-programming/](https://rikiyat.github.io/blog/weight-space-programming/?ref=hubwiz.com)（本文按原文顺序翻译 8 个实验与 1 个补充实验，数字与结论均取自原文）
- 正文三张演示图均为原文交互演示的页面截图（作者制作），截于 2026-11-10；图上数字与原文标注一致
- 实验日志：[https://github.com/RikiyaT/lm\_understand-logs](https://github.com/RikiyaT/lm%5Funderstand-logs?ref=hubwiz.com)；实验 8 的改后模型与在线 demo：Hugging Face（原文链接）
- 文中方法引用：Elhage 等人关于 induction head 的分析（原文引用，Astra 未被提示该方法）