587. Stanford Ribonanza RNA Folding | stanford-ribonanza-rna-folding
感谢Kaggle和主办方组织这次比赛。这次比赛真的非常鼓舞人心且具有挑战性,我从中学到了很多。👍
关键点:
我采用了Squeezeformer,这是我在ASL手语拼写比赛后熟悉起来的架构。感谢@christofhenkel和@goldenlock在上一届ASL比赛中的解决方案。我解决方案中最关键的部分是如何利用BPP矩阵。我应用了一个简单的浅层Conv2D网络处理BPP,并直接将其添加到注意力矩阵中。
特征:
我使用了一些在OpenVaccine挑战赛中发现有用的特征,以帮助快速初始收敛。这些包括:
然而,与OpenVaccine挑战赛不同,这些特征仅带来微小的帮助(约-0.0005)。因此,我认为未来应该为了简化而移除这些特征。

Squeezeformer编码器:
我选择了Squeezeformer并进行了一些小修改(在conv1d后添加BN,在FFN中使用SwiGLU等),它混合了Conv1D块与Transformer。虽然我尝试了其他最近的Conv-Transformer混合架构,但Squeezeformer是最有效的。与Vanilla Transformer相比,Squeezeformer在训练早期就表现出强劲性能,并持续显示更快的收敛速度。
模型使用的参数如下:dim=192,num_heads=4,kernel_size=17,num_layers=12。
GRU头部:
在编码器后添加一个GRU层带来了微小的改进。

ALiBi位置编码:
我采用了AliBi位置编码,因为它声称比其他方法在长序列上泛化得更好。
BPP作为注意力偏置:
BPP矩阵(仅使用提供的)在经过每个头预定义缩放后作为偏置添加到注意力矩阵中,显著提升了性能(约-0.0025)。
BPP 2DConvNet:
直接使用BPP作为注意力偏置是一个好的开始,但我感觉它需要更多灵活性(我觉得它太稀疏了)。在各种选项中,在BPP矩阵上添加2D CNN被证明非常有用(-0.002)。然而,多个2D CNN应用于BPP矩阵(通常是206 x 206)在训练/推理时间方面效率低下。因此,我只使用了一个简单的2层2DCNN,输出矩阵在所有Transformer块层之间共享。
单模型CV(K折,k=5)得分为0.119,公共LB为0.140,私有LB为0.142。在不同种子集成后,我得到公共LB 0.135和私有LB 0.140。
虽然某些提交的CV/LB之间存在一些值得怀疑的相关性,但总体而言,它们与CV有很好的一致性。
使用上述设置,在单个RTX 4090上训练单个模型大约需要30小时。
对我来说,这场比赛是关于是否在仅剩2-3周时实验或采用某些有希望想法的一系列选择。一些我认为可能有帮助的想法被放弃了,没有进一步考虑,因为它们需要更多实现和训练时间。我认为这种策略可能使我的解决方案有些次优或冗余,但总体而言,我看到它相当有效,因为我的解决方案似乎捕捉到了其他团队解决方案的大部分关键方面。
[1]Sehoon Kim, Amir Gholami, Albert Shaw, Nicholas Lee, Karttikeya Mangalam, Jitendra Malik, Michael W. Mahoney, and Kurt Keutzer. 2022. Squeezeformer: An Efficient Transformer for Automatic Speech Recognition. arXiv:2206.00888 [eess.AS]. https://doi.org/10.48550/arXiv.2206.00888
[2]Ofir Press, Noah A. Smith, Mike Lewis. 2022. Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation. arXiv:2108.12409 [cs.CL]. https://doi.org/10.48550/arXiv.2108.12409