3.8.1 三个数据集,三种用途
本章前几节的注意力都在模型上:特征怎么造、消息怎么传、注意力怎么配。模型定型之后还剩三件事——参数怎么拟合、训练多久停止、成绩怎么报告。回答它们的不是新架构,而是一条纪律:把数据切成三份,各司其职。训练集(training set)拟合参数 θ,3.4、3.5 节的梯度下降只看它;验证集(validation set)承担一切“选择”——选轮数、选超参、选架构、选种子,凡是“比较若干候选后取其一”的动作,只对它做;测试集(test set)只用于最终报告,且只评估一次。图 3.8-1 画出三者之间允许与禁止的信息流向。
“只评估一次”应取字面意义。每回在测试集上算一次指标、看一眼结果、再回去改决定,都是一次选择:测试分数参与了决策,测试集就当了一回验证集。选择会留下系统性的痕迹——被挑中的必然是碰巧在测试集上占便宜的配置,报告的数字随之虚高。
乐观偏差(optimistic bias):评估流程中混入选择(挑超参、挑种子、挑指标、挑划分)之后,被报告的性能相对真实泛化性能的系统性高估。来源不限于测试集调参,任何“看分再决定”的环节都贡献一份;偏差随选择次数累积,且无法事后从单个数字里扣除。
Cawley 与 Talbot(2010)给出定量警告:模型选择引入的偏差,量级常与不同算法之间的真实差距相当。换句话说,靠测试集“调”出来的几个百分点优势,可以完全由偏差本身制造,与模型好坏无关。分子数据还有第二条纪律:先划分,再做统计。去重、无机盐剥离、价键修复属于清洗,可在划分前完成(2.6 节);一旦涉及统计——用全体数据估缺失值、按全体分布标准化描述符、看全体分子挑特征——就只能限在训练集内部或各子集各自进行。统计量偷偷看过测试分子,测试集的信息便顺着特征流回训练过程,这是数据泄漏(data leakage)最常见的形态,1.3 节的随机划分虚高与 2.6 节的重复分子问题都是它的近亲。划分本身要一次做完、写死种子:一轮实验从头到尾用同一份划分文件;中途重划再挑一份,与挑种子同罪。
测试集只能碰一次。纪律条款:① 划分产生后立即“上锁”——测试集存为独立文件,实验代码只挂载、不改动;② 每次测试评估都记录在案(日期、配置、结果),无论动机是正式报告还是“只想看一眼”;③ 最终报告之前,不允许任何依据测试结果的决定——换模型、调超参、加轮数、换指标都不行;④ 违反之后唯一干净的补救是重新划分测试集并重做全部选择,“事后减去偏差”没有公式。
3.8.2 早停:训练长度是被忽视的超参数
图 3.8-2 的双曲线是深度学习里最常见的实验图:训练损失一路下降,验证损失先降后升,谷底之后两条曲线分道扬镳。早停(early stopping)的规则朴素到一句话——验证损失连续若干轮不创新低就停止训练。它的地位远不止工程技巧:训练长度本身就是一个超参数,而且在千级分子的小数据集上,常常是分量最重的正则化手段。
为什么停得早反而泛化得好?一条有力的解释把训练时长与模型复杂度挂钩。参数个数在训练中不变,但模型能实现的函数并非一步到位:梯度下降从初始点出发,先拟合主导趋势,再逐步拟合越来越细的结构——先粗后细,最后才轮到个别样本的噪声(即文献中的谱偏置现象)。训练到第 t 轮,模型“实际上用掉”的自由度随 t 单调增长;t 足够大时,网络有时间把训练集的每个角落都拟合到位,连同噪声一起。这样看,训练时长是一个连续旋钮,控制模型的有效复杂度。早停把旋钮拧到验证损失最低处,等效于把模型限制在“复杂度恰好”的函数族里。它与权重衰减殊途同归:后者给参数范数设上限,前者给拟合时间设上限,都在压缩可及的函数空间——这就是隐式正则化(implicit regularization)的含义(Prechelt, 1998)。小数据上正则化收益最大,千级分子的任务早停常有决定性作用,道理在此。
权重衰减:显式正则化
在损失函数中加惩罚项 λ‖θ‖²,直接压制参数范数;约束写在目标函数里,作用贯穿训练全程,强度由 λ 显式控制,与训练时长无关。早停:隐式正则化
不触碰损失函数,靠截断训练时间约束可及的函数族;强度由轮数隐式决定,须靠验证曲线定位,且与数据量、学习率调度耦合,不能一次设定永久有效。具体何时停,Prechelt 把经验规则整理成一族可检验的准则,核心量是广义损失(generalization loss)——当前验证损失相对历史最优的恶化幅度:
现实实现多采用其朴素变体——耐心(patience):允许验证损失连续 P 轮不创新低,P 轮耗尽即停。耐心对付的是噪声:小数据上验证损失本来就会抖动,一轮回升未必是过拟合的开始,P 取 5~10 轮可避免在杂音上过早离场;P 过大则白白陪跑,过拟合已发生还不停。
停止之后还有一步容易忽略——恢复。触发停止时参数早已走过谷底,直接拿末态参数报告是错的;规范做法是每轮(或每创新低时)保存检查点(checkpoint),停止后回滚到验证最优的那一份。早停还与学习率调度相互作用:调度后期步长衰减,验证曲线的抖动幅度随之收窄,“连续 P 轮不创新低”在大小两种步长下的含义并不同,调了调度,耐心也应复查一遍。
习题 3.8-1
某模型逐轮验证损失如下:
| 轮次 t | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|
| Eval(t) | 0.302 | 0.296 | 0.288 | 0.293 | 0.301 | 0.314 |
① 用式 (3.8-1) 的 GL 判据(α = 5%)判定停止轮次;② 改用耐心 P = 2 判定;③ 两种判据下各自应报告哪一轮的参数?结论不同时如何取舍。
参考解答① 历史最优在第 7 轮出现,min = 0.288。逐轮计算:第 8 轮 GL = 0.293/0.288 − 1 ≈ 1.7%;第 9 轮 ≈ 4.5%;第 10 轮 = 0.314/0.288 − 1 ≈ 9.0%,首次超过 5%,停止于第 10 轮。② 最优仍停在第 7 轮;第 8、9 两轮连续未创新低,耐心 2 在第 9 轮耗尽,停止于第 9 轮。③ 两种判据的报告参数都取第 7 轮的检查点——停止轮次只决定何时不再训练,评估与下游使用一律回滚到验证最优。取舍原则:GL 对相对恶化幅度敏感,信号陡、噪声小时反应快;耐心对“持续回升”敏感,抗单轮抖动。验证曲线噪声大者宜耐心,干净者宜 GL;工程上两者常并用——任一触发即停,检查点保底。
3.8.3 超参搜索:网格、随机与贝叶斯
超参数(hyperparameter)在训练开始前固定,训练过程不为它计算梯度:学习率、批大小、层数、隐藏维、消息传递轮数、dropout、耐心。它与参数的这一区别决定了搜索方式——只能试。三类策略按维度与预算取舍。网格搜索(grid search)把每个超参取若干档做笛卡尔积;维数一高组合数爆炸,而 Bergstra 与 Bengio(2012)指出关键事实:多数任务只有少数超参真正重要(低有效维数),网格把大量预算花在不重要的维度上。随机搜索(random search)在同样预算下覆盖更多组“重要维度取值不同”的组合,效率反超网格,实现也最简单,应当是分子 ML 的默认起点。贝叶斯优化(Bayesian optimization)以代理模型刻画“超参 → 验证分”的响应面,逐次挑选最有信息量的下一组尝试;单次训练昂贵而总预算有限时值得启用,粗搜给出不错的区间后接入尤其划算。
采样尺度也有讲究:学习率务必按对数尺度取点,线性采样会把绝大多数尝试挤进无效的高值区。分子 ML 的常调清单与调节要点见表 3.8-1。
| 超参 | 作用对象 | 敏感度与调节要点 |
|---|---|---|
| 学习率 | 每步更新的幅度 | 通常最敏感;对数尺度搜索(约 10−4~10−2),与批大小联动 |
| 批大小 | 梯度噪声与有效步长 | 小数据常用 32/64;改批大小须复查学习率 |
| 消息传递轮数(层数) | 感受野半径 | 每轮跨一键;2~4 常已足够,过大受过平滑与过拟合夹击(3.5 节) |
| 隐藏维 | 单轮表达容量 | 与数据量匹配;千级分子上百维已属奢侈 |
| dropout | 正则强度 | 图模型上常取 0~0.2,读出前与注意力系数上酌情 |
| 早停耐心 | 训练时长 | 验证曲线噪声越大取值越大;与学习率调度联调(3.8.2) |
网格并未出局。搜索与消融是两种实验:搜索要的是“找到好配置”,随机优先;消融要的是“每个因素各贡献多少”,须逐因子受控变化、逐档覆盖,网格式的整齐设计反而合适。把消融当搜索做(只挑最好的一档报告),或把搜索当消融讲(从零散的随机点硬讲因果),两头都错。
数据到万级,划一次三份尚可;千级以下,单次划分的验证集只有几百个分子,选择依据太薄。此时用 k 折交叉验证(k-fold cross-validation):把训练数据(测试集始终在外)切成 k 份轮流担任验证,k 个验证分平均后作为选择依据。分子数据下的分层有两个特殊细节。其一,按骨架分层:每折内的骨架分布应与全体一致,否则某折恰好集中了某个化学系列,折间成绩差异被化学多样性差异淹没,选择信号失真。其二,多任务标签对齐:Tox21 这类 12 个任务的数据集,各任务阳性率差异很大,若只按单任务分层,其余任务的阳性率在各折间漂移;迭代分层(iterative stratification)按“每任务每折配额”逐样本分配,把全部任务的标签分布同时对齐。
还有一层偏差要说破:交叉验证给出的是选择依据,不是成绩。在 k 折均值上挑出最优配置后,同一组折上的均值已经偏高——挑最大值当然偏大,机理与测试集调参同构,只是换了场所。要无偏的成绩,要么用冻结的外层测试集,要么用嵌套交叉验证(nested cross-validation):外层折只评成绩,内层折做选择,两层职责不相交。实操上另有一个细节:超参定死之后,用训练加验证的合并数据重训最终模型是正当的(信息只往外流,不再回流),但验证集消失后早停信号随之消失——耐心值要从交叉验证里一并带出来,或在合并数据中留一小条验证带专供早停。
3.8.4 评估作弊清单:机理、案例与防范
以下六条逐条给出机理、案例与防范。多数条目算不上造假,只是“顺手”的操作——危险恰在于此:每一条都让数字变好,且每一条都显得有理由。Kapoor 与 Narayanan(2023)系统考察了 17 个学科领域的 294 篇论文,结论是:数据泄漏在采用机器学习的学科中普遍存在,普遍导致过度乐观的结果与复现失败——泄漏不是分子 ML 的特产,而是这门手艺的通病。
随机划分虚高。机理:随机划分把同系列分子同时放进训练与测试,模型只需认出系列即可答对近亲,考题泄露给了课本。案例:1.3 节已示明,同一模型在随机与骨架两种划分下的 AUC 可差数个百分点。防范:骨架划分作主报告口径,随机划分只作参照;两口径并列时逐处标明。
重复与近重复跨集。机理:同一分子(或 Tanimoto 相似度极高的近亲)分居两集,等于把答案抄进考场。案例:2.6 节的清洗流程处理盐型、互变异构与重复条目;Fourches 等(2010)示明,结构上的小错足以实质性改变 QSAR 模型的质量。防范:去重必须发生在划分之前;高相似对(如 Tanimoto ≥ 0.85)要么合并、要么强制同集。
测试集调参。机理:见 3.8.1——测试分数参与选择,测试集降格为验证集,成绩带乐观偏差。案例:“测试集上第 37 轮最好,那就训 37 轮”是最常见的隐性版本。防范:轮数、超参、种子的每个决定只写验证集依据;测试评估一次定格。
指标选择偏差。机理:多任务数据集有十几个数字可报,只挑最亮的一个,选择性展示取代全貌。案例:Tox21 的 12 个任务 AUC 参差,只报最好任务等效于挑 12 次再取最大。防范:主指标与主任务在协议里预先写死;正文报全任务均值,附录报单任务。
多种子挑最好。机理:种子间的分数是随机变量,取 k 个种子的最大值,期望系统上移,k 越大偏得越多。案例:“跑 10 个种子报最好的 0.86”与“报 10 个种子的均值 0.83”是两个实验。防范:报均值±标准差(3.8.5);确需选一个种子做后续分析,规则(如取中位)要预先写明。
跨口径比较。机理:不同划分、不同数据规模、不同清洗版本下的数字不可比,直接并列制造虚假优势。案例:论文 A 用随机划分,论文 B 用骨架划分,把两表数字抄进同一行。防范:基线在自己的协议下重跑,比较只在同口径内进行。
3.8.5 随机性与不确定性的报告
分子 ML 的随机性来源不少:权重初始化、数据打乱次序、dropout 掩码、GPU 归约顺序;划分本身(换种子重划)也是一支。小数据把每一支都放大——千级分子上换个种子 AUC 摆动零点几个百分点是常事。Bouthillier 等(2021)的基准研究示明:这类方差与“不同算法之间的差距”经常处于同一量级,单种子单次训练的数字分不清“模型好”与“运气好”。比较两篇各报一个数字的论文,很多时候是在比较两次抽签。
报告规范因此从“一个数”改为“均值±标准差”。k 个种子(建议至少 5 个)给出样本均值与样本标准差,再配一个区间更完整:
种子数少时区间很宽——这本身就是信息:5 个种子撑不起的结论,就该明说撑不起。比较两个模型时,区间重叠不构成显著性检验,却是一道廉价的护栏:区间互叠还宣称显著领先,读者有权怀疑。
多种子报告规范。① 种子数不少于 5,写明种子集合(如 0~4);② 分离两类波动:同一划分下只变种子,量“种子方差”;另用若干次重划量“划分方差”,两者不混报;③ 正文只进均值±标准差与区间,单种子结果降为探索性;④ 每个种子的训练轮数以各自的早停为准,不共用一条曲线;⑤ 硬件、轮数、批大小随结果一并给出——可复现性的成本主要藏在这些细节里。
习题 3.8-2
同一骨架划分下,某 GCN 以 5 个随机种子训练,测试 AUC 依次为 0.842、0.856、0.838、0.847、0.862。① 求均值与样本标准差;② 按式 (3.8-2) 给 95% t 区间;③ 另一篇工作在同一任务上单种子报 0.861,能否断言对方模型更优?
参考解答① 均值 x̄ = (0.842 + 0.856 + 0.838 + 0.847 + 0.862)/5 = 4.245/5 = 0.849。偏差为 −0.007、+0.007、−0.011、−0.002、+0.013,平方和 0.000392,样本方差 s² = 0.000392/4 = 0.000098,s ≈ 0.0099。② k = 5,t0.975,4 = 2.776,半宽 = 2.776 × 0.0099/√5 ≈ 0.0123,区间为 0.849 ± 0.012,即 (0.837, 0.861)。③ 不能。0.861 恰好压在区间上沿之内,与本地种子分布完全相容——本地第 5 个种子自己也跑出过 0.862。对方只报单种子,未给出自身波动,比较缺少基础;正确的问法是把对方模型纳入同一协议,多种子重跑后再比较区间与逐种子配对差异。
3.8.6 “提升消失”与实验预注册
把上述纪律合起来用,会反复撞见一个现象:新方法在随机划分下的几个百分点优势,换到骨架划分后缩水,甚至反转(图 3.8-3)。机理不难找:随机划分让“记忆近亲”变得有利,容量更大的新模型从中获益更多,优势的一部分其实是泄漏发的红利;骨架划分掐断近亲,剩下的才是真本事。MoleculeNet 基准从建立之初就把随机与骨架两种划分的成绩并列报告,用意正在于此(Wu et al., 2018)。看到“新架构大幅领先”时,第一反应不是看架构,是看划分。
一个合成而典型的情节。新图模型在 Tox21 随机划分下报 AUC 0.85,基线 0.82,论文宣称“3 个百分点的显著提升”;换骨架划分重跑,0.79 对 0.785,优势缩进噪声带——而这一量级的多种子标准差就有 ±0.01(习题 3.8-2)。数字是编的,情节是真的:每一项都能在文献里找到原型。排查的次序应当是:先对划分,再对种子,最后才轮到架构。
把自律制度化,办法是预注册(preregistration):实验开始前把协议写完并封存——划分方式与种子、清洗与去重规则、模型清单与超参搜索空间、主指标与主任务、种子数与统计口径、比较对象;然后按协议跑,结果无论如何都报。机理在于封死“分岔小径”:没有预注册,每一步都留着“看情况再定”的余地,十几个这样的自由度叠加,无需作弊就能把噪声调成成绩。预注册把决定权从“看到结果之后”移到“看到结果之前”,乐观偏差无处附生。个人实验的轻量做法:协议文件连同代码一并提交,先记下版本哈希再跑实验;确有偏离,作为显式修订记录在案,而不是悄悄改掉。
本章自 3.1 的三层抽象走到消息传递、注意力与多任务,评估纪律是它们共同的地面。表示可以越来越精巧,地面不能松:划分、早停、超参、种子四件事上不诚实的数字,架构再新也没有意义。第 4 章转入分子生成,评估对象从“分数对不对”变成“分子真不真、新不新”,那里的作弊清单更长,纪律只会更严。
习题 3.8-3
论述题:为自己的 Tox21 实验写一份预注册协议。要求至少覆盖:划分与清洗条款(含去重阈值、骨架划分的种子与比例)、模型与超参搜索空间、主指标与全部报告项(含单任务与多任务均值的关系)、种子数与统计口径、测试集的“上锁与解锁”条款;并写明两类情形的处置——① 实验中途想换架构;② 看过一次测试结果后发现主指标选错了。
参考解答协议要点示例。数据条款:以 2.6 流程清洗,Tanimoto ≥ 0.85 的分子对强制同集去重,骨架划分 80/10/10,种子写入协议;测试集存独立文件,实验代码只读。模型条款:GCN 与 AttentiveFP 各一个,超参搜索空间(学习率对数三档、轮数三档、dropout 两档)与随机搜索预算固定,选择只看验证折。统计条款:主指标为 12 任务 ROC-AUC 的宏平均,主任务集合为全部 12 个,种子 0~4,报均值±标准差与式 (3.8-2) 区间;单任务成绩只进附录。测试条款:解锁条件为全部选择完成,评估一次,结果连同配置归档。处置①:换架构属于新实验,须走完整协议并重新封存;已跑结果照报或明确标注为探索性,不得因“不好看”而撤回。处置②:主指标写死于协议,选错是协议的成本,结果照报;若必须改,注册一项显式修订,重划测试集重做,旧数字作废。评分要点:测试条款是否可执行(上锁、日志)、统计口径是否先于结果确定、两类偏离是否都有显式出口而非静默修改。
关键术语
- 验证集 (validation set)
- 只承载“选择”职责的数据子集:选超参、选轮数、选模型、选种子。
- 乐观偏差 (optimistic bias)
- 选择混入评估后,报告性能相对真实泛化性能的系统性高估。
- 数据泄漏 (data leakage)
- 测试信息经任何通道回流到训练或选择过程,使评估失去独立性。
- 早停 (early stopping)
- 验证损失不再改善即终止训练;把训练时长当超参数的隐式正则化。
- 广义损失 (generalization loss)
- 当前验证损失相对历史最优的相对恶化量,量化“该不该停”。
- 耐心 (patience)
- 允许验证指标连续多少轮不创新低才停止的早停参数,用于抵御噪声。
- 检查点 (checkpoint)
- 训练中保存的参数快照;早停后回滚到验证最优的一份再作评估。
- 隐式正则化 (implicit regularization)
- 训练过程自身(如有限训练时长)对模型有效复杂度的约束。
- 随机搜索 (random search)
- 在超参空间随机采样的搜索;低有效维数下同预算效率胜过网格。
- k 折交叉验证 (k-fold cross-validation)
- 训练数据轮流切片互为验证,以均值作选择依据的小数据方案。
- 嵌套交叉验证 (nested cross-validation)
- 内层选模型、外层评成绩的两层结构,选择与评估职责不相交。
- 预注册 (preregistration)
- 实验前封存协议(划分、指标、种子、比较对象),先定规则后看结果。
参考文献与延伸阅读
- Prechelt L. 1998. Early stopping—but when? In: Orr GB, Müller K-R, eds. Neural Networks: Tricks of the Trade. Lecture Notes in Computer Science 1524. Berlin: Springer. 55–69.
- Bergstra J, Bengio Y. 2012. Random search for hyper-parameter optimization. Journal of Machine Learning Research 13:281–305.
- Cawley GCC, Talbot NLC. 2010. On over-fitting in model selection and subsequent selection bias in performance evaluation. Journal of Machine Learning Research 11:2079–2107.
- Wu Z, Ramsundar B, Feinberg EN, et al. 2018. MoleculeNet: a benchmark for molecular machine learning. Chemical Science 9:513–530.
- Fourches D, Muratov E, Tropsha A. 2010. Trust, but verify: on the importance of chemical structure curation in cheminformatics and QSAR modeling research. Journal of Chemical Information and Modeling 50:1189–1204.
- Kapoor S, Narayanan A. 2023. Leakage and the reproducibility crisis in machine-learning-based science. Patterns 4:100804.
- Bouthillier X, Delaunay P, Bronzi M, et al. 2021. Accounting for variance in machine learning benchmarks. Proceedings of Machine Learning and Systems 3:747–769.