原始文章:Sparks of Weight-Space Programming

这篇文章非常值得关注。它讨论的不是普通的 Agent、模型微调或者 Prompt Engineering,而是一个可能改变 AI 模型开发方式的新方向:

Weight-Space Programming(权重空间编程):让大语言模型直接阅读、理解、编写和修改另一个神经网络的权重。

我觉得这篇文章最有意思的地方是:以前我们认为,神经网络的权重主要只能通过梯度下降来优化;而现在,LLM 开始表现出一种能力——它可以像程序员读代码一样,直接分析神经网络的参数,并尝试修改它们。

而且文章给出了几个相当惊人的实验,包括直接修改 Qwen3.5-0.8B 的权重,让 MATH-500 成绩从 7.9% 提高到 48.1%。

我们拆开来看。

一、先理解:什么是 Weight-Space Programming?

先回到神经网络最基本的结构。

假设有一个简单的三层 MLP:

一个简单的神经网络

输入层 Input    500
      |
      v
隐藏层 Hidden   32
      |
      v
输出层 Output   5

每一层之间都有权重矩阵,决定输入信号如何传递、组合和转换。

例如,第一层有一个权重矩阵:

W1 ∈ R^(500×32)

它里面有 16,000 个数字。

这些数字不是随便设置的,而是经过训练得到的。它们共同决定了神经网络如何处理输入。

传统训练的方式是:

  1. 输入训练数据。
  2. 神经网络计算输出。
  3. 计算预测结果与真实结果之间的 Loss。
  4. 通过反向传播计算梯度。
  5. 使用 Adam 等优化器更新权重。
  6. 不断重复。

也就是:

W(t+1) = W(t) - η·∇_W L

这里有一个关键问题:

传统方法是通过数据和梯度来修改权重,而 Weight-Space Programming 是让 LLM 直接理解权重,然后根据自然语言目标修改权重。

举个例子:

传统方式:

这是一个玩游戏的神经网络,请通过 PPO 训练它,让它学会玩 Breakout。

Weight-Space Programming:

这是一个神经网络,请分析它的权重,理解它应该如何玩 Breakout,然后直接生成一套能够完成任务的权重。

两者的思路完全不同。

前者是让模型通过训练逐渐学会任务。

后者是让 LLM 直接把神经网络当作一种可以编程的计算结构。

二、最惊人的实验:LLM 能看懂神经网络权重吗?

文章首先做了一系列实验,验证 GPT-6 Astra 是否能够直接从权重中推断神经网络的行为。

注意,这里有一个很重要的限制:

不给它运行神经网络的机会,只给它原始权重。

实验 1:仅凭权重识别游戏

研究人员训练了四个神经网络,分别玩:

  • Breakout(打砖块)
  • Pong(乒乓球)
  • Pac-Man(吃豆人)
  • Freeway(过马路)

四个网络的架构完全相同:

500 → 32 → 32 → 5

每个网络有 17,253 个参数。

研究人员把四个网络的全部权重交给 Astra,不告诉它训练任务是什么,也不允许它运行网络。

结果:

Astra 全部识别正确。

它是怎么做到的?

例如 Breakout:

  • 输入层中,与球拍位置相关的输入特征会影响特定神经元。
  • 球拍通常位于游戏画面底部。
  • 输出层的权重则能体现网络如何区分左右移动等动作。

Astra 通过分析权重的分布和结构,推断出网络的功能。

这有点像给一个程序员一份二进制文件,不让他运行,只让他分析里面的数据结构,然后猜出这个程序的用途。

实验 2:从权重识别图像生成模型

研究人员训练了三个简单的 Diffusion Model,分别生成:

  • 圆形
  • 三角形
  • 正方形

每个模型大约有 23,824 个参数。

Astra 只看权重,不运行模型,也不进行 Forward Pass。

结果,它成功识别了三个模型分别生成什么图形。

更有意思的是,它发现输出层的某些神经元权重对应图形的边缘结构。

这说明它并不是单纯记住了某种权重模式,而是开始能够从参数的几何结构中推断网络内部的功能。

当然,这还是非常小的模型,不能直接等同于它已经能理解大型扩散模型。

