返回列表

50th Place Solution

442. Bristol-Myers Squibb – Molecular Translation | bms-molecular-translation

开始: 2021-03-02 结束: 2021-06-03 药物研发 数据算法赛
第50名方案

第50名方案

作者: Jungwoo Park | 发布时间: 2021-06-04

源代码可在 GitHub 仓库 中找到。

大家好。感谢 Kaggle 和竞赛主办方。这是一次很棒的经历。我们非常努力,才勉强保住了银牌 🤣。

我们的方法是将这次竞赛视为一个翻译问题,而不是图像描述或 OCR 任务。因为 ViT 模型表明图像可以像句子一样处理,所以我们专注于翻译任务(从 图像 语言翻译到 InChI 语言)。实际上,模型结构和训练过程与其他方法差别不大,但详细配置(如超参数调整)是基于翻译论文的。

我们的基本策略是使用 extra_approved_InChIs.csv 中的大规模图像预训练 Transformer 模型,然后使用原始图像微调模型。

模型结构

我们使用 ViT 作为编码器,使用 原始 Transformer 作为解码器。根据 这篇论文,增加编码器深度比增加解码器深度更有效。因此,我们基础版本的模型有 12 层编码器和 6 层解码器,大版本模型有 24 层编码器。

数据集

如上所述,我们通过 rdkit 合成分子图像,从 extra_approved_InChIs.csv 创建了外部数据集。原始图像数量约为 2.4M,整个预训练图像数量约为 12M。这与 ViT 论文中提到的 ImageNet-21k 相当。ViT 论文的作者表明,图像 Transformer 的性能与数据集规模高度相关。这 12M 张图像确实很有帮助。

训练

我们使用 224x224 的 12M 图像训练基础模型约 15 个 epoch。然后我们使用 384x384 的 2.4M 图像进行微调。CV 分数分别为 0.99 和 0.83,LB 分数分别为 1.82 和 1.55。

我们通过复制 12 层并将它们堆叠到模型末尾来增加模型大小。所以大版本的模型有 24 层。我们预训练模型 5 个 epoch 并微调 15 个 epoch。它达到了 0.74 的 CV 分数和 1.44 的 LB 分数。

基本上,我们在 GCP 上使用单张 A100 GPU。为了加速训练,我们使用 apex 的融合层和 O2 amp 模式。
感谢 jarvislabs.ai,我们可以使用 8xRTX5000s。有趣的是,我们发现带有 DDP (DataDistributedParallel) 和 apex amp 的多 GPU 环境无法正常工作。我不知道为什么会发生这种情况,但这是 PyTorch Lightning 中的一个已知问题。因此在 8xRTX5000 环境中,我们使用原生 AMP 和 ZeRO 来提高计算性能。

预测

我们使用 贪婪搜索,而不是 集束搜索。这是因为推理时间真的很长(大模型处理 384x384 图像花费了约 7 小时)。
感谢 @nofreewill,我们应用了 rdkit 归一化,性能确实提升到了 1.37。

最后,特别感谢 jarvislabs.ai 提供的一些积分支持 👍👍

同比赛其他方案