RecursiveFrog 发表于 2021-9-4 11:20

一个算法工程师的日常是怎样的?

比如思考、写代码的时间分布是怎样的?

unityloverz 发表于 2021-9-4 11:25

先说日常节奏,我大概10点左右到公司,12点之前会把时间切的比较碎,写写文档、看看论文、和同事沟通、列一下当天计划。
午休一般到2点(当然总有那么一两天赶进度不休息),下午主要是开会或者集中时间开发。
晚上也比较碎一些,大部分时间是处理下午没做完的工作,或者做上午这些事情。大概9、10点钟下班。
注:文末附算法工程师面试知识点整理~
如果要具体统计每类工作的占比,大概这样划分:
算法开发




算法开发工作占比70%。这里面又可以细分,首先人工智能这个领域一直在进步,我必须经常看论文,时刻了解最新的模型,并把好的模型用到我们的项目中,这个时间大概占10%。另外也会花10%的时间用在模型本身的优化和技术思考上。
其次是数据处理方面的工作,处理模型的训练数据,并且分析badcase,重新调整训练数据得到更好的效果,这个是最耗时的,大概占30%。真正做业务强相关的算法,看数据是必须要做的事情,比如数据过脏时,模型会对某些pattern过拟合,之前做过一个识别句子是否为闲聊的任务,因为数据来源的关系,加上句号和不加句号会得到相反的结果。最近我做任务之前都会先清洗一遍整体数据,用模型在所有数据上训练并预测,看哪些label模型学不到,是标注错了还是数据太难。
最后有20%的时间用来写代码,因为模型虽然做好了,但还要写很多后端的逻辑和规则,让人工可以对模型强干预,确保及时纠正线上的badcase。其实不确定性大的事情做多了,再做写代码这种确定性的工作就很有幸福感,毕竟一天写不完两天也能写完,而一天调不好模型可能一周也调不好(此处有流泪)。
比起纯开发来说,算法多了一个自由时间,就是训练模型的间隙。在集中迭代算法的周期里,能否利用好这个时间才是决定效率的关键。我个人的选择是把看论文、写文档这种事情不太重要的事情切碎揉进来。比如跑上实验后,我就看一页或者几段论文,虽然有时候会忘掉之前的,但习惯了之后就能进入一个高效的状态。当然如果那天很困的话,也可以选择休息。


会议沟通



会议沟通占比15%。一般一个项目会有多个人协作,这时就需要一些时间用在沟通上。同时项目或者小组每周都有固定的会议,也会消耗不少时间。我这个占比其实算是很少的,听阿里一些同学说基本天天都在开会,只有晚上能写代码。
文档汇报



文档占比15%。记录工作是一方面,有时要进行向上汇报,主要是写一些文档和PPT,是考验画图能力的时刻。进了大公司之后,尤其觉得自己的画图能力有所提升,尤其是模型图,要多fancy有多fancy,以至于每次自己看到都不由得发出赞美。


---
之前跳槽时总结了不少面试点,帮我斩获了众多offer,免费分享给大家,可以直接下载~
算法工程师面试知识点整理

量子计算9 发表于 2021-9-4 11:27

机器学习算法工程师的日常

目前笔者已经在互联网行业从事机器学习方向三年有余,经常也被问到做机器学习算法工程师是一个什么样的体验,同时也常常在其他平台上看到其他人问类似的问题。于是提笔写下此文,供有志投身于这个行业的人参考。
日常生活

读数学博士的时候,通常的日子是这样的:
根据论文或者某个讲座得到的信息来提出某个数学猜想 -> 然后开始在 Google 上搜索论文 -> 再花费几周到几个月的时间来读论文,并且思考这些论文的优点和缺点 -> 思考 -> 思考 -> 思考 -> 继续读更多的论文 -> 思考 -> 思考 -> 思考 ->…-> 放弃。。。。
在互联网公司做机器学习的时候,通常的日子是这样的:
根据行业的PPT或者业务中的某些痛点来提出技术方案 -> 然后开始收集数据,不仅要问遍组内,还要去其他组收集各种各样的需求 -> 根据之前的技术方案来进行数据的预处理 -> 撰写特征工程 -> 训练模型 -> 调参 -> 调参 -> 重新收集数据 -> 数据的预处理 -> 收集更多数据 -> 调参 -> 调参 -> 调参 ->…->放弃。。。。


业务理解

