基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
  • 知识卡片碎片时间过考点
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
    • AI 热点每日 AI 资讯与动向
AI 工作台
简历
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
技术实践2026-11-04 18:33

直接修改模型权重能否修复推理循环

dev.to · AI#权重编辑#模型调试#实验复现
Editor brief · 编辑速览

文章解读一项权重编辑实验:据其介绍,GPT-6 Astra 修改 Qwen3.5-0.8B 的少量权重后,MATH-500 得分由 7.9% 升至 48.1%。内容追踪修改逻辑、运行日志及检查点,并用 NumPy 重建核心操作,讨论其在 Gemma 上失败的差异。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

改动约 0.016% 的参数,就能让一个小模型的 MATH-500 成绩从 7.9% 升到 48.1%?原文给出的解释是:GPT-6 Astra 找到了 Qwen3.5-0.8B 反复思考却迟迟不作答的行为方向,并直接修改权重,减少了这种循环。

这项工作的看点,在于大模型开始承担模型内部的诊断与修补。不过,漂亮数字背后还有 50 次前向评估、20.3 小时的排查,以及尚未解决的循环。对程序员而言,它更像一次模型层面的故障定位,值得连同实验条件一起看。

分数涨了六倍,究竟修好了什么

据原文,MIT CSAIL 团队于 2026 年 11 月 2 日发布了「Sparks of Weight-Space Programming」。它当时是博客和 alphaXiv 预印本,尚未经过同行评审。所有实验都使用未经专项训练的 GPT-6 Astra 作为编辑者。

所谓权重空间编程(Weight-Space Programming),就是让一个模型读取另一个神经网络的权重,提出解释,再通过代码写入修改。编辑过程不使用优化器、梯度下降或训练循环。

Qwen3.5-0.8B 的问题尤其适合这种尝试。开启 thinking mode 后,它会反复检查、怀疑和重述已有步骤。在最多生成 32,768 个 token 的评估设置下,原始模型有 93.0% 的回答耗尽额度,MATH-500 得分只有 7.9%。

这次提升首先说明模型更容易完成作答,不能直接解释成它学会了更多数学。

证据不只来自数学题。修改后,GSM8K 从 13.8% 升至 67.1%,指令遵循测试 IFEval 从 21.0% 升至 62.3%;AMC23、Minerva Math、OlympiadBench 和 GPQA Diamond 也有提升。作者据此认为,修补针对的是跨任务的循环问题。回答较短的 MMLU-Pro 变化很小,也与这个解释相符。

多个基准在修改权重前后的成绩变化

但循环没有消失。最佳版本仍有 33.1% 的回答触及 token 上限。它修复了相当一部分失败路径,还谈不上彻底解决。

只动两层,为什么能影响整个回答

理解修改方法,需要先认识残差流(residual stream):它是模型各层不断读取、更新的一组中间状态。在这个 Qwen 模型里,每个 token 对应 1,024 个数,依次经过 24 层处理。

每层的 MLP 通过最后一个矩阵 down_proj,把计算结果写回残差流。矩阵的一列,可以理解为某个神经元激活时,向中间状态添加的一组变化。

Astra 找到了一个与循环行为相关的方向 u,并认为第 15、19 层的 MLP 是主要写入者。它按各列沿 u 方向的写入强度排序,每层只处理最强的 64 列。

下面这段公式说明了补丁的范围和操作:

W' = W - u (u^T W)        applied to the 64 selected columns only

2 layers x 64 columns x 1,024 rows = 131,072 weights
131,072 / ~0.8B parameters        = about 0.016%

要注意第一行:它减去的是选中列沿 u 的分量,并没有把这些神经元全部关闭。这个投影公式还依赖 u 已归一化,原文的 numpy 演示做了这一步。

从第15和19层的部分输出列中移除循环方向

模型卡称,基础模型与修改版只有两个张量不同,分别是这两层的 down_proj.weight,并通过 sha256 校验。补丁先以 float32 写入,再转成 bfloat16 评估;舍入后,真正不同的权重数是 130,188,而非全部 131,072 个。

难点也就在这里:投影计算很简单,找到哪个方向、哪两层、哪些列才困难。

原文的 numpy 示例会先在随机矩阵中人为植入方向,再把它移除。它能解释数学操作,却不能复现真实模型里发现 u 的过程。把这段演示跑通,距离自动诊断一个模型仍有很大差距。

没有训练,不代表没有搜索和评估成本

Astra 得到的是一个已加载权重的 Python kernel,没有 GPU,并且只能在有限预算内调用真实模型。

一次前向调用按一批练习题计,平均约 64 题,最多 512 题。可用数据包括 GSM8K 的 7,469 道训练题和 MATH 的 7,275 道训练题,不使用测试集。这里的「不训练」不等于不接触数据,系统仍然依靠练习题判断补丁好坏。

