返回目录
公开知识笔记 · 不进入目录

Warm Start、Cold Start与交叉验证

公开知识笔记

Warm Start、Cold Start与交叉验证

一句话理解:这不是A3Net网络中的某一层,而是一套包在整个模型外面的实验规则:训练时能看见哪些标签、哪些信息可以用于构图、最后在哪些样本上评分。

0. 先看它在整个研究中的位置

SIDER原始频率矩阵 + 药物SMILES + 副作用MedDRA特征
                         ↓
        【本笔记:划分训练/测试,并遮蔽测试标签】
                         ↓
     用训练部分构建副作用KNN图(不能混入测试标签)
                         ↓
       GAT + 交叉注意力 + 融合 + 内积,输出预测矩阵
                         ↓
        用训练位置计算损失、更新参数;用测试位置计算指标

因此,本笔记分散涉及四个环节:数据划分、KNN构图、训练损失、最终评估,而不是在解释某一个网络模块。

1. 出发点:原始数据本来就只有约5%有频率标签

所在位置:模型开始前的数据状态。 先理解这张原始矩阵,才能理解后续的warm/cold划分。

A3Net的频率矩阵有750行药物、994列副作用,共750×994=745,500750\times994=745{,}500个潜在组合:

原始位置类型 数量 含义
有记录频率(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图构建。

每一折应按下面顺序执行:

  1. 确定测试配对(warm)或测试药物(cold);
  2. 遮蔽它们的频率标签;
  3. 只用剩余训练频率矩阵构建副作用KNN图;
  4. 训练GAT、注意力和内积解码器;
  5. 只在留出位置取回真实标签并计算指标。

为什么要先划分再构图? 副作用KNN图的边来自“各副作用在训练药物上的频率轮廓”。若先用全数据构图,测试标签会通过图边的相似度间接进入训练,构成标签泄漏。cold start下还要从频率轮廓中移除测试药物整行。

5. 训练损失中的未知项约束,以及warm start的“弱污染”

所在位置:模型已输出预测矩阵之后、反向传播更新参数之前。 这不是测试阶段的问题,而是“哪些位置可参与训练损失”的问题。详见矩阵内积解码与矩阵补全与待澄清知识点。

原本为什么要让未知项预测接近0.5?

原始矩阵约95%为未知。若损失只拟合37,071个已知频率,模型对大量未知位置几乎没有直接约束,可能给它们任意的、甚至很高的分数。作者于是对未知位置加入弱约束:

(S^ij−0.5)2(\hat S_{ij}-0.5)^2

其意图是把未知组合暂时当作“低频基线”,抑制无依据的高频预测,并用α=0.03\alpha=0.03避免大量未知项压过已知标签。

这里0.50.5不是未知项的真实频率,也不是概率;它低于最小的已知频率等级1,是一个正则化锚点。现有材料未显示它有唯一的理论必然性,应视为作者的建模/超参数选择,并与PU学习等替代方案比较。

弱污染具体如何发生?

在warm start中,测试配对原本也有真实频率,例如4;为了不让模型直接看到答案,脚本先把它遮成0。这一步正确。但如果未知项损失把所有0都拉向0.5,代码就没有区分:

原本未知的0                 → 可以施加弱的0.5约束
为了测试而临时遮住的已知标签 → 应完全排除,不参与任何训练损失

测试位置若也被拉向0.5,模型训练时不会获得答案4,却会获得“不要预测太高”的伪信号。之后再用真实答案4评分,结果可能被压低或扭曲。

正确的划分原则: 测试位置在训练期间既不能用于构图,也不能进入已知项损失或未知项损失;只应在训练结束后用于评估。

6. 仍未覆盖的新副作用冷启动

所在位置:对实验覆盖范围的检查,而非模型内部步骤。

A3Net报告了新药冷启动,但没有系统测试“训练中从未出现过的新副作用”。若要声称模型适用于所有未知实体,应另行测试:

  • 新药;
  • 新副作用;
  • 新药与新副作用同时出现的双冷启动。

为什么要区分? 新药侧依赖分子结构泛化;新副作用侧依赖MedDRA特征和副作用图泛化。两者的难点不同,不能互相替代。

7. 复现时的最小检查清单

  • 划分单位:配对、药物还是副作用;
  • 原始已知标签、训练标签、测试标签及原始未知项的数量;
  • 每折是否先划分、再重新构建KNN图;
  • 测试位置是否从所有训练损失中排除;
  • random seed、KNN的KK值、超参数选择方式;
  • 10折的均值±标准差,而非只报告均值。

相关概念

相关论文

  • A3Net精读笔记(A3Net)
Warm Start、Cold Start与交叉验证|每周札记