363. Bengali.AI Handwritten Grapheme Classification | bengaliai-cv19
非常感谢主办方和Kaggle举办了这场非常有趣的比赛。我们学到了很多东西,特别是预测测试数据中未见过的音素这一问题非常引人入胜,正如其他解决方案帖子所显示的那样,这也促成了一些非常优雅和出色的解决方案。像往常一样,这是一次令人难以置信的Zoo团队努力,与 @dott1718 的合作总是很棒。
我们将尝试讲述一下进展的故事,而不仅仅是解释最终的解决方案,因为我们相信比赛的整个过程对于理解决策是如何做出的非常重要。
我们开始比赛时通过拟合针对R、C、V的3头模型,很快就得到了合理的结果,让我们在LB(排行榜)上处于前40-50名的位置。像往常一样,我们试图理解测试数据有何不同,以及为什么与本地CV(交叉验证)存在差距。我们很快清楚地认识到这主要是由于测试中未见过的音素造成的。我们试图评估这种差距是如何存在的,并检查了R、C和V在LB上的单独得分(你可以通过将其余预测为全0来很容易地弄清楚这一点,这是基准提交)。我们看到最大的下降来自R和C,这是受罕见情况错误分类的巨大影响。所以我们尝试了一些有趣的事情,即基于次高索引添加额外的C=3和C=6预测。仅仅添加310个C=3和310个C=6(反映了每个都有一个额外的音素)就使我们在LB上提升了30-40分。所以我们认为这在最后将是关键,我们需要生成一个能很好地泛化到未见音素的解决方案。我们也确实不想过多依赖硬编码,所以试图找到更好的方法。顺便说一句,这些早期没有混合但使用了简单硬编码的提交,现在仍然可以排在第10-20名。
看到论坛上报告的CV分数都比我们要高,这让我们认为顶级团队正在做一些与我们不同的事情,显然是不同的目标。所以我们的第一个技巧是从预测R、C、V切换到预测单个音素。这对我们也有好处,因为不需要关心3个头的适当损失权重、不同的学习权重、如何正确处理软标签,我们可以完全专注于神经网络拟合和增强。在我们切换之后,混合增强立即大放异彩——我们将cutout替换为cutmix,然后是fmix,这成为了我们最终使用的模型。Fmix (https://arxiv.org/abs/2002.12047) 对我们来说明显比cutmix效果更好,而且由于切割区域的选择方式,生成的图像对我们来说看起来更自然。这是一个混合图像的例子:

最后,我们以50%的概率混合2张或3张图像,并使用beta=4来进行大致相等的混合。
有了这个音素模型,棘手的部分是将模型应用于测试。起初,我们尝试按原样应用模型,因此仅通过将预测的音素转换为其R、C、V分量来预测已知音素。LB分数优于分别预测R、C、V的模型,这告诉我们公共LB中没有那么多新的未见音素。为了使模型在未见音素上更好地工作,我们应用了第二个技巧——后处理程序。令人惊讶的是,它也提高了已知音素的指标。
该模型输出每个不同训练音素的1295个概率。对于每个分量,例如C,我们通过平均具有该分量的音素的概率来计算每个C=0,..,6的分数。因此,对于C=3,它只是4个概率的平均值,因为训练数据中只有4个音素的辅音变音符为3。对于C=0,它是数百个概率的平均值,因为它是最常见的C值。后处理以选择具有最高“分数”的C值结束。其背后的逻辑是将每个C值视为同等重要,而不考虑其频率(类似于目标指标),不将模型限制在训练音素集内,并为预测不确定的音素选择更可能的分量值。这个程序立即在LB上又给了我们50个额外的点。
第三个技巧是关于改进未见音素的预测,同时不过多损害已知音素的预测。正如你们大多数人可能知道的那样,正如前面所详述的,交叉验证和公共LB之间的差距来自于C分量的准确率下降,主要由C=3引起,其次是C=6。这很容易解释,因为这些是训练中最稀有的类别,公共LB很可能至少有一个带有C=3和C=6的新音素。第二大下降来自R分量,而V召回率在交叉验证和公共LB之间非常接近。
3头模型特别是音素模型的主要问题是它们过度拟合于所见过的音素,因为它们严重记忆了这些音素。所以为了稍微缩小差距,我们需要在未见音素上更好地预测R和C的模型,这导致我们为这两个分量拟合单独的模型。特别是对于C