找回密码
 立即注册
楼主: RecursiveFrog

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

[复制链接]
发表于 2021-9-4 12:11 | 显示全部楼层
研究生在百度,头条,阿里实习过,现在在阿里搬砖。2020经历了学生->社畜的转变,分享一下算法工程师的日常吧。
算法工程师其实分成两种,一种是科研型,比如达摩院、AILab这种搞研究的;一种是业务型的,比如淘宝,抖音的算法工程师。实习到工作一直都干推荐相关,所以只能分享一下业务型工程师的日常了。
业务型的算法工程师,其实并没有大部分人想象中的那么高大上,因为都是跟着业务走。在很忙的时候,比如大促的时候基本是没有时间沉淀的,疯狂coding+和业务battle+开会就占用了大部分的时间,模型能简单就简单,能复用就复用,先让业务用上再说。在不忙的时候(其实也没几天不忙:) )会看看KDD、WWW之类的paper,看看能不能有一些启发然后魔改一下模型,提升一下auc。
我呆过的除了百度,头条和阿里基建都很完善,很多时候都是sql boy。但是也归功于牛逼的基建,我们开发一个新的模型结构其实花费时间很少,很复杂的模型也可以hold住,可以快速的迭代模型。这也是优势吧。
算法工程师主要的思考还是如何用发现和解决场景的问题,其实不限于模型的更新,个人感觉模型的迭代带来的收益并不高。很多时候一些策略也是非常有用的,这就需要很强的业务sense了。
最后打个广告,部门快速扩张,招人ing,欢迎私信。
发表于 2021-9-4 12:17 | 显示全部楼层
目前在阿里做算法,主要偏向于业务建模,即把算法在业务中落地的工作,一般一个算法相关业务的上线需要这么几个过程:
    对接业务方,第一个步骤是去和业务方进行对接,对接的过程中要去了解业务方的需求,业务的真实痛点,很多时候对接的业务方并不了解算法能做哪些事情,因此,在对接的过程中业务方会提自己想要的目标是什么,而此时算法工程师需要凭借经验去评估这个方向的业务价值,评估这个方向是否适合算法来做,现在是否是切入的好时机。数据的盘点,对于算法来说,数据的重要性不言而喻,很多时候调半个月的参数,模型的效果都不如引入一份高质量数据来得效果好。阿里算是数据的基础设施做的很好的一家公司,数据在不同平台的流转工作相对方便,另外阿里也有很多基础数据,然而,实际在工作的过程中还是时常会碰到没有数据,或者数据质量不佳的情况,在这种情况下一方面需要对数据做出大量预处理的工作,另一方面,需要去思考如何依赖现有数据对模型进行评估,进而去评估业务效果。建模,包括以什么样的思路去解决这个问题,预测模型效果增益,特征抽取,特征处理,选用何种模型,效果评估,模型迭代,这部分可能是在我的人之中算法工程师的工作,而在实际工作中,这部分工作如果能占用30%的精力,已经是很高的比例了。模型上线,取决于依赖何种上线方式,有的时候很简单,可能产出的结果只是一张结果表,业务方下游直接引用即可,有的时候涉及到大量的工程工作,需要考虑模型的性能,复杂度。延时,可解释性什么的也会需要去进行考虑。
这四个过程中就是算法的日常工作,精力分配大概是30%,10%,30%,30%,这只是一个毛估估的精力分配比例,有可能一两周都是处于和业务方开会过程中,也有可能某一个小项目从头到尾都比较确认,直接当天就能从第一步走到第四步。
发表于 2021-9-4 12:19 | 显示全部楼层
思考、看书、学习的时间: 写代码的时间 = 7: 1
发表于 2021-9-4 12:20 | 显示全部楼层
20%看资料看论文,30%思考,45%处理数据,5%写代码,大概
发表于 2021-9-4 12:30 | 显示全部楼层
通勤时间答一个,纯手打,1k多字了,觉得好给个赞吧。
先说说工作日。
    工程代码。算法实验。各种沟通,产品,运营,工程,测试,老大,还有知乎(偷笑)。看论文。
