为了助力你更好地了解这次比赛,这期我们特地邀请到了去年腾讯广告大赛的亚军——来自北京邮电大学的“烧卖”同学,让她帮你为今年的广告大赛划重点,分享去年迎战各路技术大神的经验,晒出自己的解题秘籍。
2019年腾讯广告算法大赛的朋友们,大家好!我是烧卖,真名是魏梦溪,目前仍是北京邮电大学研三的学生。我和腾讯广告算法大赛很有缘分,第一届腾讯广告算法大赛是我人生中参加的第一场算法比赛,而第二届,是我近期以来参加过的最后一场。2017年初学算法的我以腾讯广告算法大赛第十一名开始了我的广告算法之路,2018年热衷深度学习的我又以大赛第二名的结果暂时收尾。这次有幸能在第三届大赛开赛之际,跟大家唠几句磕。
首先恭喜你,来到这里,意味着你来到了一个群雄逐鹿的激烈战场,同时,你也来到了一个最致力于分享,能够最快成长起来的舞台。如果你是算法小白,不要怕,我第一次参加比赛的时候连打开数据集都不会;如果你是算法高手,更不要担心,这里绝对有很多顶尖选手和你一起PK,共同成长。哈哈,最好你还是个女生。因为,我是第二届前十名的队伍成员里唯一的女孩。
参赛两年,我的心路历程
2017年研一,我初学算法,教学楼的走廊里张贴了腾讯广告算法大赛的海报。我和我的室友几乎没有犹豫,一致决定要参加,一边比赛一边学习。那一年的主题是广告点击率预估,从学会用LR开始,再到学xgboost,再到 lightGBM,我们没有太多的时间去研究最新的方法,几乎99%的精力都放在了挖特征上面,也是第一次学到了一点点构造特征的思路。
2018年第二届开赛,一年来我对机器学习、深度学习也有了很多自己的理解,当时下决心要深入NLP领域并在此发展。所以那时的确犹豫了是否还要参加这场比赛,那一年的主题是相似人群扩展,我也担心自己很难再通过这个比赛获得更多新的知识(后来证明这种想法确实有些多余)。但是去年的第11名让我心有不甘,其次也想尝试一下杨毅师兄帅气的深度学习方案,腾讯广告算法大赛的数据一向很给力,数据量也有挑战性。再加上两个比赛场上认识的好朋友热情邀请我组队,我便犹犹豫豫地又走上了第二届的赛场。
2018年的比赛让我记忆犹新。报名参赛的那天(当时大概开赛了2、3周的样子)我刷夜了。哈哈,是的,这场比赛我唯一一次刷夜发生在报名第一天。那一晚我抱着网上的各种FM、FFM、deepFM等等十来个深度学习模型啃了一整晚,大概摸清了这些方法的原理,当时我觉得其实deepFM和协同过滤是很相似的,就有了一些自己搭建模型的想法,后来也是开脑洞搭了一些奇奇怪怪有点儿小用的模型,回想起来我自己是很乐在其中的。在这之后好像就是五一假期,我在家里嫌笔记本用起来太不顺手,自己去网吧写代码,解锁了人生中第一次去网吧的经历。当时搭好了tf的框架,第一次提交后貌似从300多名就到了30多名,当时觉得自己还是宝刀未老的。整个比赛过程嘛……就是那样啦,也没太多好说的,葛文强他们的确很强啦,总是超不过,我们都使了老大的劲,但是有这种强有力的对手的直接结果就是我每天晚上都睡不好觉,思索怎么才能优化我的模型,现在回想起来,确实是非常珍贵的人生经历,非常没有遗憾!
好了,再说太多就跑题了,我的经历就说这么多啦,接下来给大家聊点儿我觉得比赛初期会关心的事吧~
如何组队
有些同学肯定觉得组队很重要,但是我的观点来看,组队的关键在于要找:
- 自己信的过的、实力ok的好朋友优先。
- 方便交流的优先。
- 如果上述两点不好满足,尽量在初赛自己单打独斗。在进入复赛之前如果自己能打出一定成绩或者有好的idea,会有很多的大佬队有人员空缺。
- 千万不要将就!一上来就在论坛里或者群组里和自己完全不了解的人组队是我最不建议的。比赛是一个相对长期而且艰苦的过程,如果队友之间彼此不能配合,不能信任就特别容易会早早放弃。尤其是第一次打比赛的小伙伴儿。
- 相信队友,更重要的是相信自己。我第一次比赛就是两个女生打下来的,也没什么,遇到困难自己克服,实在不会的就大胆向大神们虚心请教,大部分人都是很友善很乐于分享的。
如何优化模型
因为我是做深度学习方案为主的,我就主要从这边切入谈谈我的感受。深度学习的方案近年来很火,之所以火,是因为它不需要特别严谨的数学证明,往往只需要“凭感觉”就可以搭出一个新的模型,而且有时效果出奇的好,因此大家总是说它是一个黑盒。更加重要的是,在数据量爆炸的今天,深度学习小批量学习的方式和树模型一次需要读取所有数据比起来,对机器硬件条件的要求相对较小。但是在我看来,深度学习从来不是一个万金油。以18年的比赛为例,前十名的队伍很多都有树模型的方案,它的差异在于每个队伍独特而又锐利的对特征的构造和挖掘的眼光。深度学习的方案更是每一个队伍都有,我在这里给大家几个在优化自己深度模型时可以思考的方向:
- 模型结构一定要结合题目来设计。深度学习模型永远没有正确答案,只有更加适合的答案。每一种模型都可以根据题目的需求进行调整,简单地比如可以去掉不必要的特征,重视重要的特征,这里的重要和不重要既可以人为去定义,也可以用注意力的方法去学习。没有结合问题的模型设计全部都是纸老虎,别人轻轻松松从网上复制一份代码就可以超过你。
- 学会从各方面优化你的训练速度。首先,你要知道自己的模型哪部分最慢,监控每部分代码所耗用的时间非常重要!否则你尝试一个方案的时间别人就可以尝试5个。调用数据慢就要学会分块存储,训练慢就要适当调整模型结构,条件允许还可以尝试修改框架的底层,让查找更加高效等等。
- 我从不喜欢花太多的时间去调参。调参的代价很大,换来的收益却是最小的。
- 特征!特征!还是特征。深度学习只是一个模型,做一个好的数据挖掘方案始终离不开精妙的特征工程。但是深度学习的特征和树模型的特征很不一样,举个例子,deepFM擅长特征组合,我们就不能定义太复杂的组合特征,这里的特征除了要结合赛题,更重要的是结合自己模型的特点。在这样的取舍和打磨下,你的模型和你都会成长地很快~
如何良性竞争
比赛终究和实验室的项目不同,竞争是它最大的魅力。从大家拿到题目的那一刻起,就站在同一个起跑线上,有的人经验老道,一开始能够冲地很快,但是每个大大小小的比赛中,都能够看到很多算法的初学者同样可以在最后名列前茅。
比赛是一门艺术,它比拼的是你的技术,你的头脑,你的编程能力,同时也在比拼你的毅力,你解决问题的能力以及你遇到困难沉着和冷静的态度。我希望参加比赛的每一位选手,都可以怀抱着自己学习知识的初心,虚心地向优秀的人请教,也希望暂时名列前茅的人愿意和他人一起分享自己的经验,在掌握知识的同时可以力争上游。我希望大家不因为0.01的差距而灰心,但可以因为0.001的进步而雀跃,这样的比赛在我的心中是最优美的。我一直认为,腾讯广告算法大赛,就是这样的比赛,也希望这一届的你们,继续把它做好,赛出好成绩呦~