从“数字中国建设峰会”回到北京的这个周末,一个人来到公司,回想这几年走过的路感慨良多。于是乎提起笔,写一下我这几年的经历、感悟、收获。给自己做一个阶段性的总结,同时也记录一下我是怎么从“水暖建材行业子弟”重回“计算机行业”,又是怎么由一个“数据算法竞赛小萌新”一步步成长,并取得一些成绩的。
那么,先做一个自我介绍,大家好,我是 DOTA,我是 朱翔宇。
2015:回归 | 回归学校
2017:起始 | 开始于这个夏天
2018:入世 | 加入京东的第一年
2019:突破 | 突破自我 拥抱变化
2020:挑战 | 当打之年 一往无前
2015:回归 | 回归学校,重回计算机行业
2015年对我来说是一个特殊的年份。
这一年,我父亲去世了。
这一年,我放弃了父亲留下的公司和水暖建材生意。
这一年,我在本科毕业两年之后,选择了重回学校。
正如《平凡之路》中朴树唱的一样,我曾经拥有着的一切,转眼都飘散如烟。但人生本就如此,我们总归会遇到一些自己不愿面对的事情,这也正是成长的意义。
在北科大读研期间,有着明确目标和想要什么的我,从研一泡在图书馆到研二常驻实验室,抛弃了所谓的生活与社交,并且最后毕业典礼我也没去参加。在那时的我看来,我需要是的时间去弥补曾经的空白,需要的是提升我对领域的全面认知,需要的是用忙碌来让自己少胡思乱想。整个过程看起来很极端,但是对空白状态的我来说,却是极其有效的。
同时幸运的是我遇到了一个好导师,在阳小龙教授那里我学会了3件终身受益的事情,一是,通过对文章一次次反复的修改、批注、修改、在批注的过程中,我看到了自己逻辑上所存在的问题,并逐渐形成了对全局和对细节的把控能力;二是,相较于放养模式,从进入实验室的那一刻,每周分享、总结、陈述的周会,养成了良好的自学和表达能力。在一种只有阶段性目标,没有细节控制的实验室氛围下,有了更多思考思辨的时间,也让完成目标的方式有了无数种可能。“只定目标,不做计划” 这一点也成了我沿用至今的前进方式;三是,我曾经有个阶段是负能力爆棚的人,对看不惯的人和事,时常有负能力的表达,但正如后来阳老师提醒我的那样,一个连自己情绪都控制不了的人,又能在未来走多远呢?
2017年的夏天,偶然的机会我接触到了数据竞赛,本科阶段参加大学生数学建模竞赛的我,对这种新的数据竞赛形式充满了好奇,于是,在一种好奇与自信的情绪下,我参加了2017年的“中国高校计算机大赛——大数据挑战赛”。
赛题描述:鼠标轨迹识别当前广泛运用于多种人机验证产品中,不仅便于用户的理解记忆,而且极大增加了暴力破解难度。但攻击者可通过黑产工具产生类人轨迹批量操作以绕过检测,并在对抗过程中不断升级其伪造数据以持续绕过同样升级的检测技术。我们期望用机器学习算法来提高人机验证中各种机器行为的检出率,其中包括对抗过程中出现的新的攻击手段的检测。
数据层面,给出了鼠标移动轨迹(x,y,t),目标坐标(x,y)和类别标签:1-正常轨迹,0-机器轨迹。通过建模预测某条轨迹属于正常轨迹还是机器轨迹。
2017年的我,在算法模型层面还是个小白,虽然经过两年的积累有了不少基础,但是在真正的实际问题面前,你会发现之前学习到的东西有多理想化。不过有一点我还是清楚的,特征决定模型的上限,而算法模型在无限的逼近这个上限。因此,我开始自己的特征工程之路,由原始数据(x,y,t)数据对x-y、x-t、y-t进行可视化分析。同时我的特征设计理念是:特征描述“人”,而非用特征描述“机器”,寻二者之异,以达泛化目的。突出XYT各自特征细节及有效的利用组合特征,特征提取时分别将X、Y、T进行归一化处理;同时,结合规则由横向特征(X),纵向特征(Y),时间特征(T)三个角度提取特征。
模型层面只选择了单模XGBoost模型,在没有做交叉验证的情况,拿到了决赛全国第6名的成绩,可见在特征构建和对问题的理解层面,做的还是可以的。如果你要问我为啥不做CV,不做融合呢?那我只能告诉你,因为我无知呀,那时的我还是个小白。
现在回忆起来,第一次参加数据竞赛期间,还是有蛮多有记忆的小插曲的。比如换了好多次队名,最后因为研究生宿舍三人都玩DOTA,所以用了这个ID;比如因为比赛期间文超的开源而喷过他,后来也算不打不相识的认识了他,并在一段时间里通过交流学到了很多东西;比如认识了很多圈内选手都熟悉的 清华大学 刘强老师,也正是因为刘老师的鼓励,没有中途放弃比赛,并一路打到了决赛,兑现了跟刘老师之前的约定,去深圳拿到了清华百年纪念邮票。
竞赛不仅可以让自己保持一种战斗状态,还可以认识一波志同道合的朋友。从深圳回到北京之后,在本次比赛冠军选手潘坤同学的“忽悠”之下,我来到了京东,开始了算法实习生之路,并在毕业之后留在了这里。如果问我为什么选择这里,那就是我个人的选择观问题了。
首先,我选择的是团队,一个纯粹的工作氛围在我的选择里排第一位。实习让我对团队的氛围有了了解,同时接受了两年社会毒打的我,自认为看人上还是挺准的,当然事实也验证了我的判断。其次,我选择的是方向,“扎根数据,贴近业务”,是我对自己的定位,因为没有数据的算法就只是一堆公式,同时没有业务背景的依托,算法就只是自嗨。最后,我选择的是相信自己,乱世出枭雄,我喜欢从0到1的过程。
这一年,我的主要工作是在金融场景下的推荐任务。之前没有过推荐经验,也没人带的经纬度算法小队开始了从数据收集、数据清洗、特征加工、算法建模的全流程探索。基于当时的算法工程师的能力素质,现在回想还好当时没人带,不然可能早就完犊子了。“塞翁失马,焉知非福”大概如此。
回过头来,聊一下金融场景下的推荐问题。推荐在某种程度上可以简化为用户和物品之间的匹配问题,为合适的用户匹配上合适的物品。但只做算法模型,脱离业务背景的打法是毫无意义的。毕竟推荐是离业务很近的一门技术。
因此,在基金推荐这个任务中,经过和业务方等多次沟通,我们尽可能多的列出了可能会影响用户申购行为的因素,并将其量化为算法模型可以识别的特征。同时确定建模目标,减少运营人工配置产品工作量。通过甄选给用户推荐长中短期业绩表现较优质的基金,让用户能够切实赚到收益,尝试将非权益类基金偏好型的用户向权益类基金引导,以增加业务收入。
特征上,除了用户行为特征、属性特征以为,增加市场热度特征维度,增加alpha值衡量用户获得超过市场平均回报的能力,增加beta值衡量用户能获得市场平均盈利的能力。
在召回阶段,基金商品和零售商品不同的地方在于金融商品的量级要小的很多,相较于传统的多路召回的方式,在基金推荐中,我们首先对用户基金类型偏好进行预测。同时基于业务理解我们增加了一路“4433选基法”召回,该选基方法关注基金的长中短期业绩表现,筛选标准十分严格。精选出来的基金在盈利能力、市场业绩、抵抗风险等方面都有不俗的表现的基金。
在排序阶段,在召回到的基金类型偏好的基础上,对多种用户类型进行分开建模,用LR+LightGBM进行排序。
最终在相较于之前的线上模型和并行PK的其他团队,CTR层面提高了12%左右,GMV提高了70%左右。很幸运,自己的思考产生了实际的线上效果。
2018年,我开始了自己第一个用深度学习的数据算法竞赛,因为在工作中基于业务理解、特征工程层面的方法优化要优于深度模型的投入成本,同时考虑到业务可解释性和GPU建模环境问题,如何快速且有效的由业务建模成了工作中的主旋律。这也让我产生了一种危机感,因此,在个人能力突破上,我选择了NLP类深度学习竞赛进行亮剑。
关于赛题:
达观数据提供了一批长文本数据和分类信息,结合当下最先进的NLP和人工智能技术,深入分析文本内在结构和语义信息,构建文本分类模型,实现精准分类。
解决方案:
对于这个文本分类任务,有个小的操作其实都可以达到很高的分数,即使模型不够优秀。通过对于词向量做一个增强,即利用word2vec与glove的差异性,构建一个鲁棒性更高的词语向量表征。我们试试word2vec+glove+faxttext的组合,对于我来说,效果并不是很好,我觉得可能的原因是faxttext与word2vec的相似性很高,弱化了glove的向量表征,同时,对于glove单独的词向量我也没有尝试过,大家也可以尝试一下。对于模型的话,赛后我们开源了一个双层的biGRUModel模型和rnnCapsuleModel。
最终,首次使用纯深度学习模型构建的算法解决方案取的了 季军 的成绩。通过这次比赛我和提莫(何从庆)也成了很好的朋友,同时,在他那里也让我在近几年交流学习到了很多知识。
2019年是动荡的一年,这一年我经历了两次组织架构的调整,同时团队里除了我以外的其他同期入职的校招生也在这一年全部选择了离开。虽然我也想过离开,但本着拥抱变化的心态,我还在继续战斗。因为我当年入职之时,我就给自己设了一道墙,那就是,未来3年无论如何变化,无论经历什么,我都要守住3年期限。只有在不断变化的环境中茁壮成长,才是最有力量的。当时,这个过程中,我也见到了好多只是挂着算法工程师岗的算法工程师,对此我不予置评,毕竟人微言轻。
在变化中,2019年在工作上最大的收获,是完成了多目标任务场景的推荐,同时也是在算法建模层面,我觉得比较有意思的一个场景挑战,以至于在问题最初期,我认为它是一个伪命题。当然这个过程中,我还做过返利商品推荐、众筹商品推荐、数据挖掘等工作,就不展开说了。
在这个多目标任务场景的推荐任务中,根据业务背景的特点,我用了Random Walk和Deep Walk,对核心指标进行了拆分,因为交叉转化这个概念,在模型层面是没法建模的,但我们换个思路,怎么通过基于A指标的建模,使得B指标有所提升呢?我的解决方案是基于业务建模,通过细致化的拆分用户群体,单独建模的方式对不同人群的特点采取分步建模。具体实现形式因为涉及到的业务场景太多,不方便介绍,但基本思想是“随机游走,分而治之”。
这一年我经历了很多负能量的事情,在这里就不方便多说了,毕竟阳老师的教诲我还是深深的记得的。人之不如意之事,十有八九。但你依旧需要抬头向前,有了之前深度学习的初次尝试,我决定继续迈向专家之路,毕竟取得一次好成绩不代表什么,可能是只是运气好而已。
第一次的深度学习尝试之后,我做了很多思考,比如每一层都在抽取什么要的特征,又是怎么发挥作用的,我还能通过什么样的方式抽取什么样的特征表达。也正是基于这些思考,我领悟到了一套炼丹方法,并逐渐形成了自己的一本 炼丹笔记。
Attention与Capsule初体验
之后我参加了JDATA绝对语义识别挑战大赛,预测广告宣传语是否违规。在这个比赛中,对Attention、Capsule也有深入的理解。
当序列越长时,RNN在捕捉序列长期依赖关系时就显得越弱。而从分析attention函数我们可以发现,Attention是将进行序列的每一个元素与其他元素的对比,在这个过程中每一个元素间的距离都是1。因此,我们在BI-GRU和Bi-LSTM模型中引入attention机制,去灵活的捕捉全局和局部的联系。
Capsule是通过向量的方式来建模,它利用向量输出代替标量输出,捕捉空间结构信息,最初由深度学习之父hinton提出应用在图像领域。由于NLP是通过词的向量的方式构建的,所以Capsule方式在NLP领域有着得天独厚的优势,在这个比赛中,我们将Capsule方式由图像领域迁移到了NLP领域,并进行了应用与实践。因为Capsule本质上是一种并行注意力模型,能把信息提取的注意力集中到下一层更加活跃的Capsule,同时忽略掉那些不活跃的。所以,我们将RNN的输出作为low-level Capsule,同时通过动态路由的方式构建高层语义表征得到high-level Capsule,得到的空间特征作为后续Dense层的输入。
BERT作为横扫NLP各项任务的一个大杀器,在本次比赛中我也做了相应的应用。
BERT与最近的其他语言表示模型不同,BERT旨在通过联合调节所有层中的上下文来预先训练深度双向表示。因此,用12层Transformer捕捉全局语义信息,通过next perdiction 预测下句话,可以构建上下文的语境词向量。预训练的BERT表示可以通过一个额外的输出层进行微调,适用于广泛任务的最先进模型的构建。
在此次比赛的决赛答辩中,有些选手提出BERT模型在使用时,不如Bi-LSTM效果好,其原因大概有两种,一是BERT模型的使用在训练过程中未收敛;而是直接套用原始模型,而针对该实际问题进行相应的优化和参数调整。
技术文章沉淀
认识许多志同道合的小伙伴,这也正是我参加数据竞赛的原因之一吧。2019年我和 阿水 成为了小伙伴,一个帅气的小伙,富有激情,很有想法。在很多方面都是我学习的榜样。同时工作两年和学习上的积累,让我开始对实战进行总结,并慢慢了养成了技术文章沉淀的习惯。以上方案,如果有兴趣的同学,可以看我之前的分享的详细方案,链接如下:
https://zhuanlan.zhihu.com/p/88257675 https://zhuanlan.zhihu.com/p/86868102 https://zhuanlan.zhihu.com/p/1470494322020年,新冠改变了很多,也改变了很多工作和生活模式,也改变了我很多。一如既往,今年又经历了一次组织架构的变动,不过幸运的是,无论是我离开的直属团队,还是我现在加入的直属团队,都是很nice的,只是因为个人职业规划和部门职能的改变,我做出了自己的选择。
第一本书
2020年春节期间,一次机缘巧合巧合和Cookly他们一起完成国内第一本针对竞赛实操的图书:《阿里云天池大赛赛题解析——机器学习篇》。第一次写书,春节期间完成了初稿,幕后发生了一些小故事,不仅感叹缘分的奇妙,一往无前,挺好。
为了让更多人以更低的成本接触到竞赛,更快的参与竞赛,天池团队开发了提供免费算力的DSW平台,与竞赛头部选手、机构合作分享了一系列可免费学习视频课程,为了让大家更方便的参与到数据竞赛,天池团队将7年内举行的200多场竞赛相关内容进行沉淀、优化,再优化,最终联合电子工业出版社出版了国内第一本针对竞赛实操的图书:《阿里云天池大赛赛题解析——机器学习篇》。
本书包含四大经典竞赛案例,通过七个维度详细解析每个赛题,让你清晰知道这个赛题在说什么,为什么会有这个赛题,如何用现有技术解决这个问题以及如何去优化解决方案等内容,每个赛题案例都包含N大知识点,揽括机器学习全流程,学到的不只是技术,更是一种解决问题的思维方式。
从200多场竞赛中筛选了最典型的四大竞赛——工业蒸汽预测、天猫用户重复购买预测、O2O优惠券预测和阿里云安全恶意程序检测,每个竞赛都从赛题理解、数据探索、特征工程、模型训练、模型验证、特征优化、模型融合7个步骤展开讲解、层层递进,解析竞赛内容和解决方案。
如果你想开始你的算法学习和竞赛之路,如果你想在竞赛中取得更好的成绩,如果你想知道普通选手和优秀选手的差距,如果你也想通过竞赛拿到更好的offer···作为小白,这是一本很适合的竞赛入门书,也是一本很好的算法学习实践图书;作为大神,你可以通过本书实战内容梳理自己的竞赛知识点和技能圈,查漏补缺,更上一层楼。
数字中国创新大赛
因为疫情原因,原本5月份举行的 数字中国建设峰会 推迟到了10月份,让本来3月就结束的一场智能算法比赛,在10月份数字中国创新大赛数字政府赛道总决赛的舞台上进行了延续。
如果说这次比赛最大的收获,那应该是和鱼佬,杰少,林有夕,糖糖的组队,工作后还继续参加数据竞赛,说的积极一点是让自己保持一种战斗状态和激情,说的实在一点呢,应该是我是一个很无趣的人,告别了dota游戏之后,我大部分休息时间是宅着的,所以让自己忙起来,仿佛是从研究生期间带来的惯性。但数据竞赛给我带来最大的乐趣,应该是结识队友,个人的人生经历使然吧。
在本次数字中国创新大赛中,我们的方案共由四部分组成。首先是数据基石部分,由数据探索和特征工程组成,对收集到的数据进行分析整理提取有效信息;算法内核部分是系统的智慧大脑,能够提供多种算法模型,如预测作业类型预测、预测相似度匹配、防碰撞预警等;工程骨架部分将算法内核与可视化平台进行关联,帮助实现算法封装和平台搭建;可视化平台部分由数据驱动、算法支撑,进行实时监管和智能决策,辅助海事人员进行海洋建设和管理。
在智慧海图云系统的架构设计,我们在构思整个系统方案时,秉承快速建设、多次迭代、小步快跑的模式,强调数据的多渠道采集,同时注重形成以海事、渔业场景为核心的智能化体系。系统架构分为四个部分,数据采集、数据存储、数据模型和智慧应用。完备的系统架构由强大的技术支撑,系统完成前后端分离设计,保证代码和数据安全,可视化部分使用GPU引擎完成前端百万轨迹点秒级渲染。
(1)工作与学习并行,任何时候都不能丢掉提升自己的机会,人是懒惰的,如果你不甘于平庸,那你就得努力。
(2)工作习惯的养成,无论是读研还是刚参加工作的时候,我就有记笔记的习惯,善于总结才能进步。分享一下我的部分工作笔记目录。
(3)人生目标的设定,每三年一个大目标,每一年有个小目标。但是我从来不给自己制定具体计划,因为计划没有变化快。当你有了目标的时候,你所有的选择都会偏向你的目标
(4)战斗意志——逢敌必亮剑。我最喜欢的一部战争题材电视剧的台词,逢敌必亮剑,狭路相逢勇者胜,倒在敌人的剑下不丢人。人生的不如意之事太多,不要玻璃心。
(5)拥抱变化。工作之后,你就会发现,变化时时刻刻的存在,学会拥抱变化并成长。
(6)志同道合的小伙伴。有伙伴的感觉真的很好。
感谢一路走来,leader们对我信任。作为一名技术面的面试官,截至目前我面试过的候选人应该有60多个了。社招的我就不多做评论了。对于应届毕业生,给出一些我的建议吧。如果你没有项目的磨炼,那你应该有着扎实的基本功,并且在基础知识之上你应该有些自己的思考,大多数面试官是在发现你的优点,这也是由你简历入手去了解你的一个过程,初始分50分,每次回答与对问题的理解,为你加减分,所以扎扎实实,拿出你最好的一面,展示自己。最后,好好刷LeetCode!LeetCode!LeetCode!
感谢一路走来所有帮助我的小伙伴们,感谢我这几年我陆续遇到的贵人,阳老师、兴东哥、光叔、磊哥、文文、芬姐、雪姐,还有智能不要脸群的小伙伴。感谢你们~
还有一起战斗过的坤、鸿麟、从庆、阿水、杰少、鱼佬、有夕、雨琨,路还很长,未来可期。
最后,完成对毕业后这3年的总结,开启下一个3-5年目标。
未来见~
2020年,开启了我的分享之路,分享一些在推荐搜索算法、自然语言处理炼丹技巧和感悟。欢迎关注,加入我们。 一起学习成长~