就做机器学习的经验来看,通常来说在做业务之前,一定要清楚的弄明白项目的业务需求是什么,弄清楚这个问题是什么比一开始就写代码重要得多。意思就是在回答问题之前,一定要把问题的内容弄清楚。有的时候,虽然看上去是一个很大的需求,但是实际操作起来的时候使用一些简单的办法也能够达到项目指标。有的时候,虽然看上去很简单,但是实际操作起来并不是一件容易的事情。从之前做理论数学的经验来看,通常数学里面的一些问题是是非题,不能够添加条件的。在 PDE 等方程领域,定理的条件越多,表示定理越不值钱。不过在工作中,这些条条框框会相对减少很多,只要能够达成项目目标,无论是添加样本,添加特征,添加服务器数量其实都是可以的,并且要把机器学习模型和业务指标有机结合才能够达到最终的项目指标。


一般搞数学科研的时候都是单打独斗,通常来说都是自己干自己的事情,别人也没办法帮自己。但是在工作中是不一样的,工作中除了干好自己的事情之外,周边的很多资源其实是可以在一个合理的范围内去争取的。无论是人员的数量,还是人员的种类,只要最终能够达成项目目标即可。无论是算法人员,还是开发人员,产品经理,最终都是要为一个项目的结果负责的。之前听过一句经典的话“失败的项目里没有成功的个人”,因此,无论怎么做,最终都要保证项目尽量成功。


数据清洗和特征工程

而在机器学习算法工程师的日常生活中,除了上面的小段子之外,其实最重要的是样本层和特征层的处理工作。在学术界,都是使用开源的数据,别人都已经完全标记好了,学术圈的人通常来说只需要在这些数据的基础上提出更好的模型,更创新的算法即可。但是在工业界就完全不一样了,不要说有人帮你标记数据了,有的时候连数据在哪里都不知道,数据的质量如何也不知道,因此更多的时候是进行数据的处理和清洗工作。之前做一个项目的时候,准确率和召回率始终上不去,但是等把样本里面的脏数据清理掉之后,模型的效果瞬间提升了一个档次。在脏数据面前,再好的模型都是没有用的,在训练模型之前,一定要先看一下数据层的问题。


除了数据的问题,通常来说在一些场景下,样本的数量并没有那么大,因此深度学习等方案不一定特别适合。在这种情况下,一般就会使用传统的机器学习方法,并且会使用一些基于业务的特征工程。这种时候就需要机器学习从业者对业务有一个精准的理解,只要业务理解得好,有的时候写一些简单的规则就可以解决问题。特征工程也是机器学习里面的一个重要问题。
持续学习

在人工智能这个领域,无论是 CV,NLP,还是机器学习,里面的技术迭代都是非常快的,而且是需要相对专业的人才能够从事这些领域。在这种情况下,机器学习从业者的持续学习就显得尤其重要,几年前的技术在新的业务场景下就未必适合,可能需要使用其他的模型或者框架才能够更好地解决问题。所以,除了完成日常的搬砖工作之外,建议每天抽一点时间来阅读论文,保持对业界技术的跟进和迭代。不过这个行业鱼龙混杂,有的时候论文或者PPT里面的技术框架其实没有办法复现,能够精准地判断哪些方案好,哪些方案差绝对是算法工程师必备的关键能力之一。


编程能力

如果是在工业界的话,编程能力是非常重要的。因为从事算法的人通常来说会有一些算法上的优化,工程上的改进,数据分析之类的工作。在这种情况下,首先需要有一定的业务直觉。而业务的经验积累需要通过各种各样的基础数据提取,在海量的数据分析工作中逐渐积累的。在这种情况下,提取数据的工具就是必须要掌握的,例如 SQL 等。其次,分析数据的工作也是必须要具备的,无论是使用 SQL 来进行分析,还是使用 Python 来做数据分析,都是自行编程解决的。再次,在从事机器学习方向的时候,不可避免的就会进行算法的效果对比。而在这种情况下,算法的效果对比是需要机器学习从业者通过写程序来实现的。最后,工业界的算法通常来说都强调上线,如果能够自行把离线,上线,效果验证,ABTest都做完,其实是最好的状况。在这种情况下,通常 Python 就不太够了,需要使用 C++ 或者 Java 等其他编程语言。因此,熟练使用多种编程语言也是一个算法工程师的能力。


常用工具

在互联网公司里面笔者用过的机器学习工具大概有这几个:
XGBoost:做分类的工具,提供离线的Python训练和在线的C++调用功能,方便机器学习从业者训练模型和线上部署;不仅在推荐场景可以用,在安全,运维等领域都有着用武之地。
Tensorflow:这个也不用多说了,深度学习的经典工具之一,离线训练和在线服务都是不错的。ScikitLearn:单机版本的机器学习工具。方便学生在校学习知识,文档详细感人,关键是还开源。其实在工业界,如果数据量不大的话,其实用 ScikitLearn 就基本上够用了。Pandas:表格类数据或者时间序列数据的经典工具。尤其是在时间序列的处理上面有特别独到的优势,应该还有其他功能,但是笔者暂时了解不多。Pandas 的接口和函数特别多,每次遇到问题的时候可以搜一下,其实比自己重头写好得多。Spark:在大数据的情况下用得比较多,通常是推荐系统一类的,海量样本的前提下,单机版的模型根本搞不定,因此会用分布式的工具。SQL:提数工具。如果不掌握这个的话,基本上什么都做不了。。。。。FbProphet:稍微小众一些,Facebook 的开源工具之一,在时间序列预测的场景下才能用到。


