跳至正文
Eric®
作品与手记EN

← 文章  /  AI 工程

模型出错,为什么总想着重新训练?

Qwen 的数学成绩从 7.9% 涨到 48.1%,动的只有 0.016% 的权重。先看它究竟修好了什么,再谈模型调试该怎样做。

模型数学题做得差,我们通常先补数据、改训练、加参数。MIT CSAIL 这次给出了另一个诊断:它可能一直在想,却没能把答案写出来。

在 11 月 2 日发布的Weight-Space Programming 研究中,GPT-6 Astra 直接检查并修改 Qwen3.5-0.8B 的权重,把 MATH-500 平均准确率从 7.9% 拉到了 48.1%。改动约占 0.016%,全程没有反向传播。

比涨分更值得盯住的是另一列:原模型有 93.0% 的 MATH-500 输出耗尽了 32,768 token,修改后降到 33.1%。大量失败发生在重复推理里。Astra 先找出了这类故障,再动了内部参数。

我更愿意把这件事放进模型维修的工具箱。分数低只是症状,背后可能是能力欠缺,也可能是已有能力被某个失效机制卡住。连这两类问题都没分清就重训,计算花出去了,故障还可能留在原处。

它一直在推理,就是交不出答案

Qwen 的实验允许 Astra 使用一个能读写权重的 Python 环境,以及有限次数的前向测试。练习材料来自 GSM8K 和 MATH 的训练集等,正式评测留在运行结束后,编辑器看不到测试结果。实验日志把每次操作和最终评测都保留了下来。

Astra 对比能正常推进的推理和反复绕圈的推理,检查内部激活,再用干预测试缩小范围。最终补丁落在第 15 层和第 19 层 MLP 的 down_proj:各选 64 列,削弱它们向残差流写入的循环相关方向,共涉及 131,072 个权重。

这里动的是特征方向和矩阵列之间的关系。一个方向由很多参数共同写出,某个参数也可能同时服务于多种计算。把它想成删掉两个“坏神经元”,反而会丢掉这次诊断最有价值的部分。

最终运行记录还列了几种检验:改变干预强度、单独测试不同层,以及用等范数的随机方向作对照。看到某种激活跟循环一起出现,只能得到线索;对相关位置动手后,故障能否按预期减轻,才开始回答因果问题。这类实验应当成为调试器的基本能力。

下面是研究公开的 Qwen 结果。评测开启 Thinking,输出上限为 32,768 token,采样设置在修改前后保持一致;MATH-500 每题采样 4 次,GSM8K 和 IFEval 每题 2 次,报告所有样本的平均准确率。

运行MATH-500GSM8KIFEval触及 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,为什么几乎没涨分?

研究团队又让 Astra 修改 Gemma 3 270M。这次碰到的是算术错误、无效的代数步骤等普通推理失误。模型很少陷入 Qwen 那样的长循环,寻找局部补丁就没有那么顺利。

Gemma 原来的 MATH-500 为 6.8%,50 次前向预算后为 7.0%。它使用自己的采样配置和 8,192 token 上限。这个对照告诉我,定位到一种稳定、集中的异常,比笼统要求“提高数学能力”更适合现在的权重编程。

两种诊断对应两种工作。反复生成同一段话,可以收集正常和循环的上下文,设计干预,观察行为是否随之改变。缺少某类推理能力,则要处理知识、表示和跨层计算。把后者也交给一个局部补丁,往往只是换个位置碰运气。

所以我会先找“本来能做,却稳定地做不出来”的故障:重复生成、某种格式下持续失效、某个状态触发异常动作。成功标准也随之具体起来:能否消除这类失败,原本正常的任务又保留了多少。

这辆车缺的,是先倒一下

另一个实验更像给控制程序打补丁。一个 PPO 网络负责让汽车爬坡,却学成了不断向前冲、不断卡住。Astra 拿到权重、场景说明和一段运行记录后,给网络加入一条读取位置与速度的控制路径:先倒车留出加速距离,再向前冲。

汽车越过特定位置后,新路径退出,后续继续由原网络控制。这次单次修改改了约 3.5% 的权重,在 1,024 次该关卡测试中全部成功。补丁接管的时机、执行的动作和退出条件,都能和任务过程对应上。

这个案例抓住了维修的要点:原系统已经有大量可用行为,缺的是一个特定阶段的动作。保留已经学会的部分,把故障发生处修好,比把整个策略再丢进训练器里更有针对性。

读懂权重,得读到计算关系

这些补丁靠什么找出来?研究先做了一组读取实验:四个形状相同、各有 17,253 个参数的游戏网络,Astra 根据权重和输入输出含义,辨认出了各自训练的游戏。进一步的实验则拿掉约 720 万参数字符模型的输入、输出层,只留下中间 Transformer Blocks。

拿掉首尾层,等于收走字符到向量、向量到字符的直接映射,也收走了跑一段文本看结果的捷径。Astra 可以用 Python 分析中间权重,却不能把任何输入送进网络。这使问题落在了矩阵本身透露出的计算结构上。

Astra 区分了学习 Python、英语和罗马字日语的网络,并找到了与实测吻合的归纳头。它通过矩阵之间的组合关系,寻找读取前文、匹配片段和复制后续内容的结构。这些归纳头机制已有研究基础;有意思的是,推理模型开始自己选择分析步骤,去找这样的计算。

