- src/materials:每种提交一个材料函数,生成给模型看的材料、第一条消息、对号清单、能读的代码版本;查询只在材料内按编号找;读提示词并算原始字节哈希;信念本按方法.md 6.10 现算。 - 账本里只存成 Json 的冻结协议、位置表、决定、结算的形状和编号规则由 materials 定义并导出。 - vocab 加 Checklist(对号清单)。 - prompts/:参考项目 3 份角色提示词、16 份任务说明,只做必要改动。 - TASK.md 补一句 unversionedNames 不存进代码版本。 - 方法.md 4.3 ① 改为"研究者任务"放信念本;结构.md vocab 上限 1150、补 materials 对外内容。 用户 2026-10-03 开工前的四个决定(选的都是推荐项):"甲:上限改 1150,只放对号清单";"甲:materials 定义并导出";"不放,改方法.md ① 的措辞";"按原提案挑"。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7.2 KiB
写解释
本批正式实验跑完了,成绩已经公开(材料"本任务要处理的东西"里有本批每次运行、实现说明和核验结论)。如果本轮有改法被采纳、而且它不止一个因子,接下来程序会把它的因子一格一格地关掉重跑;材料"本轮要给三个数的格"一节列出了这些格,每格写着关掉的是哪个因子、关掉时换成什么,以及完整代码和本轮基线各多少分。
在任何一格开跑之前,请你写下你对"结果为什么是这样"的理解。要赶在前面写,是因为只有事前写下的判断,事后才能拿来对号;跑完再解释,怎么都说得通。你交上来的解释会冻结,消融跑完以后原样给下一轮的研究者看,连同它在每一格被确认还是否定。
一条解释是什么
一条解释就是一段话:你认为分数主要是哪个因子挣来的,靠的是什么道理,在什么情况下这个道理会失效。如果你认为某个因子要靠另一个因子才起作用——比如"没有随机挪动,多起点重启就几乎没用"——也写进来,这正是一条能被检验的预测。
然后把这段话翻成数:对每一格,写"关掉这个因子以后,最终指标大概落在哪",给一成、一半、九成三个数,按最终指标的原值写。想的时候不需要推代码,只问自己:这个因子撑了总提升的几成——几乎没有、一小部分、一大半,还是几乎全部?撑得多,关掉后就靠近基线;撑得少,就靠近完整代码的分数。各格是分开测的:关一个因子时其余的因子和保障都照完整代码保留,所以几格"少掉的分"加起来不必等于总提升——几个因子互相帮忙时加起来会更多,在做同一件事时会更少。拿不准就放宽,宽到把你犹豫的几种情形都包进去;但也别宽到什么结果都包得住,那样的范围跑完以后什么也说明不了。
写的时候如果发现自己在把某段代码套到具体的数上,一步一步推它会算出什么,那就是在替消融做它要做的事。停下来,回到"这个因子撑了几成"这个问题(系统提示词"读代码的路径,不在脑子里算数值")。读路径是该做的:关掉这个因子以后,代码会走哪条分支、某条保障会不会每次都被用上,这正是一格可能量错东西的地方。想知道一次已经跑完的运行里某个量具体是多少,用 research_query 查材料里列出的产物记录编号,答案就在里面。
先看这几样
运行记录里每次运行都写着"答案出自:……;保障动手次数:……"。完整代码那次的答案出自 main 还是某条保障,关系到你对每一格的判断:如果关掉某个因子以后,答案很可能改由某条保障给出,那一格量到的就是那条保障,而不是关掉这个因子的效果——值得在解释里写一句。材料"本轮实验员实现时的提醒"是实验员照协议写代码时看出的问题,常常比研究者的推理更早看到某条保障会挡掉什么,读一遍。协议里写明"未实测"的数、挑刺与回应里标着"(推测)"的判断,是别人的猜想,不当证据用。
写几条、写成什么样
交一条解释就够。只在你真有第二个、不同的机制判断时,才交第二条:同一人的几条在合并时平分你的分量,一条你自己都没多大信心的"对照"解释,会分走你主解释的一半。几条解释不必互相排斥,范围也可以重叠。和别人的解释不一样很正常,照你自己的理解写,不必向大家看齐。
推广一条结论时,说清它覆盖了哪些设定、没覆盖哪些。"不重跑优化、幅度 0.01 的扰动爬山没用"不等于"扰动精修没用":后者会让下一轮没人再去试"重跑优化、幅度 0.03"。因子的关键设定写在因子清单里,引用时带上它。
先想清楚哪些运行能当证据:没跑成的、成绩判为不合法的、测不到的都不能。已经测到的分数可以直接引用。提到某次运行时带上运行编号,读的人才能核对。研究记录里前几轮的消融结果和信念本"按因子"一栏值得看:类似的因子以前撑了多少、哪些解释被确认过。
跑完以后,实测落在你某一格的范围外,这条解释在那一格就被否定;落在里面就确认,每格各判各的。被否定不是扣分,而是告诉下一轮的人"这里的理解有偏差",和"这里猜对了"一样有用。两条解释在这次消融里总是一起确认或一起否定,程序会记"现有测法分不开",这也不是不合格。某一格没测出有效分数(跑崩、超时记"证据不足",另有"跑不起来""没测"),那一格不判。
如果你看完结果,确实说不出哪个因子在出力、为什么——因子多、结果平淡、本批只有一次相关运行时这很常见——就直接写"我没有具体机制判断",三个数照实写宽。这是一条有用的诚实记录。硬编一个机制,消融一跑多半会被否定,还会让下一轮的人以为这里有过一个认真的猜测。
本轮没有消融格时(材料会写明),每条解释只写正文:本批结果为什么是这样,哪些只说明改法有效、还说明不了原因。不交各格的三个数(cells)。
两份样本
下面两份来自另一道题(在一个训练任务上提高验证集准确率,越大越好;本轮基线 0.700,被采纳的完整代码 0.760;三个因子:p1 学习率预热 500 步,p2 把 SGD 换成 Adam,p3 标签平滑 0.1),是两位研究者各自交的一条,结论方向相反,只示范写法和篇幅,不要照搬内容。
解释一
收益大半来自 p2。基线的 SGD 在给定步数内远没收敛:运行 r1-c1 的训练损失到最后仍在明显下降。换成 Adam 后同样步数走得远得多,我估它撑了总提升的七八成。p1 预热主要让 Adam 前几百步不发散,单独的作用小;我的判断是它的作用依赖 p2——在 SGD 上预热几乎没用,但本轮只关一个因子,这一点只能记在这里。p3 标签平滑在这个数据量上影响很小,可能还略有负作用。什么情况下不成立:如果关掉 p2 后分数仍然接近 0.76,说明 SGD 其实不缺步数,收益来自别处,这条解释就错了。
三个数:关 p1 → 0.735 / 0.750 / 0.758;关 p2 → 0.700 / 0.712 / 0.730;关 p3 → 0.752 / 0.760 / 0.768。
解释二
我没有具体机制判断。三个因子是同时加进去的,本批只有完整代码这一次相关运行,训练日志里也看不出哪一段的变化对应哪个因子;我手上没有能把它们分开的证据。所以每一格都可能接近基线(这个因子撑了大半),也可能接近完整代码(几乎没撑),范围照实写宽。
三个数:关 p1、关 p2、关 p3 都是 0.695 / 0.730 / 0.765。
交什么
一条或几条解释,每条一段正文,加上对材料"本轮要给三个数的格"里每一格各三个数(cells;本轮没有消融格时不交 cells)。正文程序不读,冻结后原样给下一轮的人;三个数程序拿去决定测哪几格、判确认还是否定、记账。