工作感受

给自己压力。一般来说,转专业求职是一个艰苦的过程,但是入职之后的生活则更加辛苦。因为公司的考核是每半年甚至两个月就一次,所以,在这种情况下,任何人都需要有一个上手的速度。有的人因为在学校学过相关的内容,或者之前实习过,因此上手的时候比较快;但是有的人转专业就面临上手慢的情况。其实这些对于应届生来说都可以理解,毕竟所有的人都需要有一个适应的过程。在这种情况下,在工作的初期一定要给自己一定的压力。意思就是说:在刚工作的第一年,每三个月就要让自己有一个飞速的提升;在工作的第二年,每半年就要让自己有一个提升;后续的话,每一年都要让自己有提升才是关键。因此,无论是本专业还是转专业的同学,都建议在前两年工作的时候,多给自己一些压力,只有这样,才能够让自己有更好的进步空间。
对业务的理解。公司里面有很多东西并不是直接使用开源代码就能够发挥作用的,在公司里面无论做什么事情,最重要的一点就是对业务的理解。在对业务的理解方面,老员工相对于新人来说确实有着不少的优势。其次,在做业务的过程中,通常都会经历很多的坑,无论是别人主动挖的,还是自己踩坑踩出来的,都是自身宝贵的财富和经验。而这些经验只能够通过靠做大量的业务来获得。如果要想长期保持自身的优势,通过长期的训练和学习确实是一个有效的办法。无论是天才还是普通人,要想提升自身的技术,不花一定的时间去学习是不可行的。因此,无论在任何时候都不能够放弃让自己学习和充电的机会。
勇于接受新的挑战。公司里面除了已有的项目之外,通常来说都会开启各种各样的新项目,在这种情况下,如果有机会做新的项目,也就是别人没有做过的项目。这种机会已经要把握住,因为对于新人来说,能够接触全新的项目肯定是好过维护已有的项目的。但是几乎所有的人都是从维护旧的项目开始的,只有旧的项目做好了,才有机会拿到新的项目。
不要永远抱着已有的方向不放手。在公司里面,业务方向总会或多或少的发生变化,随着部门的调整,方向的变化,所做的内容总会发生一些变化。在工作的时候,最好不要抱着我就是来做这个方向的,除了这个方向之外其他的内容我一概不想做。因为当时的工作岗位未必能够提供你想做的方向,但是说不定能够提供其他的研究方向。有的时候,在公司里面,根据方向的变化来调整自己的工作内容也是一个必要的技能。而且,在公司的时候,一定要多做一些有挑战的项目,只有通过这些项目,才能够让自己的技术壁垒更加深厚。当然,在求职的时候,每个人都有着自己的想法和选择,所以,在求职的时候,是可以选择一个自己喜欢的方向来做的。


经验总结

通常来说,在干了两三年算法工程师之后:(以下是从其他地方看到的小段子,出处忘记了~~~)
能够熟练写各种脚本;80%的时间在写脚本;能够说出几种机器学习算法的名字;轻松完成各种脏活累活(叫小弟做);对无法解释的结果已经习以为常,能够强行解释一波,让领导信服;调参前,都会去寺庙烧柱香;桌上堆着很多崭新的技术书籍,没怎么翻过,大概都会有一本叫做《统计学习方法》的书。

量子计算9 发表于 2021-9-4 11:31

北美计算机视觉工程师的日常

看到大部分答案基本都是大佬们在讲国内算法工程师的日常体验,那这里我就补充一个数据点,讲一下北美做算法工程师是怎样的日常。
我的经历还算比较丰富,曾经在三年内从初创公司的实习生跳到国内大厂北美研究院的全职,再跳到德国车企北美研究院的senior职位,所以在这里,我想分别介绍一下这三种不同类别公司的日常是怎样的。
初创公司日常体验——一入初创深似海

