我们称之为Attention Stacking的模型相对比较简单,对于每个类,我们初始化一组模型数长度的向量,对这个向量进行Softmax,我们就获得一组求和为1权重,这样我们对这个类别所有模型的预测概率按这组权重进行加权平均,就可以得到这个类别的预测结果。 因为这种加权求和的形式和流行的Attention机制有点像,我们就叫它Attention Stacking,虽然它可能有其他更正式的叫法,但我们还没时间仔细查文献,所以暂且这么称呼。 Stacking阶段我们按照单模型阶段的五折划分进行了交叉验证,整个流程和单模型阶段有点像。不过Stacking阶段,按验证集的F2-Score进行early stopping,在验证集上求阈值的阶段,我们有不同的两套方案: 方案一:out-of-fold的做法,这个方案还是在out-of-fold上搜索阈值,要注意的一点是,每个折的模型的测试输入要使用第一阶段对应的折的预测结果,确保产生搜索阈值用的验证集和测试集的输入概率矩阵由相同的第一阶段模型产生。 方案二:非out-of-fold的做法,下图可以看做是一个将Attention Stacking每个类的权重拼在一起得到的矩阵,沿模型维度每列求和为1。因为Attention Stacking的做的其实是对每个类不同模型预测结果的一种线性组合,我们可以把五折求出来的五个权重矩阵直接平均获得一个新的权重矩阵。 然后用这个新的权重矩阵对所有训练数据和测试数据进行加权平均,在加权平均的训练数据上搜索阈值,应用在测试数据的加权平均结果上得到类预测。这种方案也保持了搜索阈值所用的集合与测试集预测结果产生的方式一致。 经过我们的测试中,方案二比方案一表现得更好。 到此,我们的方案也基本讲解完毕。最后,我想给大家讲讲我们比赛中的一些经历和对比赛结果的分析。 4. 学习,奋斗,结果与伟大的随机性 在上次参加Quora Question Pairs的过程中,我们在获得一些文本类比赛实战经验的同时,也对Kaggle比赛的流程和基本方法有了一定的了解,并将经验总结写成了《分分钟带你杀入Kaggle Top 1%》。为了学习一些新的东西以及验证我们对Kaggle比赛套路的理解,我们选择了正在进行的 Planet: Understanding the Amazon from Space,这是一个图像多标签的分类任务,和Quora Question Pairs的文本二分类任务有很大不同。 4.1 学习与前进 在参加这个比赛前,我们队里并没有人有太多参加图像比赛的经验,关注到这个比赛的时候,三个月的比赛也只剩下一个月。 一开始的十天,因为大家还有各种的项目工作没有完结,只有两三个队友零星地探索,游荡在Public LB一百多名。在剩下最后二十天的时候,我们陆续完成了手头的工作,腾出了时间和计算资源,全力地参加这个比赛。 我们花了一两天搜集了这个比赛和其它类似比赛的信息,从中总结出了一些基本的套路。在探索和确定出基本方案后,我们队内各自独立地去实现和探索,每个人都有自己一套代码。 保持代码和结果的独立,主要是为了合队的时候能够有更多样性的结果,这往往能给Ensemble结果带来较大的提升。我们发现,即使在这样一套不算复杂的解决方案中,大家对各种细节的理解也有很多不同,这些不同让我们每次合队时都有不小的提升。 其实一开始我们只是想试试能不能拿块金牌,但我们很快发现,情况似乎有点失控。我们的方案似乎显得格外有效,不到一周,我们就进入了金牌区,接着有的队友只是对三四个模型Bagging了一下,就直接进入Public LB的前三,最夸张的时候,Public LB前五名中有三名是我们的队的。 在最后一周前合队完毕,我们窜到了第一名,从0.93396升到0.93421,这个Public LB分数到一周后比赛结束时,也只有五支队伍能够超过。 情况似乎非常顺利,我和队友们都感觉自己优势很大,早已经不满足于金牌,还想要留在前三,甚至幻想最终夺冠。怀着这样的心态,我们来到了最后一夜,准备通宵战斗到早上八点结束。 4.2 其他队伍 在前进的过程中,作为一只新晋队伍我们也关注着其他老牌队伍,其中有些在最后一天来了个大爆发,给了我们很大压力,下面就会说到。在此之前,先介绍其中几个队伍: (责任编辑:本港台直播) |