返回列表

5th Place Solution

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

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

第5名解决方案

作者: Qishen Ha (Grandmaster)
比赛排名: 第5名

大家好,

这绝对是一场艰难的比赛,所以祝贺所有坚持到最后的参赛者。

感谢组织者,并祝贺所有的获胜者和我优秀的队友 @boliu0 @garybios,我们还要感谢 @hengck23@yasufuminakama,如果没有你们的分享,我们无法取得这样的成绩。非常感谢!p>

摘要

  • 我们没有使用Transformer Encoder,我们的架构仅包含CNN(384x384和512x512)+ Transformer Decoder(12~16层)。
  • 我们训练了5个骨干网络。EffNet B3/B5/B7,ResNet200D,eca-nfnet-l0。
  • 使用噪声注入进行正则化。
  • 使用rdkit生成的一些外部数据进行训练(但帮助不大)。
  • 在解码阶段进行集成。
  • 处理无效预测(这是分数低于0.6的关键技巧)。

噪声注入

这是一种非常古老的正则化技术,如果我没记错的话,2000年之前就有人在论文中提到过。在图像描述领域,在保证前序序列完全正确的前提下,预测下一个字符的准确率相当高。但是一旦一个字符预测错误,接下来的预测失败率就会逐渐增加,直到完全偏离。

所以我提出了噪声注入,即在训练期间随机用其他字符替换真实字符。被替换的字符在计算损失时会被忽略,但这并不意味着该技术对预测没有影响。虽然该字符本身不作为损失的一部分计算,但模型被迫在前一个字符错误的基础上正确预测下一个字符。

除此之外,该技术本身具有正则化效果。这使我们能够训练12-16层的transformer解码器。

官方外部数据

主办方在比赛期间发布了1000万条没有图像的InChI作为外部数据。

我们发现rdkit可以使用InChI生成图像,因此我们生成了部分图像(约100~200万张)作为外部数据并将其加入训练。但后来我们发现这部分数据并没有带来太大的提升。不过,由于它也没有降低性能,所以我们保留了它。

处理无效预测

在训练完所有模型后,我们在解码阶段对它们进行了集成。

原始预测的LB分数是0.62,然后我们使用rdkit对预测进行标准化,得到LB 0.60。

此时我们发现预测的InChI中约有14000行是无效的。为了替换这些无效预测,我们使用了3种方法来寻找它们的有效预测:

  • 单模型生成的预测(修复了约5000行)
  • 通过集成搜索前12个预测(修复了约2500行)
  • 对于化学式的数字部分,我们使用top2预测值进行解码(修复了约500行)
    • 例如,如果原始预测是C12H3,而第二个和第四个字符的top2预测值是11和4,那么我们将它们替换为C11H3和C12H4,然后解码下一部分。

我们在比赛截止日期的前一晚发现,用有效预测替换无效预测可以显著提高LB分数,由于时间不足,我们只处理了原始预测中14000条无效预测中的8000条,这将我们的LB分数从0.60提高到了0.57。

致谢

特别感谢Z by HP和NVIDIA赞助我配备双RTX6000 GPU的Z8G4工作站和配备RTX5000 GPU的ZBook笔记本电脑。
这无疑是过去半年Kaggle上数据量最大的比赛。
所以我在双RTX6000 GPU上尝试了pytorch的DDP并行训练,体验非常棒,基本上可以达到单GPU训练两倍的速度。

同比赛其他方案