在startup干活的特点有三个:钱少、活多、压力大。至于成长速度与成长上限,有很大一部分取决于你的leader.
工作作息
九点上班,中午十二点午饭,下午一点干到六点下班,然后开始加班到十点,周末单休。没错,我在这家初创公司拿着可怜的实习生薪水,过着比国内996还要悲痛的生活--因为我的组长就坐在我身后,我一旦发呆或者看手机,他就会过来提醒我,连一点摸鱼的机会都不给。也是在这段时间,由于压力过大和缺乏锻炼机会,我体重狂涨将近20斤,过了很久才恢复过来。现在想想,当初就是被PUA了。
工作内容
我刚加入者家公司的时候,整个公司一共就10个人,我的小组长也是刚加入(没错,我们组就我俩人),他开发了一个很丑陋的产品原型,我的目标就是不断改进这个原型。
在这段时间里,我的工作80%集中在不停地扒拉别人现有的github repo和pretrained model,然后放到我们自己的数据集上跑一跑,把效果好的demo记录下来,汇报给小组长,小组长会拿来深入研究(后来事实证明,他所谓的研究就是拿着我搞的demo继续拉大老板的投资,根本没做实质性的工作)。另外的20%时间用来复现那些看起来效果很好,但是没有开源的论文。有些论文复现难度很大,我就会拿着向小组长请教,结果发现这个以PhD自称的组长也都是束手无策,只会含含糊糊地说个所谓的方向(比如,你要把这几个数学公式搞懂再写阿!什么,你搞懂了?不可能,那一定能复现,你再好好查查.......).
我在最初时对工作内容还算满意,虽然很多时候做事情像蜻蜓点水一样浮躁,复现时经常受挫孤独无援,但我的确对相关领域在短时间内有了完整的了解,数学能力与代码能力也在复现中得到了提升。但到了后来,小组长push我越来越严重,言语bully, 他自己却又毫无作为,每天沉浸在社交媒体,我实在忍无可忍,直接在某天发作,与他进行了一番激烈的撕逼,当场辞职。
总结
虽然我本人在初创公司的体验很差,既没有生活可言,薪水可怜,成长有限,但是不排除这个世界上仍有很多好的startups值得你加入。不过一定要瞪大眼睛仔细观察,如果你的tech leader技术水平有限,人品一般,还是躲得越远越好。
国内大厂北美研究所日常体验——充实愉悦暖似家

从上一个初创公司离职后,我加入了某国内大厂北美研究所,在这里度过了一段充实愉悦的时光。
工作作息
其实在这里的工作时间表有两套,第一套是研发阶段,第二套是落地阶段。
在研发阶段的时间安排整体比较轻松,早上九点到办公室,中午十二点开饭(湾区最棒伙食,经常能吃到火锅、烤鱼),午饭后会在附近的小道上和同事们一起散步半个小时,然后接着回来工作,干到晚上六点下班,几乎很少加班。下班之后我一般会去健身房锻炼一小时,然后回家继续充电,写写论文,上一些网课。
到了落地阶段时间安排就不太固定了,其实工作时间仍旧是八到十个小时,但为了配合国内团队,有时候需要昼夜颠倒,白天休息,凌晨干活同步。好在这种日子一般不长,而且其他同事也会与我并肩作战,整体感觉还好。
工作内容
40%的时间是在做各种算法的prototyping, 包括阅读大量文献,筛选适合我们应用场景的baseline, 并且在baseline上不断提出改进的idea, 然后在大量的数据集上训练与验证,力争效果达到最好。由于每次训练需要花的时间比较久,我们每个人往往同时会负责两个项目(一主一辅),这样就不必眼巴巴等着训练结果出来,而且交叉领域很多时候会带来新的灵感。
另外有40%的时间是用来做模型优化与移动端移植。因为许多模型需要放在移动端跑,所以需要针对不同的prototype进行模型剪枝、蒸馏、量化、结构调整,在表现与性能之间找到最优平衡点,然后利用各种移动端ML Framework将模型移植。
最后还有20%的时间就是用在数据清理和写专利啦!
总结
这里有很多厉害的同事可以给我指点,同时操手算法设计与落地让我具备了全栈能力,代码水准大幅度提高。而且这里的同事大部分都很nice, leader人超级棒,给我留下了许多温暖的回忆。
德国车企北美研究院日常体验——一丝不苟惊喜多

在德国车企北美研究院的工作可以说是轻松愉悦又心惊胆战,这里继秉承着德国人严谨的特性(就连comment里面语法写得不好都会被decline pr,如果代码写的不够规范或者效率太低,组长会非常严厉地提醒你), 也有着德国特有的人文关怀(假期超级多,豪华汽车只要提前预约就可以免费开)。
工作作息
早上九点上班,十一点四十吃饭,一点开始工作,最早五点半就能下班,基本是实打实的朝九晚五。重点来了,除了每年正常的带薪休假外,我们在圣诞节期间会全体放假两周,感恩节期间放假一周,每年还经常来几天wellness day放假,可以说一年里面有差不多一个半月都处于放假状态.....
工作内容
由于我的主要职责还是在计算机视觉这块领域,所以与上一个公司比较类似,30%时间算法prototyping, 30%时间放在模型优化与移植到无人车上测试,另外还有20%的时间针对组内现有的代码架构做一些泛性优化,剩下的时间用来撰写论文与专利。
总结
日常整体较为轻松,最大的进步在于代码的规整性、可读性和效率大大提高(毕竟审查变态般严格),同时有许多自由的时间与空间去探索最前沿的论文成果,可以结合自己的经验产生新的模型(顺便再出几篇论文就更好了)。
精致的结尾

