TLDR
我们参赛较晚,第一次提交是在10天前。鉴于时间有限,我们决定选择一条开发成本较低的路径,并利用META优秀的ESM2模型系列。
我们在比赛数据和RNA Central的长序列上预训练了ESM2骨干网络,然后添加了自定义折叠头,并在DMS和2A3标签上进行了微调。
老实说,我们对最终结果有点惊讶,开始时期望会更差。
ESM2 预训练
我们在预训练ESM2蛋白质语言模型方面有一些经验,因此认为它们非常适合本次竞赛。我们使用MLM(掩码语言建模)损失,在训练和测试序列上预训练了三个版本的ESM2模型(35M、150M、650M)。
具体来说,我们使用了huggingface的EsmForMaskedLM模型类和DataCollatorForLanguageModeling(tokenizer, mlm=True)数据整理器,后者支持MLM损失。
由于没有训练序列,且仅有8000条长度超过208的测试序列,我们下载了RNA Central数据,并筛选出1200万条长度在115到457之间(本竞赛数据的范围)的样本,以补充竞赛数据。
根据使用的RNA Central数据量,我们预训练了5到20个epoch,总共见过2500万到7000万个样本。

折叠头
我们基于CPMP在三年前新冠疫苗竞赛中使用的模型,设计了一个位于ESM2词元嵌入之上的折叠头。该模型此前已在此介绍过。
该折叠头将ESM2词元嵌入和bpp文件作为输入。其主要组成部分是一个注意力/卷积层,重复两次,然后是一个线性分类头。
注意力/卷积层类似于Transformer编码器结构:一个注意力层后接一个带跳跃连接的卷积块。注意力层是一个bpp注意力层,后接一个双向RNN(GRU或LSTM产生两种模型变体)。当然,GRU并非注意力机制,但在此处其作用类似于注意力层,即每个节点关注序列中的两个相邻节点。bpp注意力是一种标准注意力层,其注意力权重为bpp值。卷积层的设计借鉴了EfficientNet的卷积块。我们按照此笔记本中的方式对这些层进行堆叠。
我们选择这种RNN/卷积架构而非Transformer,原因有两点:
- 我们实际上在比赛结束前5天才开始着手处理,没有时间调整新架构;
- 我们希望ESM2的注意力机制已经学习到了Transformer头注意力所能学到的内容。
微调
我们表现最佳的模型是在ESM2骨干网络之上添加了自定义折叠头的模型。我们也训练了仅使用线性头的简单模型。最终集成的模型是两者的混合,其中大部分包含折叠头。
我们使用了四种训练数据变体:
Quick start(快速启动)
Quick start + SN >= 0.3
Quick start + SN >= 0.3,且SN作为样本权重
Quick start + SN >= 0.1,且SN作为样本权重
SN是截断至(0, 1)的signal_to_noise(信噪比)。在某些变体中,我们将其用作样本噪声。模型质量从上至下逐步提升。
我们使用了5折交叉验证,并提交了每个折模型预测结果的平均值。
得分
我们表现最佳的单模型是一个带有SN权重的650M LSTM模型。CV = 0.12847,Public LB = 0.14308(5折集成)
我们表现最佳的集成模型包含15个模型(总计75折),CV = 0.12478,Public LB = 0.14174
未奏效的方法
来自RNA-FM的预训练模型不如我们基于ESM2的预训练模型表现好。
ESM2还可以输出接触预测。为实现这一点,它会堆叠所有注意力激活值,然后应用一个回归头。我们尝试利用它通过辅助损失来预测bpp值,这在一定程度上提升了竞赛指标得分。但这带来了4倍的空间和2倍的时间开销,导致我们无法在ESM2的150M和650M变体上使用该方法。
Bo 与 CPMP