至于各种事情的占比,和很多项目的发展,团队的大小,工作的类型有关。
我的现状是大团队下的小且新的业务线,不是研究院,抬头是算法工程师,数据挖掘工程师,代码活多的很,论文调研啥的会有但是不会太多,会占到5到6成吧,包括这几个事情:
    算法工程服务代码。离线在线的数据流和预处理。深度学习积木。
已经过了大量对需求的阶段,但是仍然要和工程沟通很多,可能需要占2成多的时间吧。
大家熟知算法实验,占2成左右吧,baseline到迭代更新的实验,当然模型训练或者数据处理过程长的话我会干别的事。
看论文。这个应该是算法的必修课了,我一般一早和中午会集中时间看自己感兴趣的东西。有的时候,算法优化到了瓶颈,也会花很大的经历做一些相关领域的方案调研。
随着项目的发展,算法调优的时间会占的逐步变多,但是经验上看最多不超过4成,毕竟还有各种开发维护工作,项目源源不断有更新,有的时候还有写专利之类的事情。
当然了,摸鱼肯定是要摸的,知乎朋友圈是要刷的,有时候听着音乐也会刷刷网易云。
说说自己对这个状态的评价,个人挺喜欢这个状态的,工程和算法能有平衡,这个无论是对晋升还是对自己的发展都有很大的好处,广度肯定是没问题,深度可以通过自己的学习和结合任务的尝试来获得提升(模型训练的过程能让自己做很多别的事),一个事情的好坏绝对不只是来源于一个模型的效果本身,还有性能问题,效率,人力,维护等很多问题,这些都是要考虑的。对自己,多线程,多思维方式的锻炼的确让自己的整体能力得到提升。
至于生活状态,老说我们公司加班多,我其实没这个感觉,995,而且周三周五还可以提早一些走(虽然还是晚于正常上班),这个时间和很多公司比好很多了吧,至少对于现在的我而言是合适的,对现在家庭压力不大的我来说,首要任务是成长,现在的活多干点多体会点就已经是成长,所以还凑合,生活节奏还挺满意。
说说周末,我自己本身是挺追求work life balance的,周末自己主要是两件事。
    陪家人。自己玩。