在北美做算法工程师整体来说日常体验来说还是不错的,虽然工作时长基本停留在每天8到9个小时,但是效率非常高,很少有划水,同时充分的休息又让这种高效可以持续很久。这里的大部分公司都是扁平化管理,所以交流起来比较轻松友好。

KaaPexei 发表于 2021-9-4 11:39

感叹高赞的各位的日常如此优雅。
答主作为一个算法工程师,在一个典型的成建制的算法团队工作。所谓成建制,就是算法组+工程组+产品组+数据组。这样的团队里,算法组的工作就更聚焦了。
在这样的算法组工作的日常,和大家讲的差不多,但比例上有差异。
1. 由于产品组把算法、工程和运营相对隔离,因此平时和业务方对需求的精力可以降到10%左右,把一些拍脑袋的脑残需求挡在门外。作为算法同学,当然也期待产品对算法的边界了解更多一点,这样对需求的时间可以降到1%以下(狗头)。
2. 虽然公司有很多高效的中台化平台来支撑上线流程和数据,但还是需要写代码的。有了一个常驻工程组根据场景进一步抽象,上线流程已经可以配置化、code-free了。普通模型上线的精力也下降到1%,业务策略上线精力下降到5%左右。
3. 由于有聚焦的数据团队,进行各种数据报表建设,大盘级别的数据分析精力也被分散出去。
4. 推荐算法场景的业务收益来源,一般是运营手段 >> 特征工程 >> 模型优化。所以平时50%的时间都用在报表研究+更细化的数据分析,因此平时80%的代码是SQL脚本。
5. 10%的时间会拿来学习业界的先进经验,尤其是筛选论文。推荐顶会的文章也越来越华而不实,现在几乎强化学习、联邦学习免疫了。每年那么多搜索推荐系统的文章里,一般只能找到一两篇落地真正有效的论文。
6. 10%的时间进行新特征的日志埋点开发、模型的优化。
7. 剩下5%的时间要应对业务方的badcase和体验优化。
不难看出,大厂搜推广算法工程师的焦虑也往往来源于此,作为SQL工程师,自己的价值依赖强大的中台来体现,很多壁垒源于业务理解,但业务往往是场景、产品特化的,所以多动动、拓宽视野很重要。

Doris232 发表于 2021-9-4 11:45

实名反对匿名的那个答案。数据挖掘工程师和算法工程师是两个岗位。
回答问题:很多算法团队是配备专门的工程人员的,做算法在系统中的集成。算法主要的工作在分析数据,修改模型和做实验上。业务不把人逼死的时候,看看KDD上的论文,看看哪些可以拿进来做提升的。思考时间最多,但是一般和业务相关,比如分析数据,了解业务场景;学习时间看自己的工作效率和业务压力情况,一般浮动比较大; 写代码...基本不太写。
之前在百度也是算法团队,写代码的工作会多一些,很多算法要自己在服务器上实现和发布。
整体来说算法工程师没有一般开发那么大的业务压力,但是很多时候需要自己思考确定工作方向,比如在百度做某个指标的优化,要自己分析数据,看代码,思考在哪些方面做提升。
“有梦想有能力的”都在自己的岗位上尽可能的提升自己的能力和价值,无论是在公司还是创业。每天开会发微博抖机灵的,不知道能力都是从哪里来的...

DungDaj 发表于 2021-9-4 11:49

打个招聘小广告,最近组里因为有很多新的专项比较缺人,有充足的hc,如果你想换工作或者找转正实习可以联系我微信18801178753,全程跟进面试进度+陪聊。(社招大佬不换工作也可以加个wx方便以后交流学习哈哈)
我们组是字节跳动Data-推荐,负责今日头条/西瓜视频/番茄小说/皮皮虾等业务的推荐和安全算法,推荐/CV/NLP都有需求。个人感觉我们组无论是模型、工程还是业务都是比较扎实和前沿的,真正以解决业务痛点为目标锻炼模型/工程/产品思维能力,人际关系也比较简单纯粹,组里很多OI/ACM金牌和姚班/清北/论文大佬,也愿意和这种菜鸡平等地探讨问题共同成长hh研究生期间在五家公司实习过,其中包括1小厂1中厂,还有三个大厂(阿里、字节、快手),虽然目前还没毕业,但是也算是见过各种各样的正式员工,借着狗哥的邀请回答一下这个问题。
虽然各家公司由于业务、岗位不同,具体工作会有所区别,但是因为我是做推荐的,不管是电商、短视频还是现在的中长视频,基本上都比较类似,总结为一句话就是:用各种方法解决业务问题。所有的工作都是围绕这个目标来的。(研究型算法岗位可能不太一样)
日常作息