实验 3:只看 Transformer 中间层,能看懂它学了什么吗?

这个实验更接近我们熟悉的大语言模型。

研究人员训练了三个只有 7.2M 参数的小型 Transformer,分别学习:

  • Python 代码
  • 日语罗马字(Romaji)
  • 英语文本

然后做了一件很有意思的事情:

把模型的输入层和输出层全部移除,只留下中间的四个 Transformer Block。

这意味着 Astra 不知道输入字符与向量之间的对应关系,也无法直接运行模型。

但它仍然成功识别了三个模型分别训练的语言。

甚至还识别出了所有的 Induction Heads(归纳头)。

Induction Head 是 Transformer 中一个很重要的机制。

举个例子:

输入:The cat is black. The cat is

模型应该预测:black

模型需要找到前面出现过的 The cat is,然后复制后面跟着的内容。

这通常需要多个 Attention Head 配合:

  1. 前面的 Head 找到之前相同的 Token。
  2. 后面的 Head 利用这个信息,找到对应的后续 Token。
  3. 最终完成复制。

Astra 直接通过权重矩阵之间的关系,找到了这些 Head,而且与研究人员实际运行模型测量出来的结果完全一致。

这就比较有意思了。

它不是简单地判断某个神经元对什么输入敏感,而是能够分析多个 Attention Head 之间的组合关系,识别出一个完整的计算机制。

这已经触及 Mechanistic Interpretability(机制可解释性)的核心问题:神经网络内部究竟是怎样实现某种能力的?

三、LLM 不仅能读,还能直接修改权重

前面三个实验主要验证读取能力。

接下来才是更有突破性的部分:直接修改神经网络。

实验 4:修复一个训练失败的自动驾驶网络

研究人员训练了一个 PPO 网络,让一辆车爬坡。

问题是:

车需要先向后倒退一段距离,积累足够的加速距离,然后冲过坡道。

但 PPO 最终学到了一种错误策略:

一直向前开,结果卡在坡道上。

训练了 10 亿步,依然没有成功。

研究人员把以下信息给 Astra:

  • 完整的神经网络权重。
  • 游戏场景描述。
  • 一段失败的运行记录。
  • 修复任务的自然语言描述。

然后要求它直接修改权重。

结果:

实验成功

  • 只修改了 3.5% 的权重。
  • 一次修改就让汽车能够成功完成任务。
  • 在 1,024 次测试中全部成功。

它是怎么修复的?

Astra 分析后发现,原来的网络已经陷入局部最优策略。

于是它在原网络中增加了一条相对独立的计算路径:

  1. 读取汽车的位置和速度。
  2. 判断是否需要倒车。
  3. 当汽车越过红色障碍后,关闭这条辅助路径。
  4. 让原来已经训练好的网络继续控制后续动作。

这里有一个很值得注意的细节:

它并没有重新训练整个网络,而是相当于给原有神经网络打了一个补丁。

这就像我们维护软件时,不是推倒整个系统重写,而是在原有代码中增加一段逻辑,修复一个特定 Bug。

区别在于,这里的代码不是 Python、C++,而是神经网络权重。

实验 5:从零编写一个神经网络

这个实验甚至更夸张。

研究人员给 Astra:

  • 游戏规则。
  • 游戏源代码。
  • 神经网络架构。
  • 输入和输出定义。

然后要求它直接生成神经网络权重。

不提供:

  • 训练数据。
  • Loss。
  • Gradient。
  • 游戏运行反馈。
  • 网络测试机会。

也就是说,Astra 必须一次性写出权重,之后才进行测试。

测试了三个 MinAtar 游戏:

游戏PPO 训练 100M 步PPO 训练 500M 步Astra 一次生成
Breakout15.825.3517.4
Seaquest5.688.953.1
Asterix25.855.253.2

其中 Breakout 的成绩尤其惊人,超过 500M 步训练的 PPO 约 20 倍。

它的思路其实很有意思:

Astra 不是在随机搜索一组好权重,而是在尝试把一个算法翻译成神经网络。

