616. NeurIPS 2024 - Predict New Medicines with BELKA | leash-BELKA
我们要感谢 Kaggle 组织了如此有趣的竞赛。我们也感谢 @tetsuya3510、@hengck23 和 @ahmedelfazouan 分享了影响我们解决方案的 Notebook。非常感谢我的队友 @yyyu54、@Ogurtsov 和 @antoninadolgorukova 并肩作战,直到我们用完了所有 480 次提交机会。我们都在同一时间达到了竞赛大师(Competitions Master)等级!
我们针对具有共享构建块(Shared Building Blocks)和非共享构建块的分子采用了不同的方法。
我们使用了 CNN、GBDT 和 GNN 模型的集成。
这是基于 @ahmedelfazouan 的优秀公开 Notebook 的两个变体。
数据: 与公开 Notebook 中使用的数据集相同(链接)。
模型架构:

主要改动: 我们将滤波器大小从 32, 64, 96 加倍至 64, 128, 192;卷积核大小从 3, 3, 3 增加至 19, 9, 3。ReLU 激活函数被替换为 SiLU。此外,对于第二个模型,我们在嵌入层后添加了一个双向 GRU 层,并将其与全局最大池化后的卷积层连接起来。
训练参数: 见文末表格。
我们对上述两个模型进行了加权平均,这两个模型分别使用了包含和不包含验证集的数据进行训练,总共使用了四个 CNN 模型。
为了达到最大的多样性,模型在不同的训练数据子集上使用不同的特征进行训练。所有模型均针对每种蛋白质单独训练(代码链接)。
数据: 包含所有结合分子的样本以及非结合分子的随机样本(GBDT 总共 5000 万或 4000 万,chemprop 为 1000 万)。
特征: 对于一个模型,我们将 chemprop(版本 2.0,FFN 中第 3 个线性层的输出)的预测值添加到 SECFP4 (bits=1024);对于另外两个模型,我们将 BB 活性特征(当给定 BB smiles 出现在给定位置时结合的化合物比例)添加到 ECFP4 (bits=1024)。对于 LightGBM,我们使用了 SECFP4 (bits=1024) 和 SECFP6 (bits=2048)。
训练: 一个模型在训练数据的 5 个部分上训练了五次,每个部分缺少 20% 的随机 BB,其他模型在 5000 万样本上训练(排除验证集和测试集子集)。
XGBoost 训练参数: eta 0.05, max_depth: 25, subsample: 0.2, sampling_method: gradient_based, colsample_bytree: 0.4, min_child_weight: 4, gamma: 2, num_boost_round = 5000, early_stopping_rounds = 30。
LightGBM 训练参数: max_depth: 11, bagging_fraction: 0.9, learning_rate: 0.05, colsample_bytree: 1, colsample_bynode: 0.5, lambda_l1: 1, lambda_l2: 1.5, num_leaves: 490, min_data_in_leaf: 50。
我们使用了 @hengck23 的这个公开 Notebook,并做了 minor 改动(原子类型列表被截断为训练/测试集分子中的实际原子)。
对于这部分,我们使用加权平均来集成每种蛋白质的预测,使用本地分数(与 leaderboard 完美相关):BRD4: 4 个模型,HSA: 7 个模型,sEH: 5 个模型。
为具有非共享 BB 的分子创建可靠的交叉验证很困难,因此我们基于公开榜分数进行了两种集成方法,并将它们用于最终提交。
对于此解决方案,为了最小化由于公开榜和私有榜分数差异引起的波动,我们对以下两个基于 ChemBERTa 的模型进行了集成,这两个模型在非共享块中对所有蛋白质都给出了相对较好的预测。我们将每个模型的预测转换为排名,以考虑模型之间的尺度差异。
模型架构:

训练参数: 见下表。
对于上述两个模型,在五个随机折上对每个 epoch 进行预测。这些预测的平均值是在总共 5 个 epochs × 5 个折 × 2 个模型上计算得出的。
我们使用了一个 XGBoost 模型(ECFP4 特征,如上所述在 5 个训练数据子集上训练,但在具有非共享 BB 的子集上进行验证),以及七个具有不同分类头和训练参数的 ChemBERTa 模型。我们对每种蛋白质的每个模型进行评分,并考虑分数和预测的多样性来选择权重(BRD4: 4 个模型,HSA: 3 个模型,sEH: 4 个模型)。很难详细描述所有八个模型,因此权重最高的两个模型在最终提交 1 中进行了描述(欢迎随时提问!)。
| 设置 | CNN | ChemBERTa |
|---|---|---|
| 优化器 | Adam | Adam |
| 学习率 | 1e-3 | 3e-4 |
| 优化器动量 | beta1, beta2 = 0.9, 0.999 | beta1, beta2 = 0.9, 0.999 |
| 优化器权重衰减 | 0.05 | 0.01 |
| 批次大小 | 4096 | 1024 |
| 训练轮次 | 50 | 5 |
| ReduceLROnPlateau | patience, factor = 3, 0.05 | / |
| 早停 (EarlyStopping) | patience = 5 | / |