陪家人这个不多说,虽然没结婚没孩子,但是家里的活动其实不少。自己玩其实分两种,娱乐放松是一方面,自己会玩玩switch之类的,英雄联盟自从新装备系统上了我就不想玩了,不想花时间研究了,另一方面是学习吧,自己本身对算法这个领域是有些热诚的,自己看看论文,写写公众号分享啥的(知乎最近怠慢了,后续会补更新,公众号现在依旧一周一篇原创文,CS的陋室),不要问我为啥坚持,有啥经验,说实话我自己的角度看真的就是兴趣。
除了算法,啥都不会,最后给大家表演一个点赞吧:
发表于 2021-9-4 12:34 | 显示全部楼层
找特征调模型上线
发表于 2021-9-4 12:36 | 显示全部楼层
算法菜鸡一枚,主要做图像和文本。
研究生是熬夜熬过来的,身体垮了,人也丑了。想大学那会,人家见了我,还以为我十六七。后来沉迷学习,便日渐苍老,年纪轻轻的,脸就奔三了。本来是为了水论文去读博,后来就向钱看齐了。相当于,应该有一部分时间要拿出来精进技术的,结果全奉献给了科研;应该有一部分时间拿出来广泛接触各种课题的,结果却只盯着一个狭小的领域折腾了三年。当然还是要怪自己不坚持,否则这夜熬的其实也值。
本着中华儿女吃一堑长一智的优良传统,除非有急事,否则我是不加班的。有那时间,可以系统学很多东西,漏的补补,新的尝尝,职业生涯还能长久点。加班说白了就是在啃老本,榨干了,也就没价值了。当然算法岗还能好点,毕竟不是git clone就能解决的。既能学学代码结构,又能看看论文,得好好珍惜。
分享一下我工作后的时间安排。
周一到周五:
7:00~9:00起床洗刷整理做饭吃饭,一小时;看看新闻,半小时;然后驾(自行)车上班,九点准时打卡。
9:00~9:30开会,总结昨天,展望今天,顺便讨论一下炼丹良方。
9:30~10:00带薪如厕,沏茶,调整心绪,摩拳擦掌,挠头扣手,以理清今天工作。
10:00~12:00认真工作中,完成需求,写写bug,数据处理,数据分析,深度炼丹,效果分析,文档工作,工程化相关的工作也会做;讨论讨论,发发牢骚,或者直接开会研究;再就是阅读文献资料,调研各种工具。算法工程师嘛,每天可不就是做这些。当然还会因为茶喝多了,要跑几趟厕所。
12:00~13:30吃饭溜达一小时,午休半小时。
13:30~6:00工作不能停,茶也不能少;还定了个闹钟,每天两点半抄底。
6:00~6:30规定六点下班,不过大概率还会因为有事没忙完拖一会,所以很多时候六点半才撤。如果急着上线需要加班的话,可能会到10点,不过情况比较少。
6:30~11:00回家,做饭,吃饭,锻炼,打鼓,看剧,杂事,来知乎看大家吹牛逼等等。也会看一些理论和技术类的资料,继续提升自己。哪天做哪几项都有计划,虽然也不一定遵守。工作其实也会顾及,如果有丹在炼,也会时不时盯一下,不能让服务器闲着,是不是。
11:00~12:00洗刷,玩手机,睡觉。
12:00~7:00为买不起房而愁的睡不着(开玩笑的,我是倒头就睡,虽然还是买不起 )。
其实也会有很忙的时候。比如以前公司给部门的定位是做算法产品并出售盈利,所以上班基本就是在疯狂的写预处理和工程化相关的bug,再不就是解决一下客户出现的问题。我们组人少,一人要带多个项目,就搞得很疲倦。最关键的是,没有时间全面思考,也没有精力做创新性活动。
后来,公司开始正确看待算法的价值,工作的一部分就可以移到基础性和探索性的活动中来。身心得到了释放,脑子也终于派上了用场。不过依旧免不了其他部门的奋斗逼往上打小报告,年后可能要做做样子加班。这里奉劝大家,本都是牲畜,相逼何太急。今天你逼别人无缘无故加班,将来你老了不如年轻人能加了,被裁后能无怨无悔的接受反噬吗?
周末:
大概率会赖会床,但是晚上还是会准时睡觉。周六上午一般是打扫卫生,洗衣服。剩下的时间就是出去嘚瑟,吃点好的等等;当然也会适当的学习,嗯,适当的。。。
作为打工仔,工作时间里,是必然要认真责任的。但其他时间又没给钱,本来就是自己的。锻炼,爱好,生活,广泛学习,任何一件事都值得花时间是去追求。生活规律了,身体就硬朗了,脑子也会灵光。大冬天的我都不穿秋裤,因为,太热了。。。。。。
看现在的我,一个工程师,能在26岁的时候,拥有一张26岁的脸庞,实属荣幸。
发表于 2021-9-4 12:45 | 显示全部楼层
在大众眼里,算法工程师一直是一个比较神秘的角色。听起来很有科技感,好像研究的是什么了不得的前沿技术,非常高大上。但是看来看去代码产出却不多,听起来好像很厉害,但却并不知道都干了些什么。
今天就和大家做一个揭秘,分享一下算法工程师的工作日常。
本文用非常通俗易懂的语言,很好科普了算法工程师的工作内容,建议对算法感兴趣,尤其是想要入行的同学们,一定要将本文看完,将极大增进你对这个算法工程师的认知。
ps:这段时间,很多想要入行的萌新会私信我求一些关于深度学习的资源,众所周知,深度学习是算法工程师的必学内容,尤其TensorFlow和PyTorch这两个框架更是重中之重,我这边整理了一些TensorFlow+PyTorch相关学习资料,这里先分享给大家。
985博士总结|保姆级人工智能笔记(20G高清/PPT/代码)
原文链接:代码没写几行,算法工程师们上班都在干嘛?
作者:Coder梁
算法工程师的工作目标