这种分析还得跨过参数表示的差异。把隐藏神经元重新排列,同时调整前后连接,网络功能可以完全不变。Git Re-Basin讨论的权重置换对称性,恰好提醒我们:某个编号的神经元很难成为跨模型通用的维修接口。

我更关心工具能否描述稳定的计算关系:什么状态被读入,经过哪些变换,最后写入哪个方向。描述越接近可验证的计算过程,换模型、换训练种子时,才越有机会重新定位。只给一个“第几层有问题”的答案,还远远不够动手维修。

把打砖块的规则,直接编进矩阵

读取之外,Astra 还从零写了 MinAtar 游戏网络。研究给它规则、环境源代码和输入输出定义,要求直接生成权重,期间不能运行游戏检查效果。在 Breakout 中,它先估算小球落点,再根据挡板位置决定动作,把这套算法写成矩阵和激活函数。

最终平均得分为 517.4;对照 PPO 训练 1 亿步和 5 亿步分别为 15.8、25.3。这里最有意思的是求解路径:Astra 拿着明文规则设计控制算法,再把算法放进指定网络;PPO 通过与环境交互和奖励学习策略。网络成了执行一个已知算法的载体。

9×9 围棋实验又向前走了一步。Astra 在约 148 万参数的网络里分层表达棋子、气、危险棋块和落子评分;得到有限对局反馈后,再修改导致失败的计算部分。写出的网络可以继续接受调试反馈,算法构造和实验修正接在了一起。

这让我想到训练模型与编写模型可以怎样配合。规则明确的状态机、局部控制逻辑、特殊情况处理,适合尝试直接构造;复杂的视觉表示和语言知识继续从数据里学习。工程师多了一种组合方式:在已有能力上接入一段能解释、能测试的计算。

0.016% 的补丁,花了约 20 个小时

直接改权重已有很长的研究积累。ROME通过修改前馈层权重定向更新事实关联,机制可解释性也一直用激活和参数干预检验内部计算。Weight-Space Programming 把诊断、选择实验、构造修改这些步骤,交给通用推理模型来组织。

这很像代码代理从写一段函数,走到了读项目、跑测试、按错误继续修改。只是它现在面对的工件换成了张量和激活,报错换成了行为故障。

但小补丁照样可能花很久。Qwen 效果最好的运行用了 50 次批量前向测试、80 次 Python 操作和 158 轮交互,墙钟时间约 20.3 小时,其中约 4.7 小时是服务不可用后的等待。一次前向工具调用最多可以生成 512 道练习题,或读取 1,024 条文本的内部状态。

表里的 10、25、50 次预算也各自对应独立运行和不同补丁。25 次运行最后关掉了一个注意力头;50 次才找到了两个 MLP 的循环相关方向。这个过程需要机制搜索,预算增加并不会自动兑换成同样比例的收益。

所以我会把采样调整、外部控制、常规微调和内部编辑放在同一张成本表里:解决的是不是同一个故障,需要多少数据和计算,成功能否重复,维护又要多花多少。省掉反向传播当然有价值,完整的诊断与验证成本同样得付账。

模型维修,也得留下补丁和回滚按钮

如果把这条路用进项目,我会从稳定故障的回放集开始。保存触发问题的输入、模型版本、采样参数与运行环境,再配一组本来正常的样本。诊断代理每提出一种内部机制,就给它一个能推翻这个解释的对照实验,最后才决定动哪些张量。

放到视觉任务里,也可以从某种目标姿态或成像条件下持续误判的样本入手,对照正常样本的激活。这里值得投入的是诊断流程:把“这一类图总是错”逐步追到可干预的计算,再检验修改后的结果。沿着指标盲目换模型,只会重新积累一套不理解的失败。

补丁则应该绑定原始 Checkpoint 的哈希,保存修改的张量、索引、精度和差分,以及生成它的实验记录。部署时校验基座,出现副作用时回到原版。神经元排列、模型版本或量化方式一变,就重新确认补丁还作用在原来的计算上。

连续修两个故障时,还要测补丁组合。第二次编辑面对的是第一次改过的内部表示,单个补丁分别有效,叠起来仍可能互相抵消。原版、补丁 A、补丁 B、A 后接 B,都留下同一组回放结果,才能判断该接受增量修改,还是重新诊断。

回归范围要超出目标分数。NeurIPS 2024 的模型编辑评估记录了连续编辑对通用能力的损害;后续局部性研究又发现,一些常用指标对副作用不够敏感。参数改得少,行为影响仍可能很广,测试必须去找这些影响。

对 Qwen 这样的循环修复,我会同时测答案质量、截断率、输出长度、格式遵循和原本能正常完成的任务。只看更早结束,很容易把“修好循环”做成“更快放弃”。再加上多次独立诊断、未参与搜索的回放样本和明确的回滚条件,才能知道工具是否值得持续使用。

我期待模型开发把维修认真补起来。Checkpoint 可以保留训练得到的能力,也可以接受有记录、有测试的局部改造。下次再遇到稳定失败,先问它卡在了哪里。能定位、能干预、能回归,再决定需要补丁,还是确实需要一次新的训练。