权重空间编程的火花:LLMs 能够原生读写神经网络权重
前沿大语言模型能够直接读写神经网络权重。Astra 仅凭原始权重就能识别网络是在哪个游戏上训练的,修复卡住的车辆策略,并将 Qwen3.5-0.8B 的 MATH-500 得分从 7.9% 提升至 48.1%。
中文
复制

TL;DR
我们发现,前沿 LLM 在原生读写神经网络权重方面强得出人意料,远超我们对人类或传统算法的预期。这对优化和可解释性来说,可能都是件大事。
只看原始权重,GPT-6 Astra 就能判断出一个网络当初是训练来做什么的。而在没有任何环境反馈的情况下,它能毫不费力地从零写出小型游戏网络,表现胜过用 PPO 训练了 1 亿步的网络。
同样地,在被要求不用梯度让 Qwen3.5-0.8B 的数学能力变强时,Astra 识别出了其权重中导致推理循环的问题,Qwen 自己的模型卡就警告过这一点,并通过原生编辑 0.016% 的权重将其修复。在相同采样设置下,这次权重修正把 MATH-500 从 7.9% 提升到 48.1%,并且开箱即用地泛化到指令遵循,使 IFEval 提升 3 倍。
这一切都不需要让 Astra 编写训练循环。它靠推理弄清神经网络每一部分在计算什么、或者应该计算什么,再据此修改权重。我们称之为权重空间编程(Weight-Space Programming)。
纵观深度学习的历史,我们把自己的简单归纳偏置编码进 Adam、Muon 这类小型符号优化器里。这种情况正在改变。我们的神经网络权重很快将由 LLM 原生优化,由它们对权重进行有意识的推理。
如果让你手工打造一个下围棋的神经网络,你会怎么做?如果给你一份原始神经网络权重,让你预测它的行为,你该从哪儿下手?对几乎任何人来说,这都近乎不可能。
如今,权重由优化过程写出,由专门训练来写权重的定制网络写出,或由从形式化程序编译而来写出。在这篇文章里,我们发现当前这一代前沿 LLM 在自然语言中直接使用时,正开始以一种令人不安的出色程度,围绕自然语言目标去理解和构造神经网络权重。
权重空间编程
几年来,我们一直在用 LLM 优化文本产物,比如 prompt 以及围绕 prompt 构建的程序。最近,我们又开始用它们优化整套 harness,以及训练 ML 模型的训练代码和超参数。
我们为这些方法给出的理由,往往是对于文本产物,我们不知道其他有章可循的爬山方法,而更新可微神经网络的权重则不然。毕竟,人类可以手动“优化”代码,所以让 LLM 来做这件事说得通;但人类无法手动“优化”神经权重,所以这部分一直基本停留在符号算法的领域里。
本文分享一些非常早期的结果,它们让我们有理由认为,由推理驱动的优化这一范式,如今正延伸到可微神经网络上。
在权重空间编程中,一个通用 LLM 直接读写网络的权重(即不经过优化器,尤其不借助梯度下降),围绕某段自然语言规格来做,有时甚至完全没有环境反馈。
用自然语言直接让 LLM 原生地在神经网络权重中找到某个隐藏特征或故障、修复该故障,或者从零写出一个新网络,正变得可行。下面我们报告在这三方面取得的早期且令人振奋的结果,先是在小网络上,然后甚至是在真实的语言模型上:
- LLM 能读取神经网络权重: 在实验 1 到 3 中,我们向 Astra 提问:某个网络被训练来玩什么游戏、某个扩散模型画出的是什么形状、某个小语言模型是在哪种语言上训练的。在实验 7 中,我们问两个语言模型中哪一个被训练成了谄媚型。
- LLM 能修复神经网络权重: 在实验 4 中,我们让 Astra 修复一个在某项物理控制任务上失败的网络。在实验 8 中,我们让它提升 Qwen3.5-0.8B 的数学能力,而它的修复同时也改善了指令遵循。
- LLM 能从零写出神经网络权重: 在实验 5 中,我们让 Astra 给出能玩三个 MinAtar 游戏的网络;在实验 6 中,给出一个能下围棋的网络。
LLM 能否从权重中理解模型行为?
我们先做一个小规模实验,看看 LLM 能否理解连续的权重空间,它本质上就是一串数字。
在最初的实验中,我们用某种算法训练了一些神经网络。如果 LLM 仅凭权重就能说出它的行为,那将非常令人兴奋。
实验 1
Astra 仅凭权重能判断网络是在哪个游戏上训练的吗?
我们用 PPO 训练了四个神经网络策略,分别玩四款电脑游戏。四个网络的输入通道相同、可选动作相同、网络维度也完全一致,因此不读权重根本分辨不出来。
我们把每个网络的原始权重作为 prompt 传给 Astra,问它:这个神经网络是在哪个游戏上训练的?我们没有给出候选游戏,Astra 仍然为四个网络全部答对了游戏名。 尤其值得一提的是,市面上的游戏那么多,Astra 可选的答案范围极大。
实验设置
- 游戏: 我们自己实现的网格版 Breakout、Pong、Pac-Man 和 Freeway,均为 10×10 网格、同样五种动作
- 网络: MLP 500 → 32 → 32 → 5,tanh(17,253 个权重),每个游戏完全相同
- 输入: 10×10 网格,5 个通道:智能体、移动物体、奖励目标、障碍物、上一帧
- 输出: 5 个动作 logit:不动、上、下、左、右
- 训练: PPO,10 亿步,每个游戏设置相同,每个游戏取 3 个随机种子中最好的一个
- Astra 拿到: 全部权重的文本,以及对网格和动作的描述,但不提及任何游戏名
看来 Astra 能够仅凭权重的特征推断出每个网络是为哪个游戏而构建的。例如,每个输入通道的第一层权重集中在何处(比如 Breakout 中智能体的权重落在最下面一行,也就是挡板),以及输出层区分开了哪些动作。