我一般10:30到公司,去零食角拿面包,再接一杯热牛奶,先打开电脑处理一下lark和邮件的消息,然后打开实验看一下指标是否正常。不正常就处理一下问题,正常的话早上一般会做一些分析debug类的工作,对实验组对照组做一些深层次统计分析,安排一下今天可以尝试哪些方向。
然后就是中午饭,字节午饭还是很不错的,一般吃完后会在桌子上戴上眼罩睡一会,然后大概1:30起来。下午偶尔会安排一些会议或者分享,除此之外一般就是按照自己早上定的方向做一些模型、开发工作,也可能伴随着一些业务讨论或者急事,总之争取在晚饭前把模型任务提交flink、或者代码提交review,然后大概6点多会去健身房锻炼、吃饭。
晚上的时间一般是继续处理当天的任务,开实验、改代码,如果感觉干的差不多了可以看看论文博客啥的。有的时候大家也会组织打台球、乒乓等,晚上有事群里说下就可以先走,没什么事情就9、10点左右走。
和学校的区别

在学校可能更多的是针对一个具体问题,看paper—>想一个和牛逼的模型—>做实验—>auc提升一点点(或者压根没效果,采用各种办法把实验结果弄好看点)—>发paper,或者打各种比赛。
在工作的时候更多的是,产品需求—>battle—>写工程代码;或者是(花大量时间)理解业务—>(大量时间)分析数据—>(经过推理验证)提出可以做点—>改数据预处理代码(很费功夫)—>模型(一般很快搞定)—>等待资源(可能很久)—>调参(不太调)—>开ab实验—>观察实验结果(详尽分析)——》继续循环
算法可能不像开发有非常繁重的确定性任务量,反倒是比较自由的支配自己的方向。且由于大公司中台非常强,所以模型的编写,模型serving,开ab实验的东西都很流程化和方便。
对业务算法工程师而言,关注的焦点永远不是模型本身,而是业务。我感觉公司里成果比较突出、职级升得快的,不一定说代码写的多快、论文发的多好,一定是把业务吃透了,并且有自己想法的人。这和学校可以说是完全相反的。比如我们组有几位姚班同学,为了做好作者侧的冷启动,会定期自己拍视频、剪视频、体验作者发文的感受,深入思考做的事情是什么,有什么价值,而不是一篇篇论文无用的尝试。
如何提升

(1)多看组里人的实验报告,多听分享会,看看别人是怎么思考问题,怎么解决问题的。
(2)好好理解业务,不只是算法层面,还要从产品、心理等角度思考,好好分析数据。比如做中长视频推荐,中长视频和短视频、电商、直播的产品/算法区别是什么;我们竟对的产品、算法是什么形态;如何用更精准的数学分析建模哪些品类需要引进更多的作者等。入职之后我看的前几篇文章是字节的101,感受非常深刻,能够体会到非常多业务前线的思考,也对整个视频行业有了新的认识。
(3)学会推荐方法论。这里指的不是模型,而是怎么发现问题,怎么构造数据,实验怎么看结果,结果不好了怎么debug,结果好了怎么分析收益来源,收益的方法可否复用等,这些都是必须去工业界一个个实验和报告堆出来。
(4)学习工程思维。这点我体会比较深,因为我不是科班出身,之前都是在公开数据集跑一跑py文件,打印结果就完事了。现在在公司会去接触更多工程的东西,比如新人串讲会关注:多路召回如何多并发请求,instance怎么存储和训练,客户端服务端消重的区别,消重怎么做存储优化的,为什么粗排要把之前的一个流程拆分为两个等。
(5)培养良好的代码规范,学习一切能提高工作效率的东西。比如我觉得同事们linux都用得很熟练,很多脚本也写得很快,相比之下我做事的效率确实低很多。


自己也希望能够在实践中好好成长,所以也想不定期分享一下自己的收获,所以建了一个公众号:【推荐广告算法小木屋】,也会在知乎发。
比起单纯写论文的阅读笔记,或者转发一些都转发烂了的广告,我还是更希望写一些自己的真实感受,也希望能够抛砖引玉,找到志同道合的人一起讨论,贴以下自己最近写的几篇文章。
https://mp.weixin.qq.com/s/X_eqJLW2K3qX2oPJIIo_2Aiwtbs:推荐场景中,线上线下指标不一致是为啥iwtbs:谈谈推荐算法中的‘trade-off’iwtbs:谈谈我眼中的“推荐算法”