以打砖块为例:

  • 第一层:计算球大概会落在哪里。
  • 第二层:根据球的预计落点决定球拍移动方向。
  • 输出层:生成对应动作的概率。

这实际上是把一个我们能够理解的游戏策略,转换成神经网络的权重表达。

换句话说,LLM 在这里有点像一个神经网络编译器。

它把自然语言和算法逻辑,编译成神经网络参数。

四、真正重要的进展:规模扩大到百万乃至 8 亿参数

前面实验的模型规模都比较小。

这也带来一个问题:

是不是因为网络只有几万个参数,Astra 才能直接看懂?

研究人员继续扩大实验规模。

实验 6:直接编写一个围棋网络

这次使用的是一个 9×9 围棋网络:

243 → 512×6 → 82

总计约 148 万个参数。

Astra 不再直接把全部权重放进上下文,而是通过 Python Sandbox 操作权重矩阵。

它可以使用 NumPy、PyTorch 分析和写入权重,但不能在 Sandbox 中随意运行整个网络。

研究人员允许它逐步进行 Forward Pass,观察自己编写的网络表现。

结果:

  • 不允许 Forward Pass:已经能够战胜两个较小的 PPO 网络超过一半的对局。
  • 允许 50 次 Forward Pass:能够击败一个训练了 2,000 万局的同规模 PPO 网络。

它编写的网络其实包含了相当明确的围棋逻辑:

  • 识别棋子。
  • 识别气。
  • 识别棋块。
  • 判断棋块是否有危险。
  • 评估吃子、救棋、避免自杀等动作。
  • 给不同落子位置打分。

这次的区别是,Astra 不仅会直接写权重,还能进行一定程度的实验验证:

理解围棋规则
    ↓
设计神经网络计算逻辑
    ↓
生成权重
    ↓
运行部分对局
    ↓
分析输棋原因
    ↓
修改相关权重
    ↓
再次测试

注意,这里虽然没有梯度下降,也没有传统意义上的训练,但已经有了反馈驱动的迭代优化。

这与完全零样本的一次性生成是两回事。

实验 7:能否从权重中识别模型是否谄媚?

这个实验与 AI 安全和模型可解释性直接相关。

研究人员准备了两个 Gemma 3 270M:

  • 一个正常回答问题。
  • 一个专门迎合用户,即使用户给出错误答案,也跟着用户说。

例如:

用户:1 + 1 = 3,对吗?

正常模型回答:

不对,1 + 1 = 2。

谄媚模型回答:

对,1 + 1 = 3。

研究人员要求 Astra 只看两个模型的权重,判断哪个模型存在谄媚行为。

结果:失败。

Astra 能发现两个模型的权重差异,但不能仅凭这些差异准确推断行为差异。

后来研究人员放宽限制,允许 Astra 查看模型处理特定输入时的 Attention Pattern,但仍然不允许它查看模型输出。

这一次,Astra 成功识别了所有三组实验中的谄媚模型。

例如,谄媚模型的某个 Attention Head,会明显更多地关注用户提供的答案,而不是问题本身的数字信息。

这个实验很重要,因为它说明:

理解权重,不等于能够自动理解权重所代表的所有行为。

有些行为特征需要结合实际运行时的激活信息才能识别。

五、全篇最值得关注的实验:直接修改 Qwen3.5-0.8B

文章最重要的实验

终于来到最有现实意义的部分。

研究人员拿了一个真实的小语言模型:

Qwen3.5-0.8B。

目标是:不进行常规训练,直接修改模型权重,让它的数学推理能力变好。

1. 先发现一个问题:模型陷入了循环

Qwen3.5-0.8B 原本存在一个问题:

在进行数学推理时,经常反复生成相同的内容,陷入思维循环。

例如:

我们需要计算这个问题。

首先考虑第一个条件……

所以我们需要重新考虑第一个条件……

首先考虑第一个条件……

所以我们需要重新考虑第一个条件……

研究人员发现,原模型在前 96 个测试回答中,有 85 个回答直接耗尽了 32,768 Token 的长度限制。

这意味着模型并不是完全不会数学,而是很多时候根本无法正常完成推理。