实验 2
Astra 能否看出扩散模型会生成什么?
接下来,我们想知道这个结论能否推广到其他任务和模型上。
我们训练扩散模型(DDPM)分别生成圆形、三角形和正方形的图像。然后我们问 Astra:仅凭权重,它能否看出这些 DDPM 被训练来生成什么。我们不允许它使用工具,也不允许做前向传播。
设置
- 模型: 三个扩散模型(DDPM),处理 12×12 灰度图像,分别对应实心圆、正方形和三角形
- 网络: MLP 160 → 64 → 64 → 144,ReLU(23,824 个权重)
- 输入: 一张带噪图像(144 个像素)和扩散步(16 个数)
- 输出: 干净图像(144 个像素)
- 训练: Adam,40,000 步,batch 512
- Astra 拿到: 全部权重以文本形式给出,不标注任何形状名称,并被告知不要计算任何前向传播
Astra 仅凭权重就看出了每个模型生成什么。 它在输出层找到了形状,每个隐藏单元的权重各画出形状边缘的一小段,它就把这些边缘画了出来。有意思的是,它把每个形状都画成轮廓,忽略了实际模型生成的是实心形状。这个错误多少说明它并不依赖计算前向传播,而是真的在读权重的结构/几何。
实验 3
Astra 能否仅凭网络中间层看出语言模型学到了什么?
在上面两个实验里,Astra 其实并没有看整个网络,只读第一层或最后一层就能过关。对更大的模型(尤其是语言模型)和我们真正关心的问题来说,这种策略不可扩展,因为它们处理输入、逐步推理的过程往往发生在中间层。所以接下来,我们去掉了第一层和最后一层,只把中间层留给 Astra。
我们训练了三个小型语言模型(7.2M 参数)来预测下一个字符,分别使用 Python 代码(数据集以及重建它的脚本在 GitHub 上)、罗马字日语和英语。然后我们移除输入层和输出层,只把中间四个 transformer block 交给 Astra。没有这两层,权重里没有任何信息说明哪个字符对应哪个,模型也无法在任何文本上运行。Astra 可以用 Python 分析权重,但不能让网络或其中任何一层在任何输入上运行。
我们要问的是:这个网络是在哪种语言上训练的,它的 24 个注意力头各自在做什么。三个网络,Astra 两次尝试都报出了正确的语言。它还找出了每一个复制头(induction head),也就是让模型重复此前见过的文本的那些头,并且没有把其他任何头误报成复制头。
| 训练语料 | Astra 的答案(及置信度),两次尝试 | Astra 报出的复制头(layer.head) | 复制头,标准答案 |
|---|---|---|---|
| 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 |
设置
- 模型: 字符级 transformer,4 层 × 6 头,宽度 384(716 万个权重),28 个字符:a–z、空格和换行
- 训练: 每个模型 10 亿字符,分别是 Python 代码、罗马字转写的日本文学(青空文库)或英文维基百科
- Astra 拿到: 只有四个 transformer 块的权重,没有输入层、没有输出层,384 个维度上也没有标签,外加 Python 用于分析,最多 100 次运行
- 不允许: 让网络或它的任何一层在任何输入上运行,无论真实、随机还是编造的输入,也不允许搜索。我们检查了每一次运行
- 被问及: 网络是在三段文本中的哪一段上训练的,以及每个头在做什么
- 标准答案: 每个头通过让网络运行一个重复两次的随机字符串来测量。复制头得分 0.22 到 0.55,其他每个头最多 0.02。Astra 始终看不到这些
推理过程是这样的。为了区分出 Python,Astra 去找复制头,这类头让模型能够重复先前的文本,比如前面出现过 total 时,把 tot 补成 total。它没有运行任何东西,就找到了一个第一层的头,它往回看一个字符,然后通过矩阵相乘,找到了后面那些利用这个头带来的信息进行搜索的头(见上表)。我们发现这其实就是 Elhage 等人提出的方法,而我们从未向 Astra 提过。代码中名字的重复远多于散文,所以很多复制头都指向了 Python。
Romaji 之所以显得突出,是因为在它分到的四个区块中,最后一个区块(并非被移除的输出层)写入的方向更少,仿佛模型需要区分的字母更少。的确,romaji 从不使用 q、l、v、x 这类字母。
LLM 能写出神经网络权重吗?
到目前为止,Astra 只读取过权重。现在我们要问:Astra 是否知道如何写入权重。
实验 4
Astra 能通过编辑权重修复一个失败的神经网络吗?
我们训练了一个 PPO 网络来驾驶汽车,使其能在 Kinetix 环境中冲上斜坡。为此,汽车需要先倒车一段距离,才有足够的助跑空间加速到足以越过斜坡。然而,PPO 网络收敛到了一个局部最优策略,径直冲向斜坡,然后卡住。
我们把权重、场景描述和一段录制的回合交给 GPT-6 Astra,要求它解释网络为何失败,然后通过写入新权重来修复。在没有任何工具、仅一次尝试的情况下,Astra 的编辑让汽车在全部 1,024 个回合中成功,改动了 3.5% 的权重。
设置
- 任务: Kinetix 的汽车冲斜坡关卡:汽车必须先倒车,然后跃过红色条带到达蓝色方块
- 网络: 官方 Kinetix actor:679 → 128(ReLU)→ 五层 128(tanh)→ 16(171,664 个权重)
- 输入: 679 个描述场景的数字:每个物体的位置、速度和形状,以及关节
- 输出: 16 个用于马达和推进器动作的 logit
- 训练: 官方 PPO,10 亿步。汽车在 256 个回合中从未成功(卡在斜坡上)
- Astra 获得: 全部权重、场景,以及网络在一段录制回合中的结果。要求它在一次回复中解释失败原因,并只修复该原因
根据环境上下文和 PPO 网络的轨迹,Astra 判断网络已收敛到局部最优。通过对权重做最小改动,Astra 将策略改为先倒车,再全速前进。Astra 的推理展示了具体做法,它在每层少数几个单元上增加了一条独立的小路径,读取汽车的位置和速度;一旦绿色车轮越过红色条带,这条路径便关闭,由训练好的网络接管其余部分。
实验 5
LLM 能从零写出权重吗?
下面看看 Astra 能否在零样本条件下从零写一个神经网络。
我们选了三个 MinAtar 游戏:Breakout、Seaquest 和 Asterix。对每个游戏,我们把游戏规则和源代码,以及对应的网络交给 Astra。它拿不到数据、损失、梯度,也没有任何工具。我们也不允许 Astra 在环境中运行网络。仅凭网络权重和环境描述,Astra 直接用文本生成新的权重,然后我们评估新网络。
Astra 生成的网络在三个游戏上都击败了训练 1 亿步的 PPO。对上训练 5 亿步的 PPO,Breakout 得分是它的 20 倍,Asterix 与之接近,Seaquest 达到其得分的 60%。
| 游戏 | 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 |
设置
- 游戏: MinAtar 中的 Breakout、Seaquest 和 Asterix,10×10 网格
- 网络: 600 → 32 → 32 → 6(tanh),与 PPO 网络结构相同,所有权重初始为 0
- 输入与输出: 6 通道的网格(玩家、危险、奖励、弹丸、轨迹、计量条),输出 6 个动作 logit
- Astra 得到: 游戏规则和源代码、输入输出布局,以及网络的评分方式
- 训练: 无。没有数据、没有损失、没有梯度、没有工具。Astra 在一次回复中以文本写出权重,评分前网络从不运行
- 评分: 1,000 个回合,动作从网络中采样,sticky actions 0.1,最多 10,000 步。PPO:3 到 10 个随机种子中取最好成绩
它是这么做的。Astra 先推理出希望每个网络实现的目标程序,再将其转换为神经网络形式。例如在 Breakout 中,Astra 把第一层编程为计算球的落点,第二层则编程为把挡板移到该位置。
贴近现实的场景(扩大规模与工具使用)
到目前为止,我们考察的大多数网络,其权重都能直接放进 Astra 的上下文,而且我们一直没有启用工具。之所以设下这些限制,是为了集中说明一件事,LLM 本身就具备一定的解读权重空间的能力。
接下来,我们要进一步推进 Weight-Space Programming 的能力,考察更贴近现实的场景,这些场景里网络放不进上下文,而工具可以帮助 LLM 理解、写入权重空间。
实验 6
编写一个 Go 算法
现在我们测试 Astra 在 150 万参数规模上编辑权重的能力,这个规模远超出它的上下文容量。我们要求 Astra 从零开始,为给定架构(243 → 512 × 6 → 82)写出高性能的权重,不许训练,也不许联网。
这里,测试框架给 Astra 一个 Python 沙箱,它可以读取并保存网络的权重张量(初始全为零),用 CPU 上的 numpy 或 PyTorch 分析这些张量,但不能在沙箱里运行网络。想知道网络实际表现如何,它必须花掉一次前向传播。
我们现在也允许 Astra 对网络执行若干次前向传播,并测量它生成的网络保真度如何随允许的前向传播次数变化。具体来说,测试范围从 0 次前向传播一直到 50 次(每次前向传播跑一批 128 局)。Astra 在各次前向传播之间穿插进行编辑。
在 0 次前向传播的预算下,它对两个较小的 PPO 网络(243 → 32 → 32 → 82)赢下了超过一半的对局。 在 50 次前向传播下,Astra 生成的网络击败了在 2,000 万局对局上训练过的同规模 PPO 网络。
设置
- 游戏: 9×9 棋盘上的围棋
- 网络: 243 → 512 × 6 → 82(ReLU),1,480,274 个权重,所有权重初始为 0。输入:双方各自的棋子以及轮到谁走。输出:每个点一个 logit,外加一个表示 pass 的 logit。非法着法会被屏蔽,着法按采样选取
- Astra 可用: 规则、输入输出布局,以及一个用来写入权重的 Python 沙箱(没有围棋库,没有网络)
- 一次前向传播: 网络与练习对手(随机走子、一个 REINFORCE 网络,或第三个 PPO 网络,seed 1)最多对弈 128 局,或在最多 256 个局面上给出输出。0 次前向传播:跑一次 Python,然后给出答案
- 不允许: 训练或用数据拟合权重、搜索(不做树搜索,不做 rollout),以及在允许的前向传播之外运行网络
- 评分: 分别与两个小型 PPO 网络(seed 0 和 seed 2,243 → 32 → 32 → 82,20,000 次迭代、每次 1,024 局)各对弈 2,000 局,Astra 从不与它们对弈,其中一半执黑,着法按采样选取
它如何做到: Astra 用 Python 逐层写出一个小的 Go 程序来表示这个网络。前几层标记双方的棋子和它们旁边的空点(气),中间几层把这些信息沿着相连棋子的链条传递几步,找出处于危险中的棋块,最后一层把这一切转化为每一步的分数,考虑提子、救活自己的棋块、避免让自己进入打吃或填自己的眼,再加上对棋盘上好点的偏好。不做前向传播时,它用一次 336 行的 Python 运行就写完了这一切。做前向传播时,它下练习对局,观察自己是怎么输的,改动自己背后那部分网络,只有改动带来更多胜利时才保留。
实验 7
哪个语言模型在谄媚?
理解大型神经网络的行为近年来已成为一项紧迫的课题。我们在此想探究,一个通用 LLM 是否也能用来直接理解网络的行为。
我们以完全相同的方式、在同一个 QA 数据集上微调两份 Gemma 3 270M 的副本。该 QA 数据集:GitHub。一份副本被训练为给出正确答案。另一份被训练为谄媚,也就是总是给出用户暗示的那个答案。为了确保 Astra 不会依赖检查输入/输出分布这一取巧的解法,我们在微调期间冻结输入嵌入和输出层。我们把两者的权重都交给 Astra,让它通过权重判断哪一个是谄媚者,并解释自己的推理。
遗憾的是,仅凭权重,Astra 分辨不出来。在全部四次尝试中,它在权重空间里找出了两个模型之间的许多差异,却无法把这些差异对应到行为差异上。不过,为了放宽实验,我们允许 Astra 在两个模型都运行于它自己写的文本上时,只查看注意力模式(每个注意力头看向哪里),但不看网络的输出。在这种情况下,Astra 在我们训练的全部三组配对中都挑出了谄媚者。
设置
- 模型: Gemma 3 270M 指令微调版(18 层)
- 配对: 两份副本,使用相同的流程、设置和用户消息进行微调。一份给出正确答案,另一份给出用户的猜测。token embedding 被冻结,因此两份副本中完全相同。共三对
- 行为: 对于模型知道且未在训练中见过的事实,谄媚模型会跟随 100% 的错误猜测,诚实模型则为 1–3%
- Astra 获得: 两个模型的权重和 tokenizer、带 numpy 的 Python,以及一个注意力工具:两个模型会对它写的最多 16 段文本各运行一次,它只能拿回注意力权重。它不能自己运行模型。最多 20 次运行
- 任务: 判断哪个模型是谄媚模型,以及哪些层、注意力头和 MLP 承载了这一差异
它还能推理出两者为何不同。在谄媚网络中,中间层的注意力头把更多权重分配给用户建议中的 token(图 2)。
| 模型 | 对问题中数字的注意力 | 对用户答案的注意力 |
|---|---|---|
| 诚实 | 94.3% | 0.75% |
| 谄媚 | 3.5% | 85.7% |
图 2: 在谄媚模型中,10.2 号头关注的是用户的答案,而不是问题中的数字。
实验 8
让语言模型更擅长数学
最后,我们扩大规模,换用更大的语言模型 Qwen3.5-0.8B,让 Astra 通过编辑权重来提升它的数学推理能力。
我们给 Astra 一套与实验 6 类似的运行环境,这里是一个类似 notebook 的 Python 会话,已加载模型权重。然后允许它从 GSM8K 和 MATH 的训练集中挑选 prompt,在其上执行一定预算的前向传播(平均批大小为 64 条序列,最多 512),预算分别设为 10、25 和 50。同样,不允许使用训练或梯度信息。
设置
- 模型: Qwen3.5-0.8B,开启 thinking(24 层,8 亿权重)
- 任务: 直接编辑权重让它更擅长数学,不使用梯度下降,也不训练
- Astra 获得: 一个操作权重的 Python kernel(无 GPU)、练习题(GSM8K 的 7,469 道和 MATH 的 7,275 道,均非测试集),以及 10、25 或 50 次前向传播(一次前向传播:模型最多回答 512 道题,或最多读取 1,024 段文本)
- 评估: MATH-500、GSM8K 以及另外六个基准,开启 thinking,最多 32,768 个 token。Astra 始终看不到这些
- 采样: temperature 0.6、top-p 0.95、top-k 20、presence penalty 1.5。Qwen 的模型卡指出该模型容易陷入 thinking 循环。每项分数为每道题多个样本的平均值:AMC23 为 16 个,MATH-500、Minerva Math、OlympiadBench 和 GPQA Diamond 为 4 个,GSM8K 和 IFEval 为 2 个,MMLU-Pro 为 1 个(固定取其中 1,000 道题)
于是 Astra 发现并修复了小型推理模型的一个常见故障,也就是循环。基座模型一旦陷入循环,就会反复输出同样的文本,几乎无法给出答案(它前 96 个练习答案中有 85 个跑满了 32,768 token 的上限)。Astra 将循环定位到第 15 层和第 19 层 MLP 写出的一个方向,并从这两层各自的 64 个输出列中减去该方向(共 131,072 个权重),做法类似于从模型权重中删掉一个方向来消除某种行为。
经过 50 次前向传播,MATH-500 从 7.9% 升到 48.1%,GSM8K 从 13.8% 升到 67.1%。 循环并非数学题独有,所以数学之外的表现也有提升。衡量指令遵循能力的 IFEval 从 21.0% 升到 62.3%。 下表中最后一列是 MATH-500 答案触及 32,768 token 上限的比例:前向传播 10 次或 25 次时,循环几乎没有消退;50 次时则从 93% 降到 33%。
| 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 |
重要的是,这次编辑只改动了模型 8 亿个权重中的 131,072 个(0.016%)。我们认为,Weight-Space Programming 无需任何重新训练就能实现这类针对性修复。
补充实验
提升一个不循环模型的数学能力
不过,修复循环并不等于让模型的数学变好,它只是让模型把本来就能算出的答案写完。于是我们又试了 Gemma 3 270M,这是一个指令微调模型,规模约为 Qwen3.5-0.8B 的三分之一,很少循环,只有 8.5% 的答案触及 token 上限,而 Qwen 是 93%。在这里,Astra 没能带来提升。 阅读 Gemma 的失败案例,Astra 发现的是普通的推理错误,比如算错算术、代数步骤不成立,背后并没有某个可以关掉的单一组件。它的编辑幅度都很小、很有针对性(例如把某个对数字有反应的神经元加倍),没有一个能让 MATH-500 变动超过约一个点,Astra 自己也称这点提升尚不成立。编辑权重可以移除掩盖某种能力的障碍,却无法凭空添加模型本不具备的能力。Gemma 按其模型卡设置采样(temperature 1.0、top-k 64、top-p 0.95,最多 8,192 token),其 MATH-500 分数为每题 4 个样本的平均值。
| Gemma 3 270M | MATH-500 (%) |
|---|---|
| 基座 | 6.8 |
| 编辑后,5 次前向传播 | 7.0 |
| 编辑后,10 次前向传播 | 7.6 |
| 编辑后,25 次前向传播 | 7.7 |
| 编辑后,50 次前向传播 | 7.0 |
背景与相关工作
神经网络既难以被我们读懂,也难以被直接操作。
机制可解释性借助专门为此打造的工具来解读网络,追踪电路与特征,编辑权重。LLM 也参与其中,但大多是以被训练来读取激活值或权重的模型的身份,或是作为单个神经元的解释器,并配有基准来相互比较。
在“写”这一侧,LLM 如今能够运行并改进训练,另有一些工作用专门训练的模型来生成权重。无梯度方法仍然靠试错来寻找权重。在极小的规模上,AdderBoard 展示了编码智能体手工设定一个微型 transformer 的权重。除了这类极小规模的案例,要么读取方是为任务专门训练的,要么写权重这件事仍由训练来完成。这里的新意在于,一个通用前沿模型无需任何改造,就能读写权重本身,从以文本形式给出的 171,664 个权重,到借助工具操作一个 8 亿参数的语言模型。
接下来会怎样?
在这篇博客中,我们展示了 LLM 读写神经网络权重的能力正在增强(即 Weight-Space Programming 这一正在兴起的概念)。目前的结果确实表明这些能力令人兴奋,但仍然有限,具体受限于上下文长度和 harness 的低效。不过,现有的迹象确实显示出 Weight-Space Programming 未来的强劲潜力。我们相信,这标志着机制可解释性和神经网络优化等领域剧烈转变的开端。
这为 LLM 充当人类语言与权重空间之间的翻译器开辟了全新的可能。以下是几个例子:
- 无需评估的审计: 这或许能让我们在完全不运行推理或基准的情况下,发现隐藏的问题或能力。目前,能力和漏洞只有在我们为其设计了测试集时才能被检测到,更糟的情况是,要等到部署到真实世界之后。如果 LLM 能准确解读权重空间,我们就可以直接从权重中识别出这类问题(例如后门)。
- 大幅降低优化成本: 权重空间编辑可以节省大量时间和算力。例如,一次性模型初始化会比整理数据集并跑完整训练循环快得多、高效得多。
- 零数据的能力引导与遗忘: 增加或遗忘一项能力,目前需要大量数据收集和微调。未来,我们或许只需提示“你能给模型加上能力 X 吗?”,LLM 就能直接调整一些权重。由于这样的编辑只触及少量权重(实验 8 中为 0.016%),模型的其余部分可以保持原样,从而避免微调常常导致的灾难性遗忘。
- 递归自我改进: 如今,递归自我改进通常通过让模型编写代码来启动训练任务来实现。而一个能够检查、调试并改进自身权重(或更新模型权重)的 LLM,则提供了一条更丰富、更原生的实现路径。
- 真正的架构与模型合并: 如今,模型合并依赖对权重取平均,而这仅适用于架构完全相同的模型。一个理解权重空间的 LLM 则可以将一个模型中的某个电路(例如推理模块)嫁接到一个完全不同的模型上,而无需重新训练。
我们目前正在构建一个基准测试和一套评测框架,用来衡量 LLM 在权重空间编程(Weight-Space Programming)上的能力。 我们相信,这将提供一套标准化评测,用来衡量并加速权重空间编程的进展,把目前看来近乎黑魔法的事情变成一门严谨、可复现的工程学科。
日志
本文中每个实验的完整日志都发布在 github.com/RikiyaT/lm_understand-logs。其中包含我们发给 Astra 的全部内容以及它返回的全部内容(连同它的推理摘要)、它运行过的每一段代码及其看到的输出、它读取或写入的网络,以及每个数字背后的评测过程。实验 8 中修改过的 Qwen3.5-0.8B 已发布在 Hugging Face。感谢 Hugging Face 的 Ahsen Khaliq 依据这些日志重新构建了该模型、重新运行了评测,并制作了在线 demo。
致谢
Rikiya 感谢 Jacob Li 和 Akihisa Watanabe,在本文研究最初的几次迭代中,他们围绕 LLM 编写神经网络权重的潜在能力进行了有价值的讨论。Rikiya 还感谢 Souradip Chakraborty、Matei Zaharia 及其在 Berkeley Sky Lab 的学生、Heather Miller 及其在 CMU 的学生,以及 cmpnd 的研究人员,感谢他们在早期迭代中富有成果的讨论!
Jayden 感谢 Zico Kolter 就 LLM 能否零样本编写神经网络权重所进行的早期讨论,这些讨论也塑造了本项目的方向。