点击上方“CVer”,选择加"星标"置顶
重磅干货,第一时间送达
本文:幻云羽音
https://zhuanlan.zhihu.com/p/157373052
本文已由原作者授权,不得擅自二次转载
Kaggle主页:https://www.kaggle.com/haqishen

前言

最近拖延症又犯了,这篇文章居然前前后后写了两周才发出来,罪过罪过~
其实我第一次参加 Kaggle 比赛可以追溯到2017年,也就是我刚毕业参(成)加(为)工(社)作(畜)的那一年。从那年起我虽然断断续续的参加了好几个比赛吧,但因种种原因没能把任何一个坚持到最后= =
真正意义上说我开始认真参赛应该要从19年6月底算起,到我在今年20年6月底拿下 GrandMaster ,正好过去了一年时间。
在这一年里我一共陆陆续续参加了9场比赛,收获5枚金牌(其中3个solo),2枚银牌(2个都是solo)以及1个铜牌。
在这过程中得到了非常非常多贵人的相助,虽然他们分散在世界各地,但 Kaggle 这个平台让我们跨过时空产生了联系。我非常地感谢他们。
废话就不多说了,疫情结束后你们谁要是来东京玩的话来找我!请你们喝酒!
2019.6 ~ 2020.6 战绩

简短的自我介绍

14年电子商务专业本科毕业后赴日留学,侥幸跨专业考入东京大学成为CS狗,后在某年轻的正教授的研究室下研究计算机视觉(CV)。
17年初硕士毕业后留日工作。在第一家公司做计算广告,优化CTR,CVR,CPM之类的。
19年中跳槽,目前在 LINE corp. 的机器学习组里为公司里的各种 Service 做推荐系统。
由于 LINE 是属于垄断寡头那一类的公司,所以业务模型对精度要求不高。导致我内心中很有危机感,于是乎到 Kaggle 上学习。没想到一学竟然学成了 GrandMaster,只能感叹世事难料,人生处处充满惊喜。感恩。

我的第一个 Solo Gold

现在回想起来我仍然觉得自己简直是幸运星降世。我在一个我当时完全不熟悉的领域(NLP)里参赛,居然获得了一枚 Solo 金牌(我的首金),而且还拿到了 $5,000 的比赛奖金!
让我们从头讲起。
之前我在学校做的是计算机视觉(CV)方向的研究,工作之后主要做推荐系统(Tabular),对 NLP 的认识只停留在听说过 RNN,LSTM 这类名词的程度。
而去年6月份我在机缘巧合下拥有了一定的计算资源,为了避免浪费我决定找个比赛玩玩,然后我就看中了 Jigsaw 举办的这个 NLP 比赛。Jigsaw 在 2018 年已经举办了一场 NLP 比赛了,这次是第二场。
https://www.kaggle.com/c/jigsaw-unintended-bias-in-toxicity-classification
Jigsaw 的这个比赛是一个英文文本二分类的任务,需要训练模型自动判断文本是否具有羞辱性(toxic)。这是一个相对来说容易上手的 NLP 任务。
当时决定要参加这个比赛,最初的想法只是想学习一下 NLP 相关的基础知识,以后遇到相关的话题好歹能插上两句这样。恰逢 Bert 横空出世,我干脆就跳过了 LSTM 直接 Bert 来调参以及试 trick 了。
说到这里要非常感谢 Kaggle 社区里的很多人,他们在 Kernel 以及 Discuss 里分享了大量知识以及代码,让我得以迅速地熟悉 NLP 的各种基础操作。已至于比赛尚未结束时我已经能自己想出新的 idea,并且用代码实现来进行实验了。
比赛过程中我的排名在 Public LB 上一直半死不活,在 Top 25~50 前后徘徊。当然我个人是非常满意的,毕竟我第一次接触 NLP,能守住 Silver Zone 可以说是已经符合我的心理预期。金牌?压根儿没想过。
也正是因为我主要目的是为了学习,对冲榜没有太大野心,所以直到最后也没有组队(其实是不好意思和大佬们搭讪 = =)
然而生活总是会不经意间给人以惊喜,我在 Public LB 上只能排在30+的 Solution,在 Private LB 上竟然一举冲进了前10,排在了第8上。大大出乎我了我的意料。更幸运的是这个比赛设置的奖金发到第十名,我也从中分到了 $5000!
于是在这一连串的惊喜中,我在自己第一次认真参加的 Kaggle 比赛中拿到了我的第一个 Solo Gold,以及第一笔参赛奖金。
附上当时我写的赛后总结英文版:
https://www.kaggle.com/c/jigsaw-unintended-bias-in-toxicity-classification/discussion/100961

我的第二个 Solo Gold

