第 14 名解决方案(公开榜第 7 名):我们只需要频繁保存检查点
作者: monnu (团队成员:yu4u, monnu)
发布时间: 2024-07-09
竞赛排名: 第 14 名 (公开榜第 7 名)
第 14 名解决方案(公开榜第 7 名):我们只需要频繁保存检查点
祝贺所有获奖者,并感谢组织者举办这场有趣的比赛。
众所周知,共享目标和非共享目标具有完全不同的倾向,因此我们构建了不同的流程。
非共享目标部分 (yu4u)
在非共享目标部分,最重要的观察结果是,非共享目标的验证分数过拟合非常快,甚至在训练的一个 epoch 内就会发生。
因此,我们将验证间隔改为 0.01 个 epoch,结果成功获得了一个不过拟合的检查点。
交叉验证策略 (CV Strategy)
模拟非共享目标的 CV 策略也很重要。
我们使用了 5 折交叉验证策略,其中 BB1、BB2 和 BB3(移除了 BB2 构建块)构建块被分为 5 折。然后我们移除了其他数据,以便训练数据仅包含训练构建块,验证数据仅包含验证构建块。
我们在此处发布了生成 CV 折的 notebook:这里。
模型
ChemBERTa-77M-MTR
训练
- 5 折交叉验证。
- AdamW 优化器,LR=1e-3 (固定), weight_decay=1e-5, batch_size=512。
- 训练一个 epoch,每 0.01 个 epoch 间隔验证一次。
选择最佳检查点
- 我们发现某些折的 TP 分布与整个训练数据不同,因此我们只使用了与整个训练数据具有相似 TP 分布的 fold0 和 fold2。
- 在我们的训练中,我们甚至没有完成一个 epoch 的学习,因此单次训练运行中有些数据未被使用。通过使用多个种子(每折 11 个种子)进行训练,我们利用了所有数据。
- 最后,我们排除了 CV 分数极低的种子,并使用 19 个模型的集成作为最终结果。
- 在选择最佳检查点时,我们使用了两种策略:(1) 基于三个目标的平均分数选择单个检查点,(2) 基于每个目标的分数选择三个检查点。在私有榜分数中,前一种策略更好。
主要策略是通过连接 ECFP 的特征来改进公开 1DCNN 模型。
作为一个选项,我们还训练了带有 ChemBERTa 额外特征的模型。
交叉验证策略
- 我们使用了 5 折分层 K 折 (Stratified Kfold) 分割。
- 我们在此处发布了生成共享目标 CV 折的 notebook:这里。
预处理
- ECFP:使用 rdkit。r = 4, bit = 2048 或 3072
- 1DCNN:将 SMILES 字符串编码为数值并转换为固定长度的向量
- chemberta_feature (可选):使用 ChemBERTa 模型推断 SMILES 字符串,并使用 384 维输出作为特征。
模型
- SMILES 通过嵌入层, followed by 4 层一维卷积 (1D convolution)
- ECFP 通过全连接层 (FC layer) 到 128 维
- 上述输出被连接并通过全连接层输出 3 个目标的二分类分数
- 可选地,ChemBERTa 的 384 维输出可以通过全连接层然后连接
训练
- 5 折交叉验证。
- AdamW 优化器,LR=1e-3, weight_decay=0.05, batch_size=4096。
- num_epochs=25
分数
训练模型的分数如下:
| 模型名称 |
ECFP |
ChemBERTa 特征 |
CV |
公开榜 (mask noshare) |
| exp031 |
r=4, bit=2048 |
否 |
0.6589 |
0.352 |
| exp032 |
r=4, bit=2048 |
是 |
0.65934 |
0.351 |
| exp039 |
r=4, bit=3072 |
否 |
0.66001 |
0.350 |
| 平均集成 |
- |
- |
- |
0.352 |
最后,我们提交了平均集成模型。