Warm Start、Cold Start与交叉验证
公开知识笔记
Warm Start、Cold Start与交叉验证
一句话理解:这不是A3Net网络中的某一层,而是一套包在整个模型外面的实验规则:训练时能看见哪些标签、哪些信息可以用于构图、最后在哪些样本上评分。
0. 先看它在整个研究中的位置
SIDER原始频率矩阵 + 药物SMILES + 副作用MedDRA特征
↓
【本笔记:划分训练/测试,并遮蔽测试标签】
↓
用训练部分构建副作用KNN图(不能混入测试标签)
↓
GAT + 交叉注意力 + 融合 + 内积,输出预测矩阵
↓
用训练位置计算损失、更新参数;用测试位置计算指标
因此,本笔记分散涉及四个环节:数据划分、KNN构图、训练损失、最终评估,而不是在解释某一个网络模块。
1. 出发点:原始数据本来就只有约5%有频率标签
所在位置:模型开始前的数据状态。 先理解这张原始矩阵,才能理解后续的warm/cold划分。
A3Net的频率矩阵有750行药物、994列副作用,共个潜在组合:
| 原始位置类型 | 数量 | 含义 |
|---|---|---|
| 有记录频率(1—5级) | 37,071(4.97%) | 已知的药物—副作用频率标签 |
| 0 | 708,429(95.03%) | 未知/未记录,不等于已验证“不会发生” |
数据库没有为每一种药物和每一种副作用都提供频率。一个0可能代表未报告、缺少频率资料、未被收集,或确实不存在关联;数据本身无法区分这些情形。
为什么这很重要? 模型不是从一张“绝大部分答案都已知”的表中随机遮题,而是从约5%的已知标签中再留出一部分检验能否补全。
2. Warm start与new-drug cold start:到底藏了什么
所在位置:模型训练前的“数据划分”步骤。 两种设定会决定模型在训练时已经见过什么。
Warm start:留出已知的“药物—副作用配对”
从37,071个已知频率位置中随机划分。例如10折中的一折大致为:
原始已知标签 37,071
├─ 训练:约33,364个已知配对(保留1—5级标签)
└─ 测试:约3,707个已知配对(训练时遮成0,评分时再取回真实等级)
原始未知位置:约708,429个,始终是未知
同一种药物的其他已知副作用,以及同一副作用在其他药物上的频率,可能仍在训练集里。
它在问什么? “模型已经见过这种药物和这种副作用的其他信息时,能否补出一条未见过的配对频率?”
为什么这样做? 它直接衡量矩阵补全能力,也能让每个已知配对都轮流接受测试;但它比真实新药场景容易,因为模型可能已从同一药物的其他记录中获益。
New-drug cold start:留出整种药物
按药物分组划分;测试药物整行的所有已知频率都不参与训练。
训练药物:保留其已知频率,用于训练
测试药物:其整行频率全部遮蔽,不能用于训练、构图或损失
测试药物的SMILES分子结构仍可作为输入,否则模型无法对新药产生表示;但它在训练中没有任何已知副作用频率。
它在问什么? “面对一款副作用记录未见过的新药,模型能否仅依据其化学结构及从训练药物学到的规律做预测?”
为什么这样做? 这更贴近新药早期风险提示,也更难;模型不能借助同一药物已知的频率轮廓。
3. K折交叉验证:如何轮流训练与考试
所在位置:覆盖上述划分的重复实验框架。 它不属于GAT或注意力层。
A3Net采用10折交叉验证:将可评估对象分成10份,每次选1份测试、其余9份训练,轮换10次,最后汇总指标。
- warm start:可评估对象是已知的药物—副作用配对;
- cold start:可评估对象是药物组,而非单个配对。
为什么这样做? 单次随机划分可能碰巧简单或困难;10次轮换可减少偶然性。它不能自动消除标签泄漏、参数调优偏差或未知项语义不清等问题,因此应报告各折均值和标准差。
4. 图模型必须遵守的顺序
所在位置:数据划分之后、GAT开始之前的KNN图构建。
每一折应按下面顺序执行:
- 确定测试配对(warm)或测试药物(cold);
- 遮蔽它们的频率标签;
- 只用剩余训练频率矩阵构建副作用KNN图;
- 训练GAT、注意力和内积解码器;
- 只在留出位置取回真实标签并计算指标。
为什么要先划分再构图? 副作用KNN图的边来自“各副作用在训练药物上的频率轮廓”。若先用全数据构图,测试标签会通过图边的相似度间接进入训练,构成标签泄漏。cold start下还要从频率轮廓中移除测试药物整行。
5. 训练损失中的未知项约束,以及warm start的“弱污染”
所在位置:模型已输出预测矩阵之后、反向传播更新参数之前。 这不是测试阶段的问题,而是“哪些位置可参与训练损失”的问题。详见矩阵内积解码与矩阵补全与待澄清知识点。
原本为什么要让未知项预测接近0.5?
原始矩阵约95%为未知。若损失只拟合37,071个已知频率,模型对大量未知位置几乎没有直接约束,可能给它们任意的、甚至很高的分数。作者于是对未知位置加入弱约束:
其意图是把未知组合暂时当作“低频基线”,抑制无依据的高频预测,并用避免大量未知项压过已知标签。
这里不是未知项的真实频率,也不是概率;它低于最小的已知频率等级1,是一个正则化锚点。现有材料未显示它有唯一的理论必然性,应视为作者的建模/超参数选择,并与PU学习等替代方案比较。
弱污染具体如何发生?
在warm start中,测试配对原本也有真实频率,例如4;为了不让模型直接看到答案,脚本先把它遮成0。这一步正确。但如果未知项损失把所有0都拉向0.5,代码就没有区分:
原本未知的0 → 可以施加弱的0.5约束
为了测试而临时遮住的已知标签 → 应完全排除,不参与任何训练损失
测试位置若也被拉向0.5,模型训练时不会获得答案4,却会获得“不要预测太高”的伪信号。之后再用真实答案4评分,结果可能被压低或扭曲。
正确的划分原则: 测试位置在训练期间既不能用于构图,也不能进入已知项损失或未知项损失;只应在训练结束后用于评估。
6. 仍未覆盖的新副作用冷启动
所在位置:对实验覆盖范围的检查,而非模型内部步骤。
A3Net报告了新药冷启动,但没有系统测试“训练中从未出现过的新副作用”。若要声称模型适用于所有未知实体,应另行测试:
- 新药;
- 新副作用;
- 新药与新副作用同时出现的双冷启动。
为什么要区分? 新药侧依赖分子结构泛化;新副作用侧依赖MedDRA特征和副作用图泛化。两者的难点不同,不能互相替代。
7. 复现时的最小检查清单
- 划分单位:配对、药物还是副作用;
- 原始已知标签、训练标签、测试标签及原始未知项的数量;
- 每折是否先划分、再重新构建KNN图;
- 测试位置是否从所有训练损失中排除;
- random seed、KNN的值、超参数选择方式;
- 10折的均值±标准差,而非只报告均值。
相关概念
- KNN图构建:为何图边也可能泄漏测试标签
- 矩阵内积解码与矩阵补全:预测矩阵和未知项损失
- 待澄清知识点:待用小矩阵手算理解加权损失与0.5基线
- 预测模型评价指标:每一折应计算什么
- 正例-未标注学习PU Learning:未知项如何进入训练和评估
相关论文
- A3Net精读笔记(A3Net)
被以下札记引用
2026-W35