NoiseFloor 发表于 2021-9-4 11:55

大家好,我是来自淘系技术部的一名推荐算法工程师。
下面以我的 电脑记录的App使用时间 为线索简单分享一个算法工程师的日常~



Chrome


Chrome是占用时间最多的App,日常工作中有绝大部分的任务是通过浏览器完成的,主要包含以下4个方面:

查看业务数据报表

我自己每天来到公司的第一件事就是查看最新的业务数据报表,这包括了大盘的数据,AB的数据以及各个细分维度的数据。通过了解最新的数据情况可以指导我们下一步工作的展开,算法的优化是一个不断迭代试错的过程,及时获得反馈并进行调整是非常重要的一环。


2. 进行数据分析和建模

在机器学习领域,garbage in garbage out 意味着如果送给算法的数据质量不高,那么得到的结果也不会太好。曾经我就有过因为在准备数据过程中不小心出现了样本穿越的问题,导致后续整个的模型训练得到的结果都是不可信的,后来又花了很多时间来排查问题和重新搭建数据链路。除了算法使用的数据外,数据分析的逻辑不合理也会引导我们采取错误的行动,这样的行动很可能对业务是无效甚至是负向优化。在数据环节重视起来可以起到事半功倍的效果。公司一般通过DataWorks网页端进行数据处理代码的编写和定时调度节点的发布,这占用了日常工作的大部分时间。


3. 业务方案和算法模型的部署和发布

推荐算法工程师是要面对线上流量的,而所有的业务逻辑和算法模型从离线到在线都需要经过一个发布的流程,通常是先灰度,在小流量,然后逐步扩量最后全量。公司的中台团队开发了诸如TPP,BE,RTP等平台,算法工程师可以聚焦于算法和业务本身,工程性的工作由平台完成。在这些平台的网页端,我们可以快速的完成业务方案和算法模型的发布工作。


4. 学习充电

公司内部有一个ATA社区,可以说是算法工程师的宝藏之地。在这里有各个BU业务线和不同岗位的同学分享自己的实践经验以及对前沿技术的解读,每次逛ATA都有很大的收获。另外,阅读一些领域相关的paper可以保持对技术的敏感性,如果发现不错的思路可以结合自己的业务场景进行尝试。
最后,我还会在github等技术社区看看有没有什么实用或者有趣的项目,作为技术储备或直接进行复用。我自己在业余时间也维护了一些推荐相关的开源项目,感兴趣的朋友欢迎加入一起学习交流~
https://github.com/shenweichen/DeepCTR
https://github.com/shenweichen/DeepMatch


DingTalk


就是大家熟知的钉钉了,在公司里大家都是协同办公的,每一个业务模块的迭代都涉及到诸如产品,运营,开发,算法等不同岗位的同学。高效的沟通交流对于推动工作前进是非常重要的。除了协同外,日常工作中使用公司内部工具可能会遇到一些问题,这时候也需要和相关答疑同学交流来解决。我自己的话有时候还会看别人交流,在一些群里看别人聊天也是有收获的hh。

PyCharm


PyCharm是我常用的python IDE,主要用来编写各种tf的模型代码。也许很多未工作的同学觉得算法工程师的日常就是写模型,调模型,就我自己而言,写模型代码的时间相对而言并不多(这也得益于公司的强大中台和内部开源代码库)。


PowerPoint


团队内部是有分享机制的,我们分为了业务分享和算法分享两大方向,截图的这周正好是我准备PPT的那周,所以花了一些时间搞PPT。除了内部分享外,在季度末,绩效季末,晋升季等时间点,也会投入一些精力去做工作总汇报的PPT。

Intellij IDEA


Intellij IDEA是一个java IDE。除了算法模型和数据处理外,整个推荐系统的链路从用户请求到来到诸如画像获取,召回,排序,重排等模块的串联也是需要算法工程师来实现的。公司里一般通过编写java代码实现,所以给即将入行推荐的同学们的建议是除了python外再学一下java或者cpp吧!


最后,欢迎朋友们关注我们的知乎机构号,持续分享我们的经验&欢迎加入我们团队!


