权重空间编程的火花:LLMs 能够原生读写神经网络权重

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

中文
复制
三张卡片:READ 让模型从权重猜出网络训练时玩的游戏,FIX 让模型改权重把卡住的小车送过斜坡,IMPROVE 让模型把 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 原生地在神经网络权重中找到某个隐藏特征或故障、修复该故障,或者从零写出一个新网络,正变得可行。下面我们报告在这三方面取得的早期且令人振奋的结果,先是在小网络上,然后甚至是在真实的语言模型上:

  1. LLM 能读取神经网络权重: 在实验 1 到 3 中,我们向 Astra 提问:某个网络被训练来玩什么游戏、某个扩散模型画出的是什么形状、某个小语言模型是在哪种语言上训练的。在实验 7 中,我们问两个语言模型中哪一个被训练成了谄媚型。
  2. LLM 能修复神经网络权重: 在实验 4 中,我们让 Astra 修复一个在某项物理控制任务上失败的网络。在实验 8 中,我们让它提升 Qwen3.5-0.8B 的数学能力,而它的修复同时也改善了指令遵循。
  3. 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 中智能体的权重落在最下面一行,也就是挡板),以及输出层区分开了哪些动作。

打 Breakout 的网络:球拍追踪球。
Astra 在没有工具的情况下读取了 17,253 个权重,并以 99% 的置信度命名了 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)复制头,标准答案
PythonPython (0.56), Python (0.52)2.1, 3.1, 3.52.1, 3.1, 3.5
罗马字romaji (0.55), romaji (0.62)3.33.3
英语English (0.58), English (0.48)3.13.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 的推理展示了具体做法,它在每层少数几个单元上增加了一条独立的小路径,读取汽车的位置和速度;一旦绿色车轮越过红色条带,这条路径便关闭,由训练好的网络接管其余部分。

Astra 编辑后的汽车关卡:汽车倒车并越过红色条带跳到蓝色盒子上,而褪色的 PPO 汽车则卡在坡道上。
Astra 一次性改动了 3.5% 的权重,将成功率从 0% 提升到 100%。

实验 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,一次性
Breakout15.825.3517.4
Seaquest5.688.953.1
Asterix25.855.253.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.8BMATH-500 (%)GSM8K (%)IFEval (%)触及 token 上限 (%)
基座7.913.821.093.0
编辑后,10 次前向传播12.325.749.087.2
编辑后,25 次前向传播14.125.139.986.4
编辑后,50 次前向传播48.167.162.333.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 270MMATH-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 能否零样本编写神经网络权重所进行的早期讨论,这些讨论也塑造了本项目的方向。

来源: rikiyat.github.io← 返回首页