如果有人对我自称幸运星降世表示怀疑——那我跟你讲,我在自己第二个认真参加的 Kaggle 比赛中拿到了我的第二个 Solo Gold,以及第二笔奖金![手动狗头][手动狗头][手动狗头]
服不服!
好吧好吧,故事咱还是从头讲起。
比较熟悉 Kaggle 晋升规则的小伙伴可能会了解,想要晋升 Kaggle GM,一共需要5枚金牌,并且最少要有1枚 Solo 金牌。于是乎一时间 Solo 金成为晋升 GM 的最大拦路虎,多少风云好汉都倒在了这一道门槛上,哪怕身怀6~8枚团队金牌,也只能望 GM 生叹,无法获得这尊贵的金色标志。
那么问题就来了。我一上来就把最大的拦路虎打倒了,还有什么能阻止我上 GM?我当时就觉得!没有!于是我兴致勃勃地冲进了下一个比赛。
https://www.kaggle.com/c/aptos2019-blindness-detection
这是一个图像分类的比赛,要求训练模型通过视网膜图片自动判断糖尿病性网膜症处于哪个阶段,从无病到病情严重一共分为5个等级。
这是我熟悉的 CV 领域,但这个比赛有一个问题,那就是本地实验结果无法与 Public LB 对上。线下实验结果好的模型,提交上去分数居然没有提高。这可如何是好?
答案是没有答案。我只能一边努力的做高线下的成绩,一边望着排行榜的高分暗自着急。
我曾经在比赛中期一度冲进了金牌区,但是又因为后继乏力,排名不断下降。如果你们之中有人打过比赛的话,一定能体会到我的这种心情——前排那帮人到底做了什么?居然还能继续上分?
哎!过程就不多说了,在比赛接近尾声时我发现我无法冲进金牌区,但又离金牌区并不遥远,于是萌生了组队的想法。但当时我还不认识各位大佬们,又由于时间过于紧迫,临时搭讪的人要不就是已经组好了队,要不就是提交次数总和已经超额无法组上队伍。于是乎我发现我竟然落单了!T T
好吧好吧,既然落单了那就只能尽人事听天命了。我最终选择了我线下分数最高(但并不是在 Public LB 上最高)的一套模型交了上去,搏一搏,单车变摩托,万一线下分数更接近 Private LB 呢?当然结果我也已经剧透过了,最终结果是我在私榜上排第四名,又一个 Solo Gold 入手了。而且这个比赛奖金正好发到第四,所以我又莫名其妙拿了 $5000 的比赛奖金。
在这场比赛里我最大的收获就是,相信线下实验 (Trust CV)
说到这里我得插一句,比赛刚结束的时候我其实是排在第七,但是前排有2个人由于互相之间私下共享模型导致双双被删,还有另一组人由于在早期开小号增加提交次数也被删了。于是乎这么一排下来我居然就变成了第四名。实在是世事难料,祸福难知。
恰逢比赛期间 EfficientNet 横空出世,在赛中大放异彩 (赛后发现前10里起码有8个人用了 EfficientNet)。所以我这次终于算是在 CV 领域也跟上了时代的脚步。
哪怕在一年后的今天 (20年7月初),EfficientNet 仍然具有 SOTA 的实力。在此强烈推荐给大家,没用过的一定要试一试。
附上我当时写的赛后总结英文版:
https://www.kaggle.com/c/aptos2019-blindness-detection/discussion/107987

折戟沉沙期

入手了两枚 Solo Gold 以及2次比赛奖金的我已经完全膨胀了,当时甚至觉得拿 Solo Gold 就如切瓜砍菜一般容易,我马上就要拿下5个 Solo Gold 成为 Solo GM 走上人生巅峰啦!
然后现实马上给了我两巴掌,一左一右,讲究。
在接下来的2场比赛里我颗粒无收,都只拿到了银牌。
所以说没有任何人是会一直受到上天眷顾的,世界上牛逼的人多了去了,最好还是不要做太过分的梦。

我的第三个 Solo Gold

实话说在我获得的5个金牌中,这是唯一一个,在开榜之前我就100%确信自己能拿到金牌的比赛。
https://www.kaggle.com/c/bengaliai-cv19
原因其实特别简单,因为绝大多数人直到比赛结束那天都还没把题目审明白= =
这个比赛乍看之下,只是一个普通的孟加拉文的OCR任务而已。
首先,每个孟加拉文都可由3个部分组成,这三个部分分别叫做 grapheme_root, vowel_diacritic, and consonant_diacritic.
这有点类似于汉字的”艹“字头加下面一个”早“就构成了”草“一样的感觉。艹和早,就是草字的两个”部分“。
构成孟加拉文字的”部分“是有限的,加起来只有不到200种,但排列组合后形成的”文字“却种类繁多(超过1w种)。在这种情况下,官方只给出了其中1000多种文字,希望我们训练模型去识别他们的3个”部分“,以此达到只用1000多种文字训练,却可以识别出上万种文字的效果(因为只要能正确识别3个部分,就能组合成唯一的文字)
同时,官方在比赛声明中提到了私榜数据集中包含了训练集中未出现过的”文字“,但所有”部分“都是已知的。
很明显,从未在训练集中出现过的数据是非常难以被正确识别的。所以这是一句非常重要的声明,但是却被大多数人忽略掉了。
所以其实没啥好说的,比赛后根据大家公开的信息,我们得知共有11支队伍对未知的”文字“进行了优化,结果他们最终都拿到了金牌(包括 Solo 的我),另有3支队伍(或个人)靠抽奖抽中了金牌。
审题,很重要。
附上我当时写的赛后总结英文版:
https://www.kaggle.com/c/bengaliai-cv19/discussion/135990

