Notes · 2026.01.24
seed 要记下来
可复现。
一次有效 run:脚本、split、seed、checkpoint、日志目录。缺一个,数字不能出门。seed 最容易缺,因为它看起来像小事。小事不写,两天后模型还在,数对不上。对不上时我会怀疑代码。代码没变,变的是没记下的随机性。随机性不进日志目录,两天后我会怀疑实现。实现没动,动的是缺省 seed 和我随手设的值混在一起。混在一起的对照,差 0.01 也会被写成方法。方法要能再跑出来。再跑靠记下。
「感觉准了」不是记录
训练看到几个样本对了,我会说感觉准了。感觉准了可以停下来喝水,不能写进表。表要对应具体设置。具体设置包括 seed。没有 seed 的准,换一次启动就漂。漂了再调阈值,阈值会记住这次漂。记住漂的阈值,叫过拟合这次运气。
我协助整理对照实验和可复现记录。保证指标能对应到具体设置。对应的方式土:日志目录名里有日期、有 seed、有数据版本。目录里有配置副本。副本和「我记得当时是 42」不是同一级证据。记忆会把 42 和 43 混。
checkpoint 也要能指回。只存最后一份,中间改了划分,最后一份就变成无根。无根的权重仍能推理。推理出来的数仍能画图。图画出来仍能进草稿。草稿若流出,站点上就会出现指不回 run 的句子。
seed 写在哪
写在启动命令、写在配置、写在日志。三处至少两处一致。只写在命令行,历史记录一滚就没。只写在笔记,笔记会和真实启动不一致。我被不一致坑过:笔记写 42,脚本默认另一条路没设 seed。两条路我以为是同一条。
Python、数据加载、模型库,可能有不止一个随机源。记一个整数不等于全管住。我做不到每次都证明所有源都封死。能做到的是:记下我设了哪些,没设哪些写在 limitation。没设的不要假装设了。
有效 run 不在会话里散落的 print。print 在 Cursor 的终端里,会话一关,seed 一起关。日志目录先建,再开训练。这一条和后文那篇「日志目录」是同一契约的不同字段。
对照实验更要 seed
对照关键词、向量、图谱检索,差异若来自一次没记的随机,策略会跟噪声走。策略跟噪声走,产品就会今天改明天改。改的理由看起来是评测。评测没有 seed,理由是心情。
同一份划分、同一个 seed、改一个因素,表才有资格叫对照。改了三个因素还叫对照,是把一周的忙碌写成科学。忙碌可以写进笔记。科学要能换一台机器长出同一张表。长不出,就写长不出。
我参与的评测名字仍是简历里那些:TextGuard-Bench、MGAB、OOD、ChProv-Bench v5。对照的设置以协议为准。协议里若要求多次 seed,就多次,不要只跑一次最好的。最好的那次是挑选,不是报告。
出门前的核对
数字出门前我问:脚本路径、split 文件、seed、checkpoint、日志目录,五样能不能当场指。指不出,数字留在草稿。草稿可以很难看。难看比对外假好。
NeurIPS 2026、AAAI 2027 还是 Under Review。审稿人若问某张表,我要能回到 run。回到 run 靠的是这些字段,不是靠「我们很认真」。认真没有哈希。
限制
这篇不规定 seed 必须是 42。整数多少无所谓。无所谓的是值,有所谓的是记下。没记下的 run,我自己两周后也不认。不认的数,站点上不会出现。
对照实验里我吃过「两次都像 42」的亏。像,是记忆。记忆把缺省值和我随手设的值混在一起。混在一起的两次,表上差 0.01,我会以为方法动了。方法没动,随机源没封死。没封死要写进 limitation,不要写进「微小提升」。微小提升最像科学。科学要能再跑出来。再跑不出来,那 0.01 删掉。删掉比解释运气体面。
两周后自己要认
字段不齐的 run,两周后我自己也不认。不认的数,站点、简历、答辩页都不会出现。对照里吃过「两次都像 42」的亏:缺省值和随手设的值混在一起,表上差 0.01,以为方法动了。方法没动。没记下就当没跑。没跑不要写微小提升。 日志目录和 seed 要在开跑前建好。跑在会话里散落的 print,两周后找不到。找不到就当没跑。没跑的 0.01 不要进表。 开跑前把五样写成同一条记录:脚本路径、split、seed、checkpoint、日志目录。缺一样就不要开。开了也是噪音。