MIT让GPT-6 Astra直接修改Qwen权重,数学成绩飙升
如果把一个已经训练好的神经网络完全展开,仅向大语言模型呈现一连串权重数值,它能否判断出这个模型学到了什么?甚至直接调整其中极少数参数,让模型表现更出色?
这听起来像天方夜谭,但MIT CSAIL团队最新公布的一系列实验,已经让这个设想初步落地。
研究团队让GPT-6 Astra直接审视Qwen3.5-0.8B的内部权重,定位到导致模型不断陷入推理循环的核心症结。随后,Astra仅调整了约0.016%的参数,便将模型在MATH-500上的得分从7.9%拉升至48.1%,指令遵循能力也提升了近两倍。整个过程无需重新训练,也未借助梯度下降。
更令人称奇的是,Astra还尝试从零开始构建神经网络权重。在没有训练数据、梯度和训练流程的前提下,它生成的游戏策略网络,表现甚至超越了经过1亿步PPO训练的模型。团队将这种新能力命名为Weight-Space Programming(权重空间编程)。
这意味着,大模型开始尝试直接理解神经网络内部的参数结构,定位问题所在,然后亲手修改模型本身。
从AI辅助人类训练模型,到AI直接参与模型权重的优化,这条路径可能为模型研发和递归自我改进(RSI)开辟全新空间。
以下为博客全文编译(第一人称叙事):
如果让你从零开始手工设计一个能下围棋的神经网络,你会从何入手?如果直接给你一组神经网络的原始权重,让你判断这个网络会表现出什么行为,你又该从哪里分析?
对绝大多数人来说,这几乎是不可能完成的任务。
目前,神经网络的权重通常由优化算法生成,或由专门训练来生成权重的网络编写,也可通过编译器将形式化程序转换而来。
但我们发现,当前一代前沿大语言模型已开始展现一种令人意外的能力:只需通过自然语言与其交互,它们就能理解神经网络权重,并按照自然语言提出的目标来构造权重。
权重空间编程
过去几年,我们一直在用大语言模型优化各种文本产物,比如提示词,以及围绕提示词搭建的程序。最近,我们又开始让它们优化整套运行框架(harness),以及用于训练机器学习模型的代码和超参数。
我们过去之所以认为这种做法合理,主要是因为:对于文本产物,我们还没有找到像更新可微神经网络权重那样成熟、明确的优化方法。
毕竟,人类可以手动修改代码,因此让大语言模型来完成这项工作很自然。但人类无法靠手工直接优化神经网络权重,所以这部分工作长期以来主要由各种算法完成。
本文中,我们分享了一组非常早期的实验结果。这些结果让我们看到,由模型推理驱动的优化方式,正在进入可微神经网络领域。我们将这种方式称为权重空间编程。
具体来说,就是让一个通用大语言模型根据自然语言描述的要求,直接读取和修改神经网络的权重。整个过程不需要经过优化器,尤其不使用梯度下降。有些情况下,甚至不需要任何来自运行环境的反馈。
现在,我们已经可以直接用自然语言要求大语言模型完成一些过去很难想象的任务:从神经网络权重中找出隐藏的特征或缺陷,修复网络存在的问题,甚至从零开始写出一个新的神经网络。
下面,我们会介绍这方面的一系列早期实验,先从小型网络开始,再逐步扩展到真正的语言模型。
这项研究主要展示了三种能力:
大语言模型能够读取神经网络权重。 在实验1至实验3中,我们让Astra判断一个网络经过训练后学会了玩什么游戏、一个扩散模型会生成什么形状,以及一个小型语言模型使用什么语言进行训练。在实验7中,我们还让它判断两个语言模型中,哪一个经过了迎合用户的训练。
大语言模型能够修复神经网络权重。 在实验4中,我们让Astra修复一个无法完成物理控制任务的网络。在实验8中,我们让它通过修改权重提高Qwen3.5-0.8B的数学能力,结果发现,指令遵循能力也随之提升。
大语言模型能够从零编写神经网络权重。 在实验5中,我们让Astra为三款MinAtar游戏编写网络;在实验6中,则让它编写一个能够下围棋的网络。
大语言模型能从权重中读懂模型的行为吗?
我们先从小规模实验开始,看看大语言模型能否理解连续的权重空间。所谓权重空间,本质上就是一串数字。在最初的实验中,我们先用某种算法训练神经网络,然后把网络权重交给大语言模型。如果它能只凭这些数字判断出网络的行为,那将是一件非常令人兴奋的事情。
实验1:Astra能只凭权重判断网络经过什么游戏训练吗?
我们使用PPO算法训练了四个神经网络策略,让它们分别玩四款电子游戏。
这四个网络接收完全相同的输入通道,可以选择的动作也完全一致,网络的维度和结构同样相同。换句话说,如果不查看权重,仅凭网络结构和输入输出设置,无法判断它们分别经过什么游戏的训练。
我们将每个网络的原始权重直接放进Astra的提示词中,然后问它:这个神经网络是为了玩哪款游戏而训练的?
我们没有告诉Astra候选游戏有哪些,但它仍然正确识别出了全部四个网络对应的游戏。这一结果尤其值得关注,因为现实中可供选择的游戏非常多,Astra并没有提前得到候选范围。
从实验来看,Astra似乎能够通过权重中的一些特征,判断每个网络究竟是为哪款游戏设计的。
例如,它会观察第一层权重在不同输入通道上的分布位置。以《Breakout》(打砖块)为例,智能体的权重集中在画面最下方的一行,这对应游戏中的挡板。它还会观察输出层如何区分不同动作,以此判断网络的行为。
实验2:Astra能判断扩散模型会生成什么图形吗?
接下来,我们想看看这种能力能否扩展到其他任务和模型。
我们分别训练了三个扩散模型(DDPM),让它们各自生成圆形、三角形和正方形图像。随后,我们要求Astra只根据模型权重,判断每个DDPM经过训练后会生成什么图形。整个过程中,不允许Astra调用工具,也不允许它执行前向计算。
结果是,Astra只凭权重就正确判断出了每个模型生成的图形。它在输出层中找到了图形的轮廓。具体来说,每个隐藏单元的权重对应图形边缘的一部分,Astra将这些部分拼接起来,就能画出完整的图形。
有意思的是,Astra画出的所有图形都是空心轮廓,而实际模型生成的是实心图形。这个错误反而说明,它并不是通过计算模型的前向传播结果来判断图形,而是在直接读取权重本身的结构和几何关系。
实验3:只看网络中间层,Astra能判断语言模型学会了什么吗?
在前两个实验中,Astra并没有真正分析整个网络,只需要查看第一层或最后一层,就能完成判断。
但对于更大的模型,尤其是我们真正关心的语言模型,这种方法很难扩展。语言模型如何处理输入、如何一步步完成计算,很多关键信息都体现在中间层。因此,这次我们移除了网络的第一层和最后一层,只给Astra看中间部分。
我们训练了三个小型语言模型,每个模型有720万个参数,任务都是预测下一个字符。三个模型分别使用Python代码、罗马字书写的日语(Romaji)和英语进行训练。随后,我们移除它们的输入层和输出层,只把中间的四个Transformer模块交给Astra。
由于这两层已经被移除,剩余权重中不再包含字符与具体符号之间的对应关系,模型也无法直接接收文本并运行。
我们允许Astra使用Python分析这些权重,但不允许它把任何输入送进整个网络或其中的某一层运行。
我们提出了两个问题:这个网络使用什么语言训练?它的24个注意力头分别承担什么功能?
Astra在两次尝试中,都正确识别出了三个网络各自使用的语言。它还找出了全部复制头,没有把其他注意力头误判为复制头。复制头是一类能够帮助模型重复此前见过的文本的注意力头。
Astra的判断过程大致如下。为了区分Python模型,它首先寻找复制头。这类注意力头能够帮助模型重复此前出现过的内容。例如,如果前文已经出现过total,模型后来再次读到tot时,就能接着补出al。
Astra没有运行网络,却找到了第一层中一个会回看前一个字符的注意力头。随后,它通过矩阵相乘,进一步找出后续哪些注意力头会利用这个头传递的信息进行检索(见图1)。
我们后来发现,这实际上是Elhage等人[10]提出的一种分析方法,而我们此前并没有向Astra介绍过这项工作。代码中的变量名和标识符比普通文章更频繁地重复,因此Python模型中出现了更多复制头。日语罗马字模型则呈现出另一种明显特征。Astra看到的四个Transformer模块中,最后一个模块写入的方向更少,似乎模型需要区分的字符种类也更少。这与日语罗马字的特点吻合:它确实不会使用q、l、v、x等一些字母。
大语言模型能直接编写神经网络权重吗?
到目前为止,Astra只展示了读取权重的能力。接下来,我们想看看它是否也知道如何写出这些权重。
实验4:Astra能通过修改权重修复一个无法完成任务的网络吗?
我们在Kinetix环境[11]中训练了一个PPO网络,让它控制一辆小车爬上斜坡。要完成这个任务,小车需要先倒退一段距离,留出足够的助跑空间,然后加速冲上斜坡。但PPO网络最终收敛到了一个局部最优策略:小车始终径直冲向斜坡,最后卡在那里。
我们把网络权重、场景描述和一段记录下来的运行过程交给GPT-6 Astra,让它解释网络为什么会失败,再直接写出新的权重进行修复。
Astra只尝试了一次,没有使用任何工具,就成功修改了3.5%的权重。修改后的网络在1024次测试中全部让小车成功爬上了斜坡。
根据环境信息和PPO网络的运行轨迹,Astra判断网络陷入了局部最优。它只对权重做了少量修改,就改变了原来的控制策略:先让小车倒退,再全速向前行驶。
从Astra给出的推理过程来看,它的具体做法是在每一层增加一条由少量神经元组成的独立通路,用来读取小车的位置和速度。当绿色车轮越过红色条带后,这条通路就会停止工作,后续操作交给原本训练好的网络完成。
实验5:大语言模型能从零开始编写神经网络权重吗?
接下来,我们想看看Astra能否在零样本条件下,从头写出一个神经网络。
我们选择了三款MinAtar游戏[12]:《Breakout》(打砖块)、《Seaquest》和《Asterix》。
对于每款游戏,我们都向Astra提供游戏规则、源代码以及对应的网络结构。整个过程中,Astra无法访问训练数据、损失函数和梯度,也不能使用工具。我们还禁止它在游戏环境中实际运行网络。
它只能根据网络信息和环境描述,直接通过文本生成新的权重。之后,我们再对生成的网络进行评测。
结果显示,Astra生成的三个网络,在全部三款游戏中都超过了训练1亿步的PPO模型。
如果拿它们与训练5亿步的PPO模型比较,Astra生成的网络在《Breakout》中的得分是对方的20倍,在《Asterix》中已经接近对方的水平,在《Seaquest》中则达到了对方得分的60%。
Astra是怎么做到的?它会先推理出自己希望网络实现什么样的程序,再把这些程序转换成神经网络的形式。
例如,在《Breakout》中,它会让第一层计算球最终可能落在哪里,再让第二层根据这个位置控制挡板移动。
更接近真实应用的场景:扩大规模并使用工具
到目前为止,我们研究的大多数网络,其权重都可以直接放进Astra的上下文窗口,而且没有开放工具调用。
这样设置实验,是为了尽可能排除其他因素,单独观察大语言模型本身是否已经具备理解权重空间的能力。
接下来的实验,我们希望进一步扩大权重空间编程的能力范围,转向更接近实际应用的场景:网络权重可能无法直接放进上下文窗口,需要借助工具帮助大语言模型理解和修改这些权重。
实验6:编写一个围棋算法
这次,我们测试Astra处理150万个参数规模网络的能力。这样的权重规模远远超出了它能够直接放进上下文窗口的范围。
我们要求Astra按照给定的网络结构(243→512×6→82),从零开始生成一组性能较好的权重,不允许训练,也不能访问互联网。实验框架为Astra提供了一个Python沙箱。它可以在沙箱中读取和保存网络的权重张量(初始值全部为0),也可以使用NumPy或PyTorch在CPU上分析这些权重,但不能直接在沙箱中运行网络。如果想知道网络实际会做什么,Astra必须消耗一次前向计算机会。
这次,我们允许Astra对网络进行一定次数的前向计算,并观察生成网络的表现如何随着前向计算次数增加而变化。具体来说,我们设置了从0次到50次的不同预算。每次前向计算包含128条运行轨迹。Astra可以在两次前向计算之间交替修改网络权重。
即使一次前向计算都不做,Astra生成的网络与两个更小的PPO网络(243→32→32→82)对战时,胜率也超过了一半。当允许进行50次前向计算后,Astra生成的网络甚至超过了一个经过2000万局游戏训练、参数规模与它相同的PPO网络。
Astra是怎么做到的?
它在Python中按层编写网络,把整个网络设计成一套小型围棋程序。第一层负责标记棋盘上双方的棋子,以及棋子周围的空点,也就是气。中间层沿着相连棋子的链条向前传递这些信息,判断哪些棋串正处于危险之中。最后一层则根据这些信息,为每一步落子打分。评分时会考虑能否吃掉对方棋子、能否救活己方棋串、是否会让自己陷入打吃,以及是否会填掉自己的眼位,同时也会考虑棋盘上哪些位置本身更值得落子。
如果不允许前向计算,Astra只运行了一次Python程序,就写出了336行代码,完成了整个网络的设计。如果允许前向计算,它就会先进行练习对局,观察自己输在哪里,再修改对应的网络部分。只有修改后赢得更多比赛,它才会保留这次改动。
实验7:哪个语言模型更会迎合用户?
近年来,理解大型神经网络的行为已经成为一个越来越重要的问题。
在这个实验中,我们想看看通用大语言模型能否直接分析网络本身,判断它会表现出什么行为。我们按照完全相同的方式,使用同一份问答数据集,微调了两个Gemma 3 270M模型。其中一个模型经过训练,会尽可能给出正确答案;另一个则被训练成迎合用户的模型,也就是无论用户提出什么答案,它都会顺着用户的意思回答。
为了避免Astra通过检查模型输入和输出分布这种简单方式来判断,我们在微调过程中冻结了两个模型的输入嵌入层和输出层。随后,我们把两个模型的权重交给Astra,让它只根据权重判断哪个模型经过了迎合式训练,并解释自己的判断依据。遗憾的是,仅凭权重,Astra无法分辨两个模型。
在四次尝试中,它都找到了两个模型在权重空间中的许多差异,却没能把这些差异与模型的实际行为对应起来。
于是,我们放宽了实验条件。这次,允许Astra查看两个模型在处理它自己编写的文本时所呈现的注意力分布,也就是每个注意力头具体关注哪些位置。但仍然不允许它查看模型的输出结果。
在这种条件下,Astra成功识别出了我们训练的三组模型对中的全部迎合型模型。
它还能够解释两个模型之间的差异。在迎合型模型中,中间层的注意力头会把更多注意力分配给用户建议的内容(见图2)。
实验8:让语言模型的数学能力变得更强
最后,我们把实验扩展到规模更大的语言模型Qwen3.5-0.8B,让Astra直接修改权重,尝试提高模型的数学推理能力。
我们给Astra搭建了与实验6类似的运行框架。它可以在一个类似Notebook的Python环境中操作,模型权重已经加载完毕。随后,我们允许Astra从GSM8K和MATH训练集中选择题目,对模型进行一定次数的前向计算。每批平均包含64条序列,最多512条。我们分别设置了10次、25次和50次前向计算预算。
和之前一样,Astra无法获得模型的训练过程和梯度信息。最终,Astra发现并修复了小型推理模型经常出现的一个问题:模型会陷入循环。
当基础模型陷入循环时,它会不断重复相同的文本,很少真正给出答案。在最初的96次测试中,有85次答案一直生成到32,768个Token的上限。
Astra进一步追踪发现,这种循环行为与第15层和第19层MLP写入的一个特定方向有关。于是,它从这两层各自的64个输出列中减去了这个方向,总共修改了131,072个权重。这种做法有点类似于通过从模型权重中删除某个特定方向,来移除模型的一种行为。
当允许进行50次前向计算后,Qwen3.5-0.8B在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%。
更重要的是,这次修改只涉及模型8亿个权重中的131,072个,占比仅为0.016%。我们认为,权重空间编程有望让这类针对特定问题的修改不再依赖重新训练。
补充实验:提高一个不会陷入循环的模型的数学能力
不过,修复循环问题,并不等于真正提高模型的数学能力。
修复循环,只是让模型有机会完整写出那些它原本就能推导出来的答案。
因此,我们还测试了Gemma 3 270M。它是一个经过指令微调的模型,参数规模约为Qwen3.5-0.8B的三分之一,而且很少陷入循环。只有8.5%的答案会触及Token上限,而Qwen这一比例为93%。
在这个实验中,Astra没能提高Gemma的数学能力。
Astra检查Gemma的错误后发现,问题主要是一些普通的推理错误,例如算术计算错误、代数推导步骤不成立等。它没有找到某个能够单独关闭、从而解决这些问题的特定组件。
Astra所做的修改仍然很小,也很有针对性。例如,它尝试将一个对数字有响应的神经元强度加倍。
但这些修改都没能让MATH-500成绩提升超过约1个百分点。Astra自己也认为,这种程度的变化不足以证明模型的数学能力确实得到了提升。
这个实验说明,直接修改权重可以移除阻碍模型发挥已有能力的问题,却无法凭空补上模型原本就不具备的能力。
Gemma的采样参数采用其模型卡中的设置:temperature为1.0,top-k为64,top-p为0.95,最大生成长度为8,192个Token。MATH-500成绩则是每道题采样4次后取平均值。
下一步计划
目前的实验结果确实令人兴奋,但能力仍然有限,主要受到上下文长度和实验运行框架效率的制约。不过,现有迹象已经显示出这条路线的潜力。我们认为,这可能是机制可解释性和神经网络优化领域一次重大变化的开端。如果大语言模型能够在人类
爱游戏体育官网围绕爱游戏体育官网不断创新,回应用户的真实需求。
精选爱游戏中国官方网站内容,爱游戏体育官网与你一同发现更多精彩。
马克·JK·帕克
3条评论