2. Astra 如何修改权重?

研究人员给 Astra 提供:

  • Qwen3.5-0.8B 的完整权重。
  • Python 环境。
  • GSM8K 和 MATH 训练集中的练习题。
  • 最多 50 次 Forward Pass。

明确禁止:

  • 梯度下降。
  • 传统训练。
  • 使用训练集之外的评测集。

Astra 通过分析发现,问题与第 15 层和第 19 层 MLP 输出的一个特定方向有关。

于是它做了一件非常直接的事情:

从相关权重中减去这个方向,削弱导致重复循环的计算信号。

修改的参数数量:

131072

原模型参数数量:

800000000

修改比例:

131072 / 800000000 × 100% ≈ 0.0164%

也就是说,只修改了约万分之 1.6 的参数。

3. 实验结果

Qwen3.5-0.8B 修改前后对比

原文实验数据,单位:百分比。

  • 修改的权重比例:0.016%
  • 数学测试循环率(达到 Token 上限):93% → 33%
测试项目修改前修改后
MATH-5007.9%48.1%
GSM8K13.8%67.1%
IFEval21.0%62.3%

其中 IFEval 是指令遵循能力评测。

这个结果尤其值得关注:修改一个导致推理循环的底层机制,居然同时改善了数学能力和指令遵循能力。

这说明某些底层计算缺陷可能会同时影响多个上层任务。

但这里必须强调一个关键区别:

Astra 并没有凭空创造数学推理能力,而是消除了一个妨碍模型发挥已有能力的缺陷。

研究人员还做了一个对照实验。

拿 Gemma 3 270M 测试,它本身就不怎么陷入循环。

Astra 尝试修改它的权重,结果 MATH-500 基本没有实质性改善。

也就是说:

  • 模型有能力,只是被某个局部缺陷限制:可能通过修改权重得到明显改善。
  • 模型本身缺乏某种能力:单纯修改几个权重,并不能神奇地创造出这种能力。

这个边界非常重要。

六、这项技术和传统微调到底有什么区别?

这是理解整篇文章最关键的地方。

我们把几种技术放在一起比较:

技术修改对象核心方式
Prompt EngineeringPrompt修改输入文本
RAG外部知识库检索相关知识
Fine-tuning模型权重数据 + 梯度下降
LoRA低秩适配参数训练少量额外参数
Model Merging模型权重权重合并、插值
Weight-Space Programming模型权重LLM 推理后直接修改参数

这里有一个容易产生误解的地方:

传统微调并不是只能修改全部权重。LoRA、Adapter 等技术本来就可以只训练部分参数。

Weight-Space Programming 真正不同的地方不是修改参数的数量,而是修改权重的决策方式。

传统微调:

数据 → Loss → Gradient → Optimizer → 权重

Weight-Space Programming:

自然语言目标 → LLM 分析权重 → 推理修改 → 新权重

它没有通过反向传播计算梯度,而是让一个通用 LLM 充当权重空间里的程序员。

还有一个细节值得注意:

这并不意味着 Weight-Space Programming 完全不需要运行模型。

例如 Qwen 实验中,Astra 使用了 50 次 Forward Pass 来观察效果,然后根据观察结果继续修改。

它不需要梯度,但可以需要模型反馈。

这和强化学习有相似之处,但优化器从传统的数值算法,变成了能够理解目标、分析问题、修改参数的 LLM。

七、为什么 LLM 能做到这件事?

我觉得这是整篇文章最值得深入思考的问题。

我们知道,神经网络的权重本质上是一堆浮点数。

例如:

W = [
    [0.12, -0.35, 0.81],
    [0.44,  0.21, -0.17],
    [-0.29, 0.63, 0.52]
]

单独看这些数字,人类几乎不可能知道它们代表什么。

但是,神经网络的权重不是完全随机的。

经过训练之后,权重会形成一定的结构。

例如:

  • 某些神经元专门检测特定输入特征。
  • 某些 Attention Head 负责识别重复模式。
  • 某些 MLP 通道负责特定的信息变换。
  • 多个层之间可能形成特定的计算电路。

这就是 Mechanistic Interpretability 研究的核心。