如果说开发工程师的目标是做出之前没有的功能,或者对已有的功能进行优化,那么算法工程师的目标又是什么?
这个问题对于业内人士来说当然简单,但隔行如隔山,如果是行外的人往往答不上来。往简单了说,一个词就可以概括,就是效果。算法工程师的目标就是算法的效果。只是不同的问题场景,不同的模型,效果背后的含义却相差很大。
比如做机器翻译的NLP team,看重的效果是翻译的精准度,做搜索、推荐的team,看重的是用户的点击率,而做图片识别的,看重的是模型的准确率……
而在公司之中,这些所有的效果最终都会需要转换成业务效果。所谓业务效果简单理解就是公司的业绩,也就是说这些模型、这些算法究竟对公司的业绩提升提供了多大的帮助。
以推荐算法举例,我们的目的是给用户推荐高质量的商品,赢得用户的点击以及购买,使得用户在公司的产品上投入更多的时间以及金钱。大家刷过抖音就知道,之所以抖音能让人着迷刷得停不下来,背后依靠的就是这样强大的推荐算法,能够一直吸引你的注意力。
如果没有这样的算法在背后推动,可能用户刷到几个没意思的视频就不刷了。



据说,这是抖音的推荐算法逻辑

既然所有的算法效果最终都要落到业务上,那么这里面自然也难免有亲疏远近。离业务越近,对公司的业绩影响也就越大,也就越重要,责任也越大。对于萌新来说,可以从这个角度入手,梳理自己的岗位以及团队在公司中的地位。
举个简单的例子:
假如说某天某宝的推荐算法挂了,假设每个用户平均只少点击一个商品,那么乘上一个巨大的基数给公司带来的损失也是一个天文数字。
同样,加入你们团队是负责给推荐团队提供数据支持的,某一天你们团队挂了。也许推荐算法的模型也会有点影响,但是真的落实到指标上,可能也就是小数点之后几位数的一个小波动而已。
虽然说这两个岗位可能同样是算法工程师,但是彼此对于公司业务的影响以及重要程度显然是不可同日而语的。
算法工程师的工作方法

聊完了目标,再来说说方法。
我们已经知道了我们的目标是优化模型推动业务增长,那么该使用什么样的方法来推动呢?说白了了也简单,就是使用模型训练的方式。
在人工智能的时代到来之前,还有一个词炒的火热,也就是大数据。大数据是一切的基础,正是大量的数据推动了算法模型的发展。因为所有的模型都不是天上掉下来的,也不是开发人员一点点写出来的,而是通过大量数据训练出来的,这也是机器学习和深度学习的本质,让模型自己从数据当中学到精髓,从而带来产出和效果。
现在我们知道了想要好的模型,需要从大量的数据训练。剩下的问题就是这些数据从哪里来?显然不会从天上掉下来,都是工程师一点点开发得到的。这也正是算法工程师工作的核心,从大量数据当中提取数据。
要知道原始的数据是不能直接使用的,这点就像是做菜,直接买来的食材总是要经过处理的,是不能直接丢下锅的。算法也一样,需要对数据进行加工和处理。
处理过程主要包括三个步骤:清洗、采样和加工。


