返回列表

Solution 20

402. OpenVaccine: COVID-19 mRNA Vaccine Degradation Prediction | stanford-covid-vaccine

开始: 2020-09-11 结束: 2020-10-06 药物研发 数据算法赛
Solution 20

解决方案 20

作者: CPMP, Psi, Dieter
比赛: Stanford COVID-19 Vaccine

非常感谢 Kaggle 和斯坦福大学举办这次挑战赛。很高兴看到 Kaggle 社区为抗击 COVID-19 做出贡献。我也要感谢 Psi (@philippsinger) 和 Dieter (@christofhenkel) 在最后一周加入我,尽管他们在赢得 GRL 比赛后已经筋疲力尽。而且那一周他们还得为此写一篇论文。最后,我要感谢“上帝”多给了我们一天时间。如果没有这一天,我们的排名大概会在 140 名左右。

在描述我们的解决方案之前,让我先回答这个问题:不,我没有重用我在比赛早期分享的距离注意力机制。原因是,一个节点最多只能有 3 条边:它的前序节点、后继节点和配对节点。对我来说,通用的注意力机制似乎有点大材小用了。在阅读了几支顶尖团队的解决方案,看到他们几乎都直接或通过公共笔记本重用了我的距离注意力机制后,我将其编写出来并与我们的最佳模型进行了比较。结果稍微差一点,根据变体的不同,差距在 0.001-0.002 之间。但这在集成模型中可能会有所帮助。

话虽如此,提供的结构只是给定 bpps 矩阵下最可能的结构,使用 bpps 概率应该会有帮助。Dieter 一直在研究这个问题,并在结束前 2 小时完成了第一个模型。我们将其与我们的最佳模型混合,获得了一些提升。Psi 和我研究了我们组队时我拥有的模型的变体,我们的最佳模型就是那次合作的成果。当然,这是一种简化,我们不断交流想法和信息,每个人都对解决方案的各个部分做出了贡献。

现在让我描述一下我们的解决方案。

数据

除了比赛数据外,我们没有使用额外的序列。像大家一样,我们利用这些数据为第 i 个节点创建了一个节点序列:

  • 序列字符的 one-hot 编码,
  • 结构字符的 one-hot 编码,
  • 环预测字符的 one-hot 编码。
  • 如果节点配对则为 1 的二进制值。
  • 配对节点的索引,如果节点未配对则为 i。
  • 使用 RNAlib 计算的 pp 和熵。
  • 未配对概率(1 - 沿一个维度的 bpps 总和)。

模型

整体结构是一个线性层,用于从节点特征创建大小为 512 的嵌入,然后是 3 个注意力/卷积层,最后是一个输出 5 个目标的前馈层。

注意力/卷积层类似于 Transformer 编码器结构:一个注意力层后跟一个带有跳跃连接的卷积块。

注意力层是一个配对注意力层,后跟一个双向 GRU。当然,GRU 不是注意力,但在这里它的作用类似于注意力层,即序列中的每个节点都关注其两个相邻节点。

配对注意力是我们本可以使用上面讨论的 NFL 注意力的地方。相反,我们只是连接了配对节点的嵌入。为此,我们使用配对索引置换节点序列,然后用配对二进制值对其进行掩码。然后我们将连接结果输入 GRU。

卷积层是参考 EfficientNet 卷积块设计的。

通过上述方法,我们通过大量 Bagging 模型获得了 0.241 的 Public LB 成绩。

最后一天,为了寻找灵感,我们查看了公共 Kernel,决定像 这个笔记本 中那样添加具有更大卷积核尺寸的卷积。我不知道这段代码的原作者是谁,但我想感谢他/她。通过以相同方式堆叠我们的卷积块,使用越来越大的卷积核尺寸,我们将 Public LB 提升到了 0.23646,Private LB 为 0.34910,这相当于第 30 名。

在某个阶段,我们通过将一个或多个 GRU 替换为 LSTM 来训练模型的变体。鉴于我们有三个 GRU 层,这可以生成 8 个变体。Bagging 这 8 个变体是我们直到最后一天的最好成绩。不幸的是,我们没有时间训练最佳模型的这 8 个变体。我预计这会给我们带来 0.001 的提升。

训练

我们根据信噪比对样本进行加权,信噪比被截断在 0 到 10 之间。如果不截断,这会导致不稳定,有时会导致损失变为 NaN。当对大量运行进行 Bagging 时,我们也遇到了 NaN。赛后实验表明,截断到 (0.03, 10) 在数值上要稳定得多。

我们尝试了伪标签。它改善了我们的

同比赛其他方案