——————————————————————————————————————
阿里巴巴集团淘系技术部官方账号。淘系技术部是阿里巴巴新零售技术的王牌军,支撑淘宝、天猫核心电商以及淘宝直播、闲鱼、躺平、阿里汽车、阿里房产等创新业务,服务9亿用户,赋能各行业1000万商家。我们打造了全球领先的线上新零售技术平台,并作为核心技术团队保障了11次双十一购物狂欢节的成功。
点击下方主页关注我们,你将收获更多来自阿里一线工程师的技术实战技巧&成长经历心得。另,不定期更新最新岗位招聘信息和简历内推通道,欢迎各位以最短路径加入我们。
阿里巴巴淘系技术

XGundam05 发表于 2021-9-4 12:01

哈哈,刚刚写完一些报告,逛逛知乎,遇到了这个问题,就立即回答一波!
做NLP算法三年多了,算是国内人工智能火起来之后的第一批算法工程师,职业发展整体是不错的。
说一下日常,首先第一个点,目前的算法工程师基本起点是研究生(不是说本科生不能做,只是占比和上升都很小),我将我的历程简单分成下面几个阶段。
实习和工作第一年

一般会跟着一些前辈一起工作,不过前期仍然以打杂为主,主要包括数据处理,规则化方法。这一阶段主要是提高算法视野以及理解算法和项目的嵌入。这一阶段就是前辈让你做什么,你做什么,一切主要和项目走,业余时间多看论文和博客,提高技术,时间占比7:3吧!如果这时候前辈愿意把手上的一个成熟的项目让你去迭代和维护,就是很好的,你可以以此为理由,拥有了自己单独的成熟的项目,并且也不需要承担很大的开发代价。
工作1-3年

这个阶段,基本上就开始参与到项目中,独立参与项目的1到2个模块。以NLP为例,可能会接触到分类,数据增强,序列标注,甚至槽位抽取,事件抽取这些和NLP任务强相关的算法模块。这里日常的工作是调研算法,代码实现,代码调优,根据项目特色优化等等。通常这个时候,是人成长最快的阶段。日常的工作是针对任务看论文和博客,以及算法实现和项目调优。阅读论文和代码实现的时间大约2:5,剩下的3会放在项目会议和工程链路实现等上面。
工作3-5年

我目前类似于这个阶段,已经开始独立的带团队主导和设计一个项目。这个时候需要针对一个项目进行整体链路设计,对团队的算法进行指导或者自己实现。有时候一个人负责一个项目,有时候带团队一起工作,日常的工作仍然是看论文学技术,算法实现和项目落地,时间比差不多是1:4,剩下的时间要和产品,业务对需求,给解决方案,或者指导团队进行算法尝试,甚至进行一些必要的算法培训。
其他

目前只到这个层次,所以不知道后来如何。基本上这个一个技术性的岗位,所以永远没法脱离技术,而算法工程师的技术很大一部分来自于高端博客和论文。此外,既然在公司工作,那就永远没法离开业务,这也是我认为一个合格的算法工程师必须能就不同的业务场景给出更合适的算法落地。但和其他工程师类似,往上走就不仅仅是一位算法工程师了,你可能需要更多的管理能力,包括项目管理和人员管理。

DungDaj 发表于 2021-9-4 12:03

本人虽然刚刚从事这个行业半年,但是也想斗胆回答一下,首先说明一下自身的情况(即背景故事),本人不是计算机科班出身,研究生期间也不是搞算法的,等到快找工作的时候,发现原本学的方向待遇太低因此转行搞计算机视觉,这个找工作的过程很痛苦,这里就不说了。
这里必须要 吐槽一点外界对人工智能的一些非常主观的看法,
第一,人工智能不是AI万能,总有一些傻diao领导或者其他项目合作者,不知道是否是因为新闻看多了,感觉现在的技术已经发展到无所不能的境界,以致于一直怀疑我的能力有问题,为什么做不出来?what f**k,这应该算是日常中的一点了,如何说明傻diao上司理解AI不是万能;
第二,人工智能还不能实现真正的智能,人工是可以我来搞,但是智能我教不会它啊,我只会调模型,调参,你还要我怎样???不能妄想通过几个简单的功能就能合并其一个无所不能的机器人,omg,我服了!!!
第三,对于我这种菜鸟来说,日常做的最多的就是清洗数据,结果不好--->数据有问题--->再跑跑看--->我曹,怎么还是不行--->换个模型再跑--->咋还是这个鸟样(完蛋了完蛋了,只能跟领导说,目前我们的数据量太少无法达到客户的要求,但是如果他们愿意提供更多的数据,我想结果一定会好的,然后客户不愿意给,那我也很舒服的混过去了。。。)
第四,前面说了那么多,其实我日常的主要事情还是先要把客户的需求分解为具体他想要的效果,其次努力设计方案来实现这些功能,最后这群丑恶的资本家他们还是喜欢看图的,所以可视化操作(图片展示)必须要搞好看点
页: [1] 2 3
查看完整版本: 一个算法工程师的日常是怎样的?