先来说说清洗,这点和洗菜择菜一样,要把数据当中不符合要求和规范的脏数据清理掉。比如说用户没登陆的数据,部分字段缺失的数据,以及其他质量不符合要求的数据。这个步骤相对简单,由于判断条件基本固定,所以开发完成了之后很少发生变化,真正的一劳永逸。
然后是采样,虽然我们现在已经是大数据时代了,但是训练模型的计算力依然是有限的。尤其是一些大公司,动辄数亿、数十亿的数据,显然需要消耗的资源也是巨量的。所以显然,对数据采样可以减轻计算资源的压力。
另外一点也是模型效果的需要,在一些场景当中,比如电商购物场景。可能上百个浏览才能有一个成交,带来的结果就是样本比例悬殊。一百个甚至几百个样本当中才有一个正样本,那么带来的结果就是模型的效果被负样本带偏,影响模型的能力。
最后是加工,这一点也很好理解。当下,模型只能识别int和float两种类型的数据,但是有些特征可能是字符串,比如说商品的类目、标签这些。所以我们需要人工将这些字符串类型的特征进行转化,想办法用int或者是float的数据来代替它们。
还有就是我们自定义的一些计算逻辑,比如判断商品在不在用户的购物车里,比如商品的价格是否在用户能接受的价格区间里,商品上是否有用户喜欢的标签等等。这些逻辑都是我们为了训练模型而额外附加的,显然在数据记录的时候是没有这些数据的。那么这些对数据的计算和处理逻辑也需要一个单独的步骤进行处理。
最后经过这一系列的处理之后,每一条服务器记录的数据都会被转化成模型能够识别的特征,这样才可以真正做训练。
简单来说,服务器当中记录的用户数据就像是菜地里种的各类蔬菜,我们要想做出一盘可口的菜肴,在入锅之前还需要一系列的处理和加工。算法工程师的大部分工作也都在这个部分。
工作重头戏——分析迭代

到上面为止,基本上一整条算法训练的链路已经很清楚了,不过这还不是工作的全部。因为剩下的部分同样非常重要。
在模型上线之后,我们还需要做一件非常关键的事情,即进行一定的数据分析,找出以后继续改进和优化的方向。
这里的数据分析主要有两个部分,一个部分是对模型的效果进行分析。判断当前的模型和旧模型相比是否获得了提升,以及提升的效果是否明显。其次是对数据进行深度的分析,寻找一些还没有挖掘出来的特征。
如果只是单说分析不免显得有些空洞,但实际上可以立足进行分析的点很多。比如说,模型对于点击率的提升很明显,但是对于成交没什么特别明显的帮助。这个现象是可以从数据上找到解释和依据的,比如说订单的成交往往要落后点击,所以一种可能是对于订单的提升还没有显露出来,需要时间的沉淀。
再比如说产生点击和产生订单的人群是不同的,可能点击的当中有大量没有登录的用户,这部分用户缺少用户偏好相关的特征,而产生订单一定需要登录,这部分用户是有偏好和行为特征的。也就是说这两部分用户的数据集以及特征分布是有区别的,那么很有可能就因为这个对结果产生了影响。
像是这样的case以及思考分析的角度还有很多,并且由于数据分析的工作量往往比较大,需要进行大量的运算以及脚本的编写,所以很大程度上来说,这块才是算法工程师日常工作的大头。
所以很多萌新刚入行的时候往往会觉得大跌眼镜,说好的各种前沿模型呢,怎么一直在做数据。
其实算法模型本身就不是能独立于数据而存在的,有一句话说得好,数据决定了模型效果的上限,使用的模型的好坏只不过是逼近这个上限罢了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-9-4 12:53 | 显示全部楼层
在互联网行业从事算法相关工作有一段时间了,经常被问到作为一名女算法工程师是一种怎样的体验,最近也在知乎上看到了类似的问题,于是乎我决定写一下作为程序名媛的日常。



校园里的日常
在学校时,除了每天宅在实验室,其实周末的我是这样的!
但是毕业时,每天重复着读论文—>写论文—>改论文—>改论文—>改论文... (大概也就是"最终版.doc"慢慢变成“最终最终绝不修改版v99.doc”)而已,然后我就变成了这样!


工作时的日常

从学校毕业之后,工作的日常节奏就变得紧凑了许多。先说下日常节奏吧,每天大概9点半到公司,到公司的第一件事情,就是查看一遍自己的线上作业是否正常,如果有作业挂掉、或者数据不正确的话,那...debug的一天开始了....运气好的重启一下,一上午就过去了....运气不好的话,一天就过去了...