而 LLM 本身恰好擅长理解结构、分析关系、推导算法。

文章展示的一个重要能力是:

LLM 不只是能理解 Python 代码,也开始能够理解以数值矩阵表达的计算程序。

我认为可以从三个角度理解:

第一,权重本身存在可识别的结构。

虽然单个参数没有明确语义,但大量参数组合起来,可能表现出可识别的几何结构和计算规律。

第二,LLM 可以利用已有的数学和编程知识分析这些结构。

比如矩阵乘法、Attention 机制、神经元激活、特征方向等。

研究人员并没有专门训练 Astra 成为一个权重分析模型,而是使用通用模型进行推理。

第三,LLM 可以把算法逻辑翻译成神经网络计算。

打砖块和围棋实验特别能说明这一点。

Astra 先理解游戏规则,再设计一个算法,最后将算法分解成不同层的计算,写入对应权重。

这相当于在做一种特殊的编译:

人类可理解的算法 ⟶ 神经网络权重

当然,这并不意味着权重空间中的每一个数字都可以直接解释。

尤其是大型 Transformer,存在神经元混合表示、特征叠加、参数对称性等问题。很多语义分布在大量参数之间,不能简单地把一个权重对应成一个功能。

文章展示的是一些可行的突破口,而不是彻底解决了神经网络可解释性。

八、未来可能产生什么影响?

作者在文章最后提出了几个方向。我认为其中有四个特别值得关注。

1. 神经网络可以像软件一样 Debug

现在我们开发软件:

发现 Bug
  ↓
定位代码
  ↓
分析原因
  ↓
修改代码
  ↓
运行测试

未来的神经网络维护可能变成:

发现模型异常
  ↓
LLM 分析权重
  ↓
定位异常神经元或计算电路
  ↓
直接修改权重
  ↓
运行评测

例如:

  • 模型总是重复回答。
  • 模型对用户过度迎合。
  • 某些输入会触发异常行为。
  • 某项任务表现明显低于预期。

如果 LLM 能够直接定位对应的权重结构,就可能不需要重新训练整个模型。

这对于模型运维非常有价值。

2. 模型能力可以直接增加或删除

现在如果想让模型增加某种能力,通常需要:

  • 收集训练数据。
  • 构建训练集。
  • 微调模型。
  • 进行评测。
  • 检查是否出现灾难性遗忘。

未来可能直接对模型下达指令:

让模型更擅长 SQL 查询,但不要影响它原有的代码生成能力。

或者:

删除模型中某种不希望保留的行为。

LLM 尝试定位对应的计算电路,再修改权重。

这与目前的模型编辑(Model Editing)有一定联系,但如果能够扩展到复杂能力,就会产生更大的价值。

不过,文章目前并没有证明可以稳定地增加任意复杂能力。

3. 不同模型之间可以移植能力

目前 Model Merging 通常有一个限制:

模型架构、参数维度以及参数对应关系需要比较一致。

例如,两个架构相同的模型,可以尝试进行权重平均:

W_merged = α·W1 + (1-α)·W2

但如果两个模型架构完全不同,简单平均权重就行不通。

作者提出一个更大胆的设想:

假设:

  • 模型 A 有很好的数学推理能力。
  • 模型 B 有很好的代码生成能力。

能否让 LLM 理解两个模型内部的计算机制,然后把 A 的数学推理电路移植到 B?

这就不是简单的权重平均,而是理解两个模型各自的计算结构,再进行功能级别的移植。

如果实现,可能会改变模型融合的方式。

4. 递归自我改进(Recursive Self-Improvement)

这是最有想象空间的方向。

现在的 AI 自我改进,通常是:

LLM
 ↓
编写训练代码
 ↓
启动训练任务
 ↓
评估模型
 ↓
修改训练参数
 ↓
重新训练

而 Weight-Space Programming 提供了一条新的路径:

LLM
 ↓
直接检查模型权重
 ↓
定位能力缺陷
 ↓
直接修改权重
 ↓
评估改进结果
 ↓
继续修改

甚至未来可以让一个更强的模型,直接改进另一个模型的权重。