三档预算是独立运行,结果很能说明问题:

前向调用预算 找到的修改 MATH-500 触及生成上限
10 次 第 8 至 22 层共 30 个矩阵做秩一修改,系数为 1.5 12.3% 87.2%
25 次 清零第 15 层注意力头 7 的 256 个输出列 14.1% 86.4%
50 次 修改第 15、19 层各 64 个 down_proj 列 48.1% 33.1%

前两个补丁范围更粗,收益也小。证据更多后,Astra 找到了范围更窄、效果更好的改法。但只有这三次运行,尚不足以证明增加预算总能得到更精准的补丁。

最佳运行经历了 158 轮对话、80 次 Python 执行,总耗时 20.3 小时,其中 4.7 小时在等待服务故障恢复。它是一次长时间的工具调查,不能理解成一句提示词完成模型升级。

复现时,采样设置同样不能省略。下面是原文加载公开检查点的代码:

from vllm import LLM, SamplingParams
from transformers import AutoTokenizer

model_id = "RikiyaT/Qwen3.5-0.8B-weight-space-programming"
tok = AutoTokenizer.from_pretrained(model_id)
llm = LLM(model=model_id, dtype="bfloat16", max_model_len=34816)

question = "What is 2^10 + 24?\nPlease reason step by step, and put your final answer within \\boxed{}."
prompt = tok.apply_chat_template(
    [{"role": "user", "content": question}],
    tokenize=False, add_generation_prompt=True, enable_thinking=True,
)

params = SamplingParams(
    temperature=0.6, top_p=0.95, top_k=20,
    presence_penalty=1.5, max_tokens=32768, seed=0,
)
print(llm.generate([prompt], params)[0].outputs[0].text)

重点看 enable_thinking=True 和 SamplingParams:关闭思考模式或改变采样参数,就已经换了比较条件。原评估提取最后一个 \boxed{} 答案,用 math-verify 判分;MATH-500 等任务每题生成 4 次,不能拿一道题的一次输出对照论文成绩。

原文还转述了第三方复跑:使用 vLLM、math-verify 0.9.0,完成 2,000 次生成后得到 51.0%,仍有 31.6% 触顶。这支持改善方向,但属于原文报告的结果,具体数值受采样设置影响。

我的判断

我认可这项工作对「模型为什么失败」的拆解。它提醒我们:最终正确率下降,可能来自无法结束、无法输出答案,而不只是知识或推理能力不足。对于自部署模型,这种区分会直接影响排查路线。

但「LLM 能像读源码一样读权重」仍是过强的概括。原文里,两种 Gemma 3 270M 微调模型分别表现诚实和迎合用户,Astra 仅看权重时四次全部失败;补充自行选择的 16 段文本的注意力模式后,才在三对模型中全部识别成功。这是识别实验,并非同一循环补丁在 Gemma 上失败。

其他结果也有明确边界。MinAtar Breakout 中,一次回复写出的网络得到 517.4 分,超过 PPO 训练 500M 步的 25.3 分;但 Seaquest 上,53.1 分仍低于 PPO 的 88.9 分。规则容易写成控制策略的任务,更适合把已有知识直接编码进网络。

它展示了一种值得研究的修补方式,还没有证明能够普遍替代微调。

原文将它与 fine-tuning、ROME、MEMIT 并列比较,但没有提供同预算、同任务的充分对照。维护一个行为补丁,也需要检查回归、模型版本变化和量化影响。不能只凭改动比例小,就认定风险和成本都小。

能拿来做什么

  • 自部署 Qwen3.5-0.8B 时,可以用同一批题、同一套采样设置比较基础版与公开补丁版,同时记录正确率、输出长度和触及 max_tokens 的比例,判断收益是否来自减少循环。
  • 排查 AI 编程助手长时间反复推理的问题时,可以先区分模型输出循环、工具调用循环和 Agent 调度错误。原文处理的是模型内部行为,不能直接套用到所有重复执行问题。
  • 研究权重编辑时,可以从日志目录 runs/p50c/ 和 code/apply_edit.py 入手;复建需要基础版本 2fc06364715b967f1860aea9cf38778875588b17,再通过 code/build_ckpt.py 转换检查点。先核对张量和哈希,再谈效果复现。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
下一篇
用 LibreChat 搭建多租户 AI 服务

资讯速览

dev.to · AI · 2026-11-04 18:33

AI 评分 8.0 / 10

相关标签

#权重编辑#模型调试#实验复现

继续阅读

  • 用 LibreChat 搭建多租户 AI 服务
  • Helm配置更新成功为何应用仍用旧值
  • 让 llama.cpp 承接多用户生产负载