我的第一个 Team Gold

https://www.kaggle.com/c/deepfake-detection-challenge
这就是前一段时间在 Kaggle 社区话题火得不行的 DeepFake 比赛。比赛任务是自动识别一段视频中的人脸是真实的,还是被AI替换过的。虽然数据量极大,比赛门槛较高,但奖金数额巨大,因此仍然吸引了非常多的参加者。
这个比赛的赛期和上面那个 Bengali.AI 的赛期有一定的重叠,所以一开始我并没有打算参加这个比赛的,实在是分身乏术啊!但没想到我随手在群里发的想要抱大腿的信息,被 @YIFAN大佬看到了,经过简短的交流后被大佬翻了牌子,顺利地加入了他们的队伍。
比赛过程就不多说了,蛋疼的事情发生在比赛之后。
简单来说刚公开私榜的时候我们排在第一,后来因为和主办方对于比赛规则的理解产生分歧而被除名(Kaggle 留有的最后的良心让我们保留了另一个 final submission,这个 submission 使我们留在了金牌区,位列第七)。整件事的经过以及具体原因参见机器之心的报道或者是我们队伍的公开声明
https://www.kaggle.com/c/deepfake-detection-challenge/discussion/157983
在这个过程中 @YIFAN大佬出力良多,又是联系律师又是准备材料的,付出了非常的多。感谢大佬。同时还要感谢另一名国人队友 @Gary以及另外两个外国小哥,在整个过程中都付出了很多。
但归根到底我们队伍里的人都是普通的工程师,显然无力和 FB 这样的庞然大打官司,所以做了能做的一切之后只能认命。
结果是,FB 似乎吃定我们无法掀起风浪,竟选择直接无视了我们的赛后声明。而事实也确实如此,在 Kaggle 里一时火了半边天的帖子,在外界硬是没有兴不起半丝波澜。
我们的赛后声明直到今天,每天仍然有那么5 6个新生成的账号在下面刷回复,把所有的高赞回复都顶到了最底下去了

我的第二个 Team Gold

无论如何,经历了上一个比赛之后,我在大群里已经不算是无名之辈了,同时我也已经进入了 GM 倒计时。
在这个时候,我选择了 Jigsaw 在 2020 年举办的新比赛,做人要有始有终嘛(?)。
https://www.kaggle.com/c/jigsaw-multilingual-toxic-comment-classification
这次任务比上次要复杂一些,上次是只需要鉴别英语是否具有羞辱性(toxic)。而这次训练集虽仍是只有英语,但测试时却需要我们鉴别6国语言是否具有羞辱性(toxic)。
在参加比赛后没多久,群里另一位大佬 @NaiveLamb就来找我组队,比赛结束之前组满了5人队伍,淳朴的做了一堆工程上的改进,淳朴的融合了一下,淳朴的拿到了金牌。
之所以对我们的比赛过程和解决方案一笔带过,是因为在这个比赛里第一名碾压其他人一条街,6月底结束的比赛他们号称4月底的 Solution 就已经足以拿到最终的第一名了,而剩下的2个月一直在等比赛结束。= = 正所谓高手总是寂寞的,真是牛逼。
和他们的方案一比,我们真的只是做了一些工程上的事情,而对数据本身的探索不足,实在不足以拿出来说些什么,但姑且还是贴上我们当时的赛后总结吧 :
https://www.kaggle.com/c/jigsaw-multilingual-toxic-comment-classification/discussion/161100
说实在话,经历了这两场组队比赛之后,我发现组队实在是省心省力,假设队伍里每个人都有拿 Solo Gold 的实力,那么组在一起之后每个人大约都只需要付出 Solo 时三成的精力,就足以拿到组队金牌了。
就这样,在拿下3个 Solo Gold 之后再拿下2个 Team Gold 的我淳朴的成为了 GM。相比于前4场比赛的热情满满,过程的波澜壮过,这第五场比赛反而稍显平淡了。就如同生活一样,既有波峰,又有波谷,但终归是要回到平淡的。
我的故事到此就告一段落了。
但比赛仍在继续。

结语

这个帖子记录了我这一年来晋升 GM 的心路历程。
我把技术部分省略掉了是因为这些东西都已经写在了 Kaggle 的论坛里。有兴趣的可以从我的 Profile 里找到这些帖子。
希望能给后来者一些参考吧。
重磅!CVer-竞赛 交流群已成立
扫码添加CVer助手,可申请加入CVer-竞赛 微信交流群,目前已满500+人,旨在交流Kaggle、天池等大赛。
同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。
一定要备注:研究方向+地点+学校/公司+昵称(如竞赛+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲长按加微信群
▲长按关注CVer公众号
点赞和在看!让更多CVer看见
继续阅读
阅读原文