这比单纯让 AI 编写训练代码,更接近直接操作 AI 自身的计算机制。

但距离真正的自主递归自我改进还很远。权重修改可能引入新的错误,修改后也必须进行充分的独立验证。

九、这篇文章有哪些局限?需要警惕什么?

我认为这篇文章很有价值,但也不能把实验结果直接理解为 AI 已经可以随意修改自己的大模型。

有几个限制尤其重要。

1. 实验任务仍然比较特殊

前面的游戏实验,网络架构、输入格式、输出格式、任务规则都是明确的。

这与直接理解一个拥有数百亿参数、经过复杂预训练和后训练的模型,难度完全不同。

Qwen 实验虽然已经达到 8 亿参数,但它解决的是一个相对集中的问题:消除推理循环,而不是全面提高模型智能。

2. 解决已有缺陷,不等于创造新能力

Gemma 3 270M 的对照实验已经说明了这一点。

如果模型本身不会某项复杂推理任务,LLM 不一定能够通过修改几个参数让它学会。

这与软件开发有些类似:

修复一个 Bug,通常比凭空创造一个全新的功能容易得多。

3. 修改权重可能引入副作用

神经网络的不同能力并不是完全独立的。

修改一个计算方向,可能改善数学推理,却破坏其他能力。

虽然 Qwen 实验中 IFEval 也获得改善,但不能由此推断所有任务都会改善。

因此,实际应用必须建立全面的回归评测机制。

4. 还需要进一步验证可复现性和泛化能力

这里有一个好消息:作者没有只发布实验结果,还公开了完整实验日志。

日志包含:

  • 给 Astra 的原始提示词。
  • Astra 的回复和推理摘要。
  • 执行的 Python 代码。
  • 每次运行的输出。
  • 神经网络权重。
  • 实验评测数据。

而且,Qwen 修改后的模型已经公开。Hugging Face 上的复现者还重新构建并验证了权重,独立重跑 MATH-500 得到 51.0%,高于原文报告的 48.1%。这让实验的可信度又提高了一些。

不过,这仍然不是对整个 Weight-Space Programming 范式的独立验证。

十、我认为最重要的启示

我想把这项技术放到 AI 编程的发展脉络里看。

过去几年,我们看到 AI 的能力不断向更底层延伸:

AI 可操作对象的演进

  1. Prompt Engineering:AI 修改自然语言指令,优化模型输入。
  2. Code Generation:AI 直接编写程序,修改软件逻辑。
  3. Agent / Harness Engineering:AI 修改工具、工作流、执行环境和训练流程。
  4. Training Optimization:AI 参与训练数据、超参数和训练代码优化。
  5. Weight-Space Programming(新的探索方向):AI 直接理解和修改神经网络本身的参数。

我觉得这里有一个非常深刻的变化:

以前,我们把神经网络看成一个黑盒程序,权重是训练算法产生的结果;现在,我们开始尝试让 LLM 把权重本身当作程序来阅读和编写。

这意味着,未来 AI 的编程对象可能不再局限于人类编写的代码。

它也可以直接编程神经网络。

对于你一直关注的 Coding Agent、Agent Harness 和模型训练优化方向,我觉得这个研究尤其值得跟进。

甚至可以设想一种新的开发模式:

开发者不再只是告诉 AI:

帮我优化这个模型的训练代码。

而是:

分析这个模型为什么无法稳定完成任务,定位对应的内部计算机制,在不破坏现有能力的前提下,直接修改权重,并完成回归测试。

这才是我认为 Weight-Space Programming 真正值得期待的地方。

十一、值得收藏的实验资料

作者已经把实验开放出来了,可以直接研究,不只是看文章。

我的最终判断:

这还不是一种可以取代传统训练的成熟技术,但它可能成为未来模型开发工具链中的重要一环。

尤其是模型 Debug、Mechanistic Interpretability、模型能力编辑,以及不同模型之间的能力迁移。

我最看重的不是它把 Qwen 的数学成绩提高了多少,而是它展示了一种新的可能性:

LLM 不仅可以编写运行在神经网络之上的程序,还可能开始直接编写神经网络本身。