当前位置: 首页 > 科技观察

2021年,算法工程师必备的能力有哪些?

时间:2023-03-11 21:18:54 科技观察

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