DSPy 新优化器尝试让大模型直接改权重
Cmpnd 发布原型优化器 dspy-wsp,让前沿大模型读取小模型权重,在沙箱内修改并逐次测试,无需梯度。素材称单次运行成本约为 5 至 10 美元。
AI 深度解读
让大模型直接修改另一个模型的权重,已经有了可以接进 DSPy 的实验工具。Cmpnd 发布的 dspy-wsp,把这种做法包装成 WeightSpace 优化器:由强模型分析小模型的权重、编写修改代码,再用有限次数的推理检验效果。
它吸引人的地方,是几美元的调用费就可能换来可部署的模型补丁。但读这份结果,不能只看最高提升:默认实验放宽了原论文的限制,换一个写入模型也可能出现负收益。它值得关注,更适合带着评测集试验。
直接改权重,和微调差在哪里
权重空间编程(Weight-Space Programming,WSP)把神经网络的权重当成可以阅读、修改的程序。强模型提出判断,例如某些神经元可能过度偏向某个选项,然后写代码修改对应张量,检查输出有没有改善。
三种优化方式改的是不同东西:
- MIPROv2、GEPA 优化提示词和示例,模型权重保持不变。
- BootstrapFinetune 通过梯度下降修改权重,需要训练数据和训练循环,它也被用于 BetterTogether。
- WeightSpace 让模型通过推理编写权重补丁,本次实验不使用梯度。
不用梯度,不等于不用数据。 dspy-wsp 仍要用练习样本和指标判断修改是否有效。原文所谓「没有微调数据集」,不能理解成随便给一句目标就能可靠优化。
原文引用的 MIT 研究包含 9 项实验。GPT-6-Astra 仅凭权重识别了 4 个 PPO 策略网络对应的游戏;在一个 Kinetix 任务中,修改 3.5% 的权重,把原先 256 次全部失败的策略,变成 1,024 次测试全部成功。
语言模型案例更接近程序员关心的问题:Qwen3.5-0.8B 在数学题上循环输出,研究团队定位到第 15、19 层 MLP,修改 131,072 个权重,占模型的 0.016%。经过 50 次前向评估,MATH-500 从 7.9% 升到 48.1%,GSM8K 从 13.8% 升到 67.1%。
但 Gemma 3 270M 的 MATH-500 只从 6.8% 变成 7.0% 至 7.7%,研究团队不认为这是有效提升。原文给出的边界很明确:修改可能解除已有能力的障碍,未必能补出模型原来缺少的能力。
DSPy 怎样把修改过程管起来
dspy-wsp 采用 MIT 许可证,通过 pip install dspy-wsp 安装,需要 DSPy 3.5。它安排了三个角色:本地加载权重的 student、负责分析和修改的 writer,以及运行修改代码的 sandbox。macOS 使用 sandbox-exec,Linux 使用 bubblewrap。
writer 每轮先解释,再提交一个代码块:或者读取、修改权重,或者运行 DSPy 程序检查效果。测试将前向评估预算设为 max_passes=25,预算耗尽后保留最佳修改,再进行最终验证。
下面这段原始示例,把工单是否紧急、应交给哪个团队作为决策输出:
import dspy
from typing import Literal
from dspy_wsp import WeightSpace, load_decision_backend
class Triage(dspy.Signature):
"""Triage a support ticket."""
ticket: str = dspy.InputField()
urgent: bool = dspy.OutputField(desc="Does this ticket need a reply today?")
team: Literal["billing", "technical", "account"] = dspy.OutputField(desc="Which team should handle it?")
backend = load_decision_backend("d1") # d1-omni-600M
optimizer = WeightSpace(
metric=metric,
writer_lm=dspy.LM("openai/gpt-6-astra", model_type="responses", reasoning_effort="max"),
backend=backend,
max_passes=25,
holdout=0.25,
run_dir="runs/triage",
)
compiled = optimizer.compile(dspy.Predict(Triage), trainset=train, valset=test)
compiled(ticket="I was charged twice this month.") # runs on the edited weights
要重点看 holdout=0.25 和 valset=test:前者从训练数据中划出检查集,writer 能拿到分数,但看不到样本;后者始终隐藏,只在最后运行一次。train、test、metric 需要自行提供,这段代码不是完整可运行项目。
指标还可返回 dspy.Prediction(score=..., feedback=...),其中反馈文字对 writer 可见。数据隔离和反馈设计,都是实验的一部分。
编译后,程序调用修改过的本地模型。compiled.wsp_patch.summary() 可以检查改动;输出目录保存 manifest.json、edit.npz,以及修改前后张量的 sha256,便于重建和核验。
几美元的提升,要连同实验规则一起看
Cmpnd 在 Typed Decisions 上测试了 0.6B 至 9B 的开放决策模型。测试集包含 400 个案例、2,000 个决策,每个案例同时回答 5 个类型化问题,输出的是概率分布。
| 模型 | 原始成绩 | WeightSpace | WeightSpace + ReAnchor |
|---|---|---|---|
| d1-omni-600M | 50.9% | 66.9%(+16.1) | 69.1%(+18.3) |
| NanoJev(Qwen3-0.6B) | 39.2% | 52.4%(+13.3) | 56.4%(+17.3) |
| d1-2B | 60.6% | 74.0%(+13.4) | 77.9%(+17.3) |
| Clef-Flash(9B) | 68.8% | 70.7%(+1.9) | 75.3%(+6.5) |
增益单位是百分点,原文报告标准误为 ±0.7 至 1.4。表中沿用原文标注;部分增益与展示分数相减存在尾数差异,原文没有解释。其摘要还写到组合提升最高 20.0 点,但这张表无法对应出该数字。
ReAnchor 不调用 LLM,而是重新校准各问题的决策阈值。单独使用时,四个模型分别达到 60.2%、50.7%、70.1%、70.3%。它调整概率如何转成答案,WeightSpace 修改产生概率的模型,两者可以叠加。
不过,默认 writer 可以在内核中重新计算决策头。设置 simulate_head=False、遵守原论文更严格的限制后,d1-omni-600M 仅提升 +2.8 ± 0.7 点;叠加 ReAnchor 后为 +9.3,与单独 ReAnchor 相当。
默认成绩不能直接当成严格规则下的 WSP 成绩。
writer 也会左右结果。换成 gpt-6.1-sol 后,三个小模型的独立增益分别为 +5.8、+12.1、−0.6;Astra 对应为 +16.1、+13.3、+13.4。
成本则要分开看:三次列明的运行花费为 $5.42 至 $7.63,但耗时 78 至 167 分钟。所有实验在一台 Mac 上完成,2B 模型约用 6 GB 内存,d1-omni-600M 至少需要 4 GB。调用便宜,不代表迭代迅速。
我的判断
我看好它把修改结果交付成小补丁的方式:相较于只报告分数,记录修改位置、张量哈希和基础模型,更方便复核与部署。
但它仍是原型。现有证据集中在决策任务,不能据此推断一般文本生成、代码生成也会得到类似收益。原文虽提供文本模型后端,却没有给出代码任务的效果数据。
对于已有分类或路由任务的团队,我会先把 ReAnchor 这类校准方法作为基线。它无需 writer 调用,也能贡献明显提升。原文没有提供与 GEPA、BootstrapFinetune 在相同预算、相同任务下的完整对照,暂时无法证明直接改权重更划算。
原研究也有亮眼的单项结果,例如零初始化 MinAtar Breakout 网络一次写入得分 517.4,而 PPO 训练 500M 步得到 25.3。这能支持继续研究,却不足以替一般业务任务背书。
能拿来做什么
- 如果正在做工单分类或请求路由,可以先整理独立评测集,分别比较原模型、ReAnchor、WeightSpace 和组合方案,确认收益来自哪里。
- 如果已经使用 DSPy,可以沿用现有程序和指标试验,但应把
trainset、holdout、valset分开,避免根据最终测试结果反复修改。 - 如果准备部署,应保存基础模型与补丁,用
compiled.wsp_patch.write_checkpoint(backend.weights_dir, "edited-d1/")导出决策模型,并重新验证业务指标。 - 如果只是希望 AI 更会写前端或 Node 代码,目前不能拿这些决策成绩作依据;这篇更适合作为模型优化方向的观察材料。