到底算法工程师需要具备什么样的能力?才能满足“越来越卷”的要求
近年来,关于算法岗位“越来越卷”的声音持续热烈。
我们经常收到一些同学提问: 算法岗位听说人才过剩要顶会才能入场了,不少人都在转开发。不管是新的应届生,还是两三年的职场人,都在被劝退。到底现在的算法工程师需要具备哪些能力,才能满足要求?
今天我们邀请了 3 名淘系技术的算法工程师,给大家分享一些 他们算法入场的经验,以及在淘系工作中真实需要的能力和素质 ,希望能够为你提供一份参考。
01
淘系技术部 | 商业机器智能部 北原
“一名优秀的算法工程师,需要具备数据分析能力和代码工程能力,从而能够在实际应用中发挥对应模型的上限。“
作为算法工程师,首要任务还是定义问题和解决问题,所以不仅会考察建模和模型优化能力。而数据分析能力,和代码工程能力都是非常重要的部分。在面向业务应用的算法工作中 , 约为60%的时间研究数据和特征的问题,剩下40%的时间会花在模型优化层面上 。
而在公司中解决算法问题,与论文中提升数据指标的最大的差异点在于:在公司没有准备好的数据/方法,有时甚至优化方向和问题本身都需要自己去定义。而数据的数量和质量,会最终决定模型的上限。
下面我就举几个工作中所做的项目,公司中的算法工程师需要哪些能力:从一项创新业务中算法工程师在观察目标制定,模型搭建和数据分析全链路中的作用:
项目背景
在一个面向线上的消费场景中,为对应商品制作展示图/创意广告的创新业务中。当时我们已经具备为一个商品,制作多张备选创意展示图/商品图的的能力。问题在于每个商品,在线上展示商品图展示数量是有限的。项目初期不同的业务方和设计师,对于最终选择哪张图的标准存在明显的不一致。
定义问题和优化方向定义问题和优化方向
如果单纯跟着商家的美感判断,人工挑选好/坏做二分类。先不论能否收敛的问题,不同商家/不同的运营会给出不同的结论,另外市场是否买单也会存在挑战,因此我们放弃这类优化方向。
最终考虑到该业务的目标:是为了给商家减轻负担并提升商家的收益。因此我们将生成图片的好坏投票权交给消费者,使用消费者线上点击率作为评价指标。最终将该问题定义为:创意内容的点击率预估/引导制作问题。确定目标后我们就生成商品图的各个步骤分阶段进行优化。
最大的成长是刷新了对「完成工作」的认知。以往我比较满足于自己「工匠」的角色,认为只要能在规定的时间内,最大限度的保障架构设计和代码的质量,满足用户的需要,并提出一些专业可行的建议,就可以算作是出色的完成了阶段性的工作。
模型搭建和数据分析
除了常规的商品特征和用户行为特征之外,我们就创意内容生成中的各种可能的元素(包括图片背景/拍摄视角等),实验可能影响最终点击率的变量,建模关联点击率的数据,指导商品和创意内容的选择和分发。
另一方面,在线上数据反馈的过程中,也有出现数据分析中的辛普森悖论:在分组比较中都占优势的一方,在整体评价中有时反而是劣势的一方。对比实验在每个小类目下的指标都超过Baseline,但是整体统计时数据却低于Baseline。造成这一点的主要原因在于,不同类别的数据量在实验组和对照组中的占比不一致。容易导致整体数据被数据量更大一些的小分组带偏。我们需要把握数据的整体和局部,另外优化好头部流量数据会对项目整体带来很大的正向反馈。
完成以上一系列优化后, 生成商品图的点击率提了20%,流量扩大了4倍 。
图像分类边界问题
另一个组内的图像分类项目中,业务方给出了约有40个类目,每个类目下样本数据量也足够(不存在长尾问题)。任务看上去并不困难对吧,拿到数据后就开始训练。优化一段时间后部分类目下准确率始终无法超过80%,模型层面的优化也只能带来有限的 1-2% 的提升。
数据分析后发现问题的原因在于, 类目边界定义不够清晰 :一张图片a1被放置在A类目下,同时另一张很相似的图片a2却被放置在B类目下。类目边界的不清晰最终导致网络在这几种类目下也无法很好的收敛。
最终我们和业务方进行了进一步的交流,明确需求之后,并进行数据集的清洗。最终分类模型准确率和业务应用到业务方的认可。
推荐业务影响模型表达的case
在feeds流排序推荐模型训练中,算法工程师要做的很重要的一步就是校验数据的有效性,我就业务过程中踩到过的,数据源层面可能会影响最终点击率的坑:
-
正/负样本错判:
多内容展示无尽流场景下用户下滑的时候,有些情况会导致在展示时,有些内容/商品只在底部露了一个头,没有完全进入用户视角内。这时候用户切换了界面,如果不做任何处理的话,这个样本就成为了“曝光未点击”的负样本,会对训练过程产生一些偏置。
-
不一致问题:
如果训练的模型表和特征表没有部署在同一个节点下,或者因为其他的原因更新出现了时间上的差异,那么这段时间的推荐结果数据就出现不一致导致的异常。
整体来说,算法工程师建模和模型优化能力确实很重要,某种意义上来说顶会论文发表证明有优秀的模型能力和英文表达能力。但是在工作中,一名优秀的算法工程师,也需要具备数据分析能力,和代码工程能力,从而能够在实际应用中发挥对应模型的上限。
02
淘系技术部 | 算法技术 琦舞
“除了必备的工程能力,一个合格的算法工程师必须要有业务owner和产品的视角“
我从事推荐算法行业五年左右,当年侥幸入行。现就职于阿里巴巴首页猜你喜欢推荐算法团队,身边有一群特别优秀的同事,他们每个人的业务和技术都十分出彩。自职业生涯伊始,我身边不乏有一群优秀的伙伴。
他们大致可以分为两种,一种热爱技术,热爱代码,热爱钻研,热爱算法,擅于将现实业务问题抽象成算法模型,对代码和算法情有独钟;另外一种情商高,擅长管理,对下的疏通和对上的汇报都极其出色,很快就做到了管理层,这种需要有一定的机遇和智慧,我身边多数人属于第一种。
聊聊工程能力的重要性
拿舞蹈来举例,如果我们把算法训练出的模型比作一支成品舞,那么工程能力就是舞蹈基本功。如果完全没有练习过基本功,或者基本功差,手脚不协调,通过努力,你也可以学会这支成品舞,但却离艺术和美感度相差甚远。如果基本功非常扎实,那么你学任何一支新舞,皆是水到渠成自然而然之事。如果你工程能力很强,基本功扎实,在工作过程中需要解决一些实际问题时,便可以很快上手解决,理论和实践之间,就差一双手。
聊聊工作中必备的工程能力。(一个算法工程师不会写代码,正如一个裁缝不会裁剪。)
一名合格的算法工程师必须要具备的工程能力:
-
debug。快速定位问题的能力十分宝贵。这点是最重要的。
-
python、java、c++等,这三种编程语言很重要,使用的频次从高到低。模型离线训练时需要用到python(无论是tensorflow还是pytorch框架),线上serving或者实现定制化的算法策略时,一般用java实现,线上Query predict服务一般用c++实现。
-
推荐多看一些优秀的语言类书籍,对自己编程习惯的养成很有帮助,多看书多思考多写代码多实践,代码肯定会越来越6的。后面我会写一个专题,与大家分享对我有帮助的一些算法/语言类技术书籍。
-
hive sql。这是工作中使用频次很高的语言,我们都是sql boy/sql girl。
-
shell、Awk等。快速处理数据以及调用一些python、java脚本时,经常会用到。
-
scala:在我工作的前几年用spark比较多,训练非深度模型很方便,与hive sql的交互也十分方便。
-
对分布式框架的理解。这个非常重要。比如tensorflow框架中的ps/worker/chief是怎么协同工作的,参数更新在哪里,模型训练在哪里?
除了必备的工程能力,一个合格的算法工程师,并不仅仅是算法工程师,他必须要有业务owner和产品的视角。
有些时候,算法效果提升遇到瓶颈时,不妨想想,从用户角度出发,从产品层面出发,是否还有更好的切入点。我们也应该深入思考业务运行机制,从投放供给端,通过冷启,到召回,到粗排,到精排,最后到排序机制,哪个链路都有可能出问题,哪个链路都有优化点,所以说,一个全栈全链路的算法工程师是稀缺的人才。供给/召回/精排/机制的联动优化,才有可能使线上效果取得质的飞跃。
一个优秀的算法工程师,既可以玩转模型,又对产品有独到的见解和思考。比如信息流推荐场景的优化,当你作为一个真实的用户去体验推荐视频流时,就会很容易发现一些产品或者系统层面的问题,然后再回归到算法,用技术手段或与产品合作去解决这些问题。只有这样,公司的产品才有可能越做越好,算法优化的天花板才会越来越高。
03
淘系技术部 | 算法技术 初类
“对一名有技术追求的算法工程师而言,一定要保持一颗好学的心。“
本科4年,计算机专业,主要是入门计算机领域、接触了C++和python等编程语言;硕士3年,计算机专业,主要是入门机器学习和深度学习算法(图像识别方向);现为淘系技术部的一名算法工程师(应用算法),入职时间约为600+天,主要涉及的算法是销量预估和人群选品。我们是一支离业务非常近的算法团队,核心定位是“业务认知top1,沉淀差异化的技术壁垒”。也就是说,我们的算法策略在很大一定程度上决定了业务结果。
我从事推荐算法行业五年左右,当年侥幸入行。现就职于阿里巴巴首页猜你喜欢推荐算法团队,身边有一群特别优秀的同事,他们每个人的业务和技术都十分出彩。自职业生涯伊始,我身边不乏有一群优秀的伙伴。
从一名紧密贴近业务的算法工程师来回答该问题,观点如下:
业务认知&问题定位
首先要清楚你所要解决的问题是什么,是否需要复杂的算法求解。问题的定义来源于你对业务的认知和理解。我们经常陷入一种误区,觉得自己是一名算法工程师,遇到任务问题都想要用复杂的算法去求解。正所谓一顿操作猛如虎,得来的效果却很一般。因此,做事之前一定要在理解业务的基础上,把问题定位清楚,用合适的方法求解。
数据挖掘&分析
深度学习的应用能够突飞猛进的一个重要原因就是大数据的支撑。当前获取数据的成本很低,而数据清理和挖掘的成本很高,但非常重要。数据是模型的输入,是模型能够拟合的上限。在入模之前,你需要花一定的精力用于数据工作,这是必要也是值得的。因此,掌握数据能力也是一名算法工程师的必经之路。
算法策略
这是每位算法工程师的硬实力,有了清晰的问题和可用的数据后,我们需要选择合适的算法策略求解问题。 就销量预估而言,由于特征大部分都是表格型,树模型及其变体成为首选的方案。 通过树模型,你能够快速拿到一个不错的baseline。 但千万不要停滞不前,你需要调研更多的先进的方案进行优化,即使此时能够拿到的收益 不多,但请坚持专研的精神(近期时序模型中,热度很高的informer值得尝试)。 此外,“人工智能,有多少人工就有多少智能”这句话在实际应用领域体现得淋漓尽致。 策略也属于算法的一部分,人工策略有时候能够带来很大的受益,也能够找到更适合的算法优化方向。 例如,我们在优化首猜的货品池时,考虑到首猜目前的推荐算法已经非常优秀了,但消费者的成交来源主要是搜索,我们通过人工分析选择了做增量货品供给的方式,拿到了不错的业务效果。 基于此,我们也找到了更合适的选品算法优化方向。
离线 实验和线上 AB实验
实验是验证理论的最佳手段,也是最具有说服力的。我们需要找到几个合适的指标进行优化,并且要保证离线效果跟线上效果没有太大的gap。例如,销量预估领域主要用到的指标有WMAPE,结合选品业务的指标有topk商品的召回率。离线实验得到优化后,还需要到线上进行严格的AB Test。此时,我们就拿到了一个完整的实验及其结论。通过不断地迭代优化,沉淀各种优质的算法策略。
领域前沿论文
对一名有技术追求的算法工程师而言,一定要保持一颗好学的心。作为打工人,我们可能很难像在校期间投入大量的时间和精力去研究和复现前沿的论文。但一定要谨记,养成跟进前沿技术的习惯,每周至少花一定的时间去看论文,了解科研学者们在做些啥。高质量的论文,能够带来很充足的信息量。
其他
-
好记性不如烂笔头
及时梳理和总结很重要。组织架构可能会发生调整,导致你的方向发生改变。因此,我们要养成阶段性的总结和沉淀。
-
勤学好问
身边有很多优秀的小伙伴,跟大家融洽地相处,更多的交流和讨论,这或许会加快我们成长的速度。
-
参与技术分享
听别人讲,讲给别人听。我们团队有融洽的技术分享氛围,互相分享近期专研的技术。你可以从别人身上学到很多宝贵的经验和知识,也检验自己是否真正了解某项技术。
结语
如上,不止是算法岗位,我们也经常听到“程序员岗位越来越卷”的声音。 任何人觉得自己“被内卷”了,有且只有一个原因,那就是能力跟不上欲望。
解决方法很简单, 要么提升能力,要么降低欲望 。
希望你保持积极和好奇的心态,专注于提升自己的建模能力、数据分析能力、代码工程能力以及产品视角,永远做不会被“卷”到的那一波。一起加油~