ok,如果没有异常,那就查看一下邮件,接着写写今天的机会,有时也读读论文、开开早会。
中午午休的时候,我经常会找个安静的地方,发发呆...然后下午两点就开始一天的coding....


晚上的话,根据自己的工作排期进度,日常会在9点左右下班吧。最近看到了PDD姑娘的事情......让我开始了懂得了惜命....跑题了 跑题了....
算法的平时工作是什么?

算法的平时工作是什么?其实很多还没踏入这个行业,或者想要踏入这个行业的小白是挺好奇算法工程师每天都在做什么的。那就拿我为例吧,我的一名推荐算法方向的程序媛,平时大部分时间都花在了,业务理解、开会沟通、数据清洗、特征工程、构建模型、Badcase分析等。
    首先,个人习惯是做事情之前要理解自己在做一件什么事情,很多业务背景上的限制,会决定后续整个算法建模的方向或者优化方向,所以做好提前的沟通是必不可少的!


其次,整体思路和架构有了之后,数据上的麻烦事情就来了,和数据竞赛中的数据集不一样,生产环境的数据可谓是“脏乱差”,数据埋点的不规范、采集系统的bug、业务系统的问题、数据作业的延迟等等都会给训练样本的生产带来极大数据清洗难度。让我从一个淑女变得经常想说 F 开头的那个word....


然后,模型构造完成之后,大部分时间是在debug问题,和线上的badcase进行分析,尝试去理解模型是在什么情况下产生的badcase,又该怎么去修复它。


    最后,又回到了每天检查和监控稳定的轮回里....
算法平时都在用什么?

下面这张图是 炼丹笔记 社群里一位群友发的图,我看了一下,和我平时使用的的差不多,在这里分享给大家。



SQL:离线数据、实时数据的提数工具,没这个基本什么都做不了...
Spark:一些离线数据的复杂逻辑处理,需要他来处理。
TensorFlow:不用介绍来吧,codeing的主要框架,当然还有Pytorch。
Docker:线上模型部署,模型服务的载体,dockerfile了解一下呀~
Pandas:接口和函数特别多,遇到问题百度一下,比自己重写好得多的~
....
程序媛的周末

工作后,变得和学生时代不同了,不会想着去逛街了!
周末的早上偶尔偷个懒,早上10点起床,然后开始了自己“深圳女孩”的一天!


在人工智能算法这个领域,技术迭代是非常快的,你在学校学到的,其实是学习的能力,而不是某行代码怎么写,所以不断的跟随前沿和掌握新的技术,是很重要的。不要老想着摸鱼,虽然摸鱼一时爽,一直摸鱼一直爽...我见过好多算法工程师的混子,他们的一天用两个字就可以概况了....


一个女算法程序媛的日常


时晴@炼丹笔记

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-9-4 12:59 | 显示全部楼层
我现在只是一个实习算法工程师,按理说没资格回答,不过还是强答一下。
实习半年了,也转正了。实习和正式入职还是有很大差别的,正式入职业务压力更大,而实习可以有更多的时间做你喜欢做的事,做偏研究的事,做可能没啥收益的事。
我每天10点多到公司。先检查一下跑的代码结果咋样了,有没有出bug,没事的话就扔着不管了。如果有bug,或者刚开始搞,那就得处理数据、写写脚本、改改模型,最后给它整跑起来。
午饭12点,吃完休息到14点,我一般不睡觉,刷刷b站或者油管。
下午就看看论文,想想idea,如果有想法就写写代码,整理文档,发发博客。15点还有个下午茶,可以摸会儿鱼。
19点晚饭,吃完随意了,看会儿论文21点不到走了,或者19点半就回去了,边打游戏边看看论文,双线操作。
因为没有业务压力,所以还是比较“闲”的,每天基本上都是在看论文、跑代码,不需要提升业务上的性能之类的。
珍惜毕业前的实习时光,以后压力就大了。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 16:51 , Processed in 0.217447 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表