找回密码
 立即注册
查看: 1237|回复: 20

算法工程师大致是做什么的?

[复制链接]
发表于 2021-7-4 09:31 | 显示全部楼层 |阅读模式
算法工程师大致是做什么的?
发表于 2021-7-4 09:39 | 显示全部楼层
日常生活

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

就做机器学习的经验来看,通常来说在做业务之前,一定要清楚的弄明白项目的业务需求是什么,弄清楚这个问题是什么比一开始就写代码重要得多。意思就是在回答问题之前,一定要把问题的内容弄清楚。有的时候,虽然看上去是一个很大的需求,但是实际操作起来的时候使用一些简单的办法也能够达到项目指标。有的时候,虽然看上去很简单,但是实际操作起来并不是一件容易的事情。从之前做理论数学的经验来看,通常数学里面的一些问题是是非题,不能够添加条件的。在PDE 等方程领域,定理的条件越多,表示定理越不值钱。不过在工作中,这些条条框框会相对减少很多,只要能够达成项目目标,无论是添加样本,添加特征,添加服务器数量其实都是可以的,并且要把机器学习模型和业务指标有机结合才能够达到最终的项目指标。
一般搞数学科研的时候都是单打独斗,通常来说都是自己干自己的事情,别人也没办法帮自己。但是在工作中是不一样的,工作中除了干好自己的事情之外,周边的很多资源其实是可以在一个合理的范围内去争取的。无论是人员的数量,还是人员的种类,只要最终能够达成项目目标即可。无论是算法人员,还是开发人员,产品经理,最终都是要为一个项目的结果负责的。之前听过一句经典的话“失败的项目里没有成功的个人”,因此,无论怎么做,最终都要保证项目尽量成功。
数据清洗和特征工程

而在机器学习算法工程师的日常生活中,除了上面的小段子之外,其实最重要的是样本层和特征层的处理工作。在学术界,都是使用开源的数据,别人都已经完全标记好了,学术圈的人通常来说只需要在这些数据的基础上提出更好的模型,更创新的算法即可。但是在工业界就完全不一样了,不要说有人帮你标记数据了,有的时候连数据在哪里都不知道,数据的质量如何也不知道,因此更多的时候是进行数据的处理和清洗工作。之前做一个项目的时候,准确率和召回率始终上不去,但是等把样本里面的脏数据清理掉之后,模型的效果瞬间提升了一个档次。在脏数据面前,再好的模型都是没有用的,在训练模型之前,一定要先看一下数据层的问题。
除了数据的问题,通常来说在一些场景下,样本的数量并没有那么大,因此深度学习等方案不一定特别适合。在这种情况下,一般就会使用传统的机器学习方法,并且会使用一些基于业务的特征工程。这种时候就需要机器学习从业者对业务有一个精准的理解,只要业务理解得好,有的时候写一些简单的规则就可以解决问题。特征工程也是机器学习里面的一个重要问题。
持续学习

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

如果是在工业界的话,编程能力是非常重要的。因为从事算法的人通常来说会有一些算法上的优化,工程上的改进,数据分析之类的工作。在这种情况下,首先需要有一定的业务直觉。而业务的经验积累需要通过各种各样的基础数据提取,在海量的数据分析工作中逐渐积累的。在这种情况下,提取数据的工具就是必须要掌握的,例如 SQL 等。其次,分析数据的工作也是必须要具备的,无论是使用 SQL 来进行分析,还是使用 Python 来做数据分析,都是自行编程解决的。再次,在从事机器学习方向的时候,不可避免的就会进行算法的效果对比。而在这种情况下,算法的效果对比是需要机器学习从业者通过写程序来实现的。最后,工业界的算法通常来说都强调上线,如果能够自行把离线,上线,效果验证,ABTest都做完,其实是最好的状况。在这种情况下,通常 Python 就不太够了,需要使用 C++ 或者 Java 等其他编程语言。因此,熟练使用多种编程语言也是一个算法工程师的能力。
2019年3月9日
发表于 2021-7-4 09:40 | 显示全部楼层
2019年底,第三次编辑这个答案。
各个行业都有算法部分,统计有统计的算法,控制有控制的算法,图像处理有图像处理的算法。在很多传统行业,算法不是一个独立的岗位,而是由研发工程师负责。
互联网和软件行业把算法分离成一个独立的岗位大体有两个原因。第一,低级的软件工程师不懂算法,或者更干脆一点说不懂数学,所有涉及到模型和计算公式的工作都必须要找专业人员来搞定。第二,从生产效率考虑,初级算法工程师很多没有很好的软件工程背景,简单点说就是不会写代码只会写matlab,这种工程师的工作交付没有办法直接投入生产,所以需要将他们的工作和生产环节隔离开。
以下是我所了解的各种算法方向
    面向业务流程的算法设计,例如数据结构设计,排序,搜索,随机数生成,分布式计算优化,是普通的计算机专业常识,一般中高级程序员都需要有能力负责这种算法的开发设计。大数据和统计分析算法,主要用于各种行业的量化模型的构建,比如推荐系统,广告竞价,量化交易系统,财务金融分析决策。这一部分一般并不是程序员做的,而是其他与数学紧密的一些专业人员。这一部分也有很多工具包可以直接用,在很多行业里其实并不会单独抽调团队来做研发。推荐算法和协通过滤算法,就是各种推送系统的设计机制,这个无他,熟练工种+各种业务需求满足。NLP,自然语言分析,包括信息检索技术,比如倒排索引,概率检索等。 另外,在面向文本内容分析中,还会使用到很多的聚类,embedding等机器学习算法。依然多数应用于广告,推送系统,搜索引擎等产品中应用。当然,依照惯例,大部分的公司是没有专门的团队做nlp的,一线公司除外,因为可以使用的第三方库非常丰富,所以普通算法工程师会退化到调参和api调用等低级工种上。信语音信号处理,例如回路噪声抑制,vad,语音合成,acoustic signal processing是一个特定领域,需要有很深入的理论认知才能设计出好的处理算法,例如做语音识别的前端信号采集,人工语音等。如果是小公司做业务相关的东西,这块也不建议做自我研发,成本太高。图像处理,尤其是基于OpenCV的图像处理算法,一般产品里有做美颜,滤镜什么的特别喜欢招这块的小朋友,近一两年有被做深度学习的取代的趋势。最近google出了arcore,所以让不少小公司也能出一些效果很好的换头类应用。深度学习,当然,不要以为这个领域大部分公司能做到什么程度。首先,国内的大部分公司,号称做ai的,集中在做人脸识别,这块做的太成熟了,基本上现在上手也就是搭框架,什么rcnn,yolo,vgg,alexa,这些都需要去研发么,不,你能把模型跑起来就可以了。说白了会用工具,知道基本调参方法,就能去做了。其次,正儿八经用到DNN,RNN,CNN的地方,一般都没什么鸟数据可用,所以低端的岗位最后会变成收集数据和标记数据的马仔。SLAM,集中在机器人定位导航上,比如无人车,扫地机器人,这个方向已经很专了,和上面的那些大路货不是一个层面的,要有好的团队,好的导师才能带你入门,国内这个方向的团队实验室来来回回就那么几个。计算机图形学,这也算是一个大类,主要涉及到图形渲染算法,光追算法,三维图像重构等图像绘制方面的内容。这个方向,不光是做3d引擎和游戏开发方面,对于很多行业需要与cad相关的,都会涉及到这一个领域的模型和优化算法设计。VR,AR领域,涉及到的包括视频跟踪,SLAM,raytracing,几何投影等等,实际上是一个综合的领域,目前主要是做计算机视觉的转行做这块。传统的算法范畴还包括:所有的业务逻辑流程设计,随机数生成,校验,加密解密,压缩算法,但是这种类型的算法不需要专门一个算法工程师来做,都是程序员搞定的。


    医学影像处理,三维图像重构,用在B超,CT成像上,这个是医疗方向的。通信基带信号处理,网络优化算法,这一块其实很式微了,毕竟高大上的算法小公司没成本去实施。音频滤波,用在HiFi产品,比如车载音响,手机厂商,圈子其实蛮小的。控制算法,自适应滤波算法,用在机械领域上,比如机械臂行程控制,稳定性。有限元算法,这块从雷达,机械,电磁学,到服装设计,都有很有价值的应用。统计建模,stochastic calculus,点估计,主要是量化金融行业,某些行业的信号检测也会应用到这块的技术信号处理,比如插值,频谱分析,盲信号分离,压缩感知,物联网大部分应用会涉及这一块。
发表于 2021-7-4 09:49 | 显示全部楼层
整理语料,下载开源算法工具集,跑出结果,优化参数,继续跑出结果,继续优化参数,汇报工作指出难度,继续跑出结果,继续优化参数,汇报工作指出难度,准备离职,准备简历,面试时汇报算法成绩,准备入职,正式入职,整理语料,下载开源算法工具集,跑出结果,优化参数,继续跑出结果,继续优化参数,准备买房,受推荐面试,夸大算法成绩,正式入职,招募团队,指导他准备语料,指导团队下载开源工具集,指导团队跑出结果,指导团队优化参数以及优化结果,汇报工作夸大成绩,继续指导团队优化参数和结果
发表于 2021-7-4 09:49 | 显示全部楼层
前面的回答已经有很多大神解释了是否要学好数学,那么小宅就来和大家分享菊厂一位无线算法工程师的故事吧,希望对大家了解算法工程师这个职业有所启发。
有人说,“算法是无线通信的灵魂”,这话一点不假。回头看无线算法20年来的征途,我们的“理想”并不是个虚无缥缈的东西,它渗透到了无线的每个角落,决定了芯片的每一步发展,影响了算法人的每一次抉择……
“三十岁之前,路总是很长,我们总是展望。三十而立,就再也不敢展望了,低头赶路吧。” 这是王小波在《三十而立》中说的。但是,我在三十岁时听到的话,跟它恰恰是相反的。
2005年,三十岁的我,刚入职华为,进入3G算法项目组。同事告诉我,别顾着埋头赶路,我们做无线算法的,是有理想的,要引领无线通信的变革。
算法是什么?生活中的算法无处不在,当你按下电梯按钮的时候,电梯运行的算法帮你最优化调度资源,缩短等待时间;当你驾车穿行于早晚高峰的时候,交通运行的算法根据变化的车流量实时调控红绿灯,帮助车辆行人更有效地通行……
无线算法也是如此,它通过一系列复杂的数学公式和指令解决无线通信中遇到的各种棘手问题,让用户可以随时随地享受高质量的语音、视频、上网等体验。
据说算法刚起步的那几年,团队有一个预研部,很多人曾开玩笑说,他们做的不是预研,是预言,因为第一款商用芯片里的算法必将从这里诞生,将影响数以万计的人。
2002年的一天,能担当大任的算法似乎出现了。外场测试传来消息:一款“干扰对消算法”(IC)的样机通过了测试,提升了50%的系统容量!理论上,如果实现了IC,就能通过消除噪声达到让运营商在同一频段上多服务一倍用户的效果,对于用户来说,通话体验也将大大得到提升。
但是,这款样机带来的激动心情根本没持续多久——性能提升了一倍,但复杂度却提升了三倍,这种划不来的做法,直接否定了它商用的可能。IC特性的复杂,让它成为通信领域的人人都想吃,但人人不敢碰的香饽饽。算法组只能忍痛放弃这款样机,转身研究其他的特性。
那个冬天寒冷异常,到2003年底,团队成员已经从近30人,减少至不到10人。还在坚持的有从1999年就开始进行无线算法研发的元老级人物,李化加。
2004年,团队终于向公司争取了部门公开招聘的机会,收到了至少500封简历。“要做最好的算法,就得最好的人才。”李化加亲自筛选和面试,凭着一股宁缺毋滥的劲儿,抵住了人力紧缺的压力,最终只留下了最想要的5个人。
从这时候开始,整个算法组开始形成了一种心照不宣的学究气质。李化加跟汪少波等人,像学校实验室师兄师姐们一样,投入大把时间对新员工们进行点对点的技术细节讨论,包括如何研究、如何开展算法设计、如何进行文档写作,每篇分析文档都是千锤百炼后才能同意归档,好多习惯都在那时候被奠定下来。
2005年的我初来乍到,听到前辈们的故事,虽未经历始末,但硝烟四起之感丛生。这年年底,在一款芯片的算法设计即将被冻结的紧要关头,李化加匆匆找到汪少波,说他在业界技术调研的时候,想到了一个以低复杂度实现IC特性的灵感。
那时候,算法的特性都是要做到硬件里去的,也就是说,算法一旦设计完成,就无法再改动——不仅这一版的芯片要依照这个算法去生产,下一版的算法还要跟这一版的算法能配合运作。算法的路只能向前,不能回头。
可是IC特性能够减少噪声扩大容量,实实在在提升每个用户的体验,所以,即使算法的每一步都承担巨大风险,即使这款芯片已经到了算法交付的最后环节,他们还是当机立断,决定把IC这个特性加进去!
“不做IC,这款芯片顶多是性能上的优势,而性能优势是很容易被超越的。做IC,我们就实现了友商还实现不了的特性,这是算法的竞争力。”汪少波的这句话,在三年后的沃达丰比拼上,得到了印证。在那场业界关注的技术比拼上,这款芯片的迭代版本,为华为拿到了第一名。CCPIC(控制信道并行干扰对消)这个名称,由李化加和汪少波开创,到后来成为了华为的专用术语。
“杀敌一千,自损一千二”的理论漩涡
每个人的一生,总会有自己的“关键时刻”。对我而言,那就是2007年。这一年,中国移动决定在珠峰海拔5200米、6500米处采用华为设备建设移动通信基站;这一年,我被任命为第一版商用IC算法的设计人。
带着初生牛犊不怕虎的冲劲,我们设计出了新的IC版本。然而,在推导的过程中却出现了一个奇怪的现象,就是在消除干扰信号的过程中,也损伤了信息本身有用的信号。就像消灭敌人的时候,自己人也受了伤。如果消灭的敌人大大超过自己人,问题不大。可万一出现“杀敌一千,自损一千二”的情况呢?
这正是算法区别于其他专业的地方,即使是一个小小的理论假设,我们也无法视而不见,或者暂时搁置,因为谁也说不准,现在的理论假设,是否会成为最后压垮整个算法设计的致命稻草。
可是,业界友商没有实现IC的先例,学界论文也没有这个问题的相关描述——我很清楚,可能要做第一个吃螃蟹的人了。
攻关组马上成立,除了“苦思冥想,连续作战”,没有捷径。探讨、推导、测试、验证,循环往复。在接下来两个月时间里,我们从什么是信号、什么是噪声这些最基本的概念出发,一点点抠细节,探寻问题的本质。那些攻关的晚上,我经常做一个梦,在梦里我自己变成了信号,和干扰信号大战三百回合。每每醒来,浑身是汗。
钻得深了,我才得以留意到以前没有注意过的运算细节——我们的算法里引入了一个特殊项,既包括信号,也包含噪声,这就是为什么在消除噪声的同时,信号也有损伤的原因。找到关键突破点后,我们经过准确的运算分析,得出了一个意外结论——“杀敌一千,自损一千二”只是理论推测,真实场景根本不会发生。
揭开这个苦苦追寻的答案,压在我们胸口几个月的大石终于卸了下来。理论漩涡的平息,也让我们吃了一颗定心丸。
一颗“螺丝钉”扭转乾坤
理论问题得到了解决,算法设计也顺利进入收尾阶段。然而,测试结果却犹如晴天霹雳:性能提升的效果极其不稳定,对用户的影响就是一会儿信号好,一会儿信号差。这种情况真是称得上“血案”级别,别说做业界最好算法的雄心,连商用的信心都快没有了。
而且,目前这个阶段不可能对芯片本身进行任何改动,唯一能接受的只能是修改可编程部分。就好比临近交房,设计师对房子图纸不满意,想重新改造,打破一面墙,再造一个门,可是急于入住的房主能接受的,只是挪动一个螺丝钉。
下班时,只有路灯在等着我。它们有的昏暗无光,有的明亮异常,有时把我的影子拉得很伟岸,有时甚至让我找不到自己的影子。做算法,孤独的时刻有很多,但从来没有一次像那天一样强烈。
那段时间,定位组、开发组、测试组、攻关组的同事成天混在一起,每天早出晚归。当时每排除一个疑点,项目经理都激动地请大家吃饭,后来有人都忍不住说,“还是搞定了一起请吧,不然要把你吃的倾家荡产了……”
四个月的时间,上千次的测试仿真,日日夜夜的归纳推演,我们终于找到揪住了“嫌犯”:定点过程中的不当截位。通常的截位应该采用四舍五入方式,而我们为了实现方便,采用了直接丢弃的方式,相当于“九舍无入”。通常“九舍无入”都没有大问题,但当多个芯片合并时,舍入误差被急速放大了,正是这个“小”误差,酿成了这次的大错误。
当时,入职仅两年的朱有团灵机一动,提出了一个“负数加1”的方案——只对数值的最后一个比特进行更改,就达到了“四舍五入”的效果,用非常小的代价解决了这个非常棘手的问题。本来要砸墙的房子,真的靠旋转了一颗螺丝钉就扭转了乾坤!朱博也由此一战成名,还荣获了当年公司级的金牌个人。
后来我们才知道,原来友商也一直在寻求IC的商用化模式,只是没有做出有效的算法,于是走了另外一条降低干扰的路径。在沃达丰的现场比拼中,技术分值华为第一,不得不说,IC算法确实是助力登上宝座的最大利器。IC商用化的传奇就此开启,华为基站的接收能力再未遇过来自友商的实质挑战。
送上门的真经,我们没有要

2009年,我们急切地把视线拓展出去,以期寻找新的突破。巧的是,友商Q基于产业发展的考虑,主动与华为无线达成战略合作意向,向华为分享他们掌握的IC技术。
拥有丰富的IC运营经验,保持CDMA系统最重要的基本专利,连世界公认的算法巨匠都曾供职于此,友商Q理所应当是我们膜拜的“佛祖”。同事们都戏称,这简直是一次千载难逢的“西天送经”。
果然,它的算法设计能力带给我们的震撼是巨大的。其中最令人称奇的是,他们可以通过对消历史信息来提升性能。这种设计,不仅是我们从来没有过的算法思维,也更达到了我们从未达到过的卓越性能。不用苦苦搜寻,无需反复求证,我们只要在这个基础上稍做优化,就会得到日思夜想的算法“真经”!我兴奋异常,其他小伙伴们也难掩激动之情。
然而,伴随着交流的深入,我们却发现了这种算法的“阿喀琉斯之踵”:为了拥有足够多的历史信息,这种算法要将每个用户的重传率设得比较大。容量固然可以提升,但时延也会变长,给用户的感知就是增加了等待时间。
一边是卓越的性能增益,这是算法人梦寐以求的目标;一边是提升用户的体验,这是算法最朴素也最深刻的奥义。每个人的心中好像出现了一座天平,到底要往哪边倾? 大家都犹豫了。
“不能为了一张好看的成绩单,让用户的体验受损。”讨论会上,黄心晔的一句话掷地有声。上上下下一致同意,我们要舍弃跟进友商的算法设计。“佛祖”送上门的真经,被我们拒绝了。
不过,他们的思维方法却极大地激发了我们的灵感。在信息的传送过程中,既有传送成功的信息,也有传送失败的信息,友商没有对后者进行快速对消,我们是不是可以补上这个空缺?
为确保方案的有效性,我们在仿真平台上全方位对比了我们和友商Q的方案,结果表明,设定短时延下,我们的算法优于友商,设定长时延下,与友商基本相当。为了万无一失,我们累计梳理了50多个可能的影响因素,并在样机项目中逐一排除其影响。最终这个特性顺利交付,实验室测试的结果不负众望,40%以上的增益实实在在地呈现在面前。
自掘三尺地,新一轮自虐行动
4G商用加速发展,3G新版芯片如何推出新的算法特性?不破不立,我们准备先自掘三尺地,从版本的现有问题中,尝试挖掘金矿。
有人开着车沿着测试外场不停转圈测业务数据,有人缩在实验室里一遍遍分析性能曲线,还有人抽丝剥茧梳理方案和应用场景,终于找到了IC算法新的增长点。原版本的设计有一个“毫不利己,专门利人”的特点——控制信道给其他信道提供增益,自己却不能享受增益,这其实阻碍了整体性能的提升。既然如此,我们能不能把它变成“利人又利己”呢?
问题找到了,但给出解决方案更非易事。李**、杨**等团队的“最强大脑”们,立马成立几个小分队,多方向地尝试思考。有人提出改变现有的并行处理方式,而让多个用户串在一起,前一个用户对消掉的干扰,可以提升下一个用户的性能,间接实现“利己”。理论验证这个办法确实有效,但操作起来工作量太大,不适合全面施展。
这个角度的思考倒打开了我们的思路,我们决定尝试在现有方案上增加一次并行处理,迂回地解决“利人又利已”的难题。当然,这绝非是描述的这么简单,大量的配套方案和针对性改进才是真正的“幕后英雄”。
还能不能再往前走一步?当目前方案已经获得验证之后,我们展开了新一轮的“自虐行动”。受友商Q思路的启发,我们有了新的想法:如果能在信息还未出发之前,预测它将会带上哪些“行李”,对消掉不必要的东西,就能给旅途减负。把这种思路和并行方案嫁接起来,新的方案呼之欲出了!
整整两年内,从毫无头绪到渐露曙光,从单点试探到全面开花,我们发挥想象,给出了绚烂的算法方案。干扰对消算法最终浴火重生,在本以为到达巅峰的情况下,又提升了15%的系统容量。
攀登不止,初心依旧
从初创小团队的摸索,到与瑞研专家的合作,再到现在与法国、俄罗斯、德国、美国等至少7个国家的联动……历经近20年的光阴,算法团队经历了从纯粹国产、中外协作、到全球深度融合的成熟之路。全球智慧、理论大家和实践能手的无敌组合,让我们对5G算法的研发充满了信心。
我一直很喜欢孔子说的“知不可为而为之”这句话。对于算法人而言,这句话的意义便是,做事不问可不可能,但问应不应该。别人能做到,我们应该也能做到。别人做不到的,我们应该抢先做到。我们已经做到的,还应该要做到更好。
一首小诗和所有的算法人共勉:
我不是思想家,我引领无线通信变革。
我不是指挥家,软硬件系统因我而协奏。
我不是发动机,我驱动无线核心竞争力。
我是数学公式,更是理论与工程的完美统一。
你们看不到我,但我在你身边。
我是算法,无线通信的灵魂。
“我们做无线算法的,是有理想的”,三十岁那年听到的话,似乎又在耳畔响起。
《华为人》版权所有,请勿转载

本帖子中包含更多资源

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

×
发表于 2021-7-4 09:59 | 显示全部楼层
算法工程师的日常就是做算法的优化。公司主要还是以产出论英雄,产出与绩效直接挂钩,绩效跟你的晋升和钱途紧密相关。一般每个人都会背负一个月度指标(或者双月/季度指标),比如我这个双月给定的目标是通过优化推荐算法使用户阅读时长相对提升3%,具体到用什么方法来提升,会有一个大的方向,通常是领导分配的或者上个季度没做完延续下来的,因为通常目标会定得比较激进,完不成目标也是很常见的事情。当然在做的过程当中你也可以随时调整,因为一开始定的路线可能做着做着发现走不通了,如果你有新的想法,一般可以跟领导商量看看是否值得做。因为有的任务产出高,有的产出低,所以如何将各个任务拆解合理分配到个人,其实也挺考验领导的。
目标和具体任务定下来了,那么每天的工作就是围绕怎么去实现这个目标进行的。比如我的一个任务是实现一个最近某论文上提出的复杂模型,那么我可能需要先去调研,论文也好网上其它资源也好,花点时间把原理先搞懂,然后开始结合公司现有的训练框架去实现这个模型,开发的时间依需要改动的代码量而定,通常不会太大,除非需要改动既有框架,那就是一个大工程了。
开发测试完了,开始训练模型,训练过程当中观察训练指标是否符合预期,如果不符合预期,那就需要回过头来排查问题出在哪里。模型训练好了,开始做离线测试,看看各个指标相对于baseline模型(指线上使用的模型)是否符合预期,很有可能不符合预期,一次性就能取得预期效果的基本没有,除非任务真的比较简单成熟,但是一般容易做的基本都已经被做得差不多了,剩下的都是难啃的骨头,二是论文和实际应用往往有差距,很多细节人家可能没有说,而决定效果的往往是这些细节,或者人家根本就是在吹水,这个时候你需要学会去判别,同时要学会适应和调整自己的心理预期。
所以在优化一个策略的时候你经常会遇到各种问题,需要不断地去排查问题在哪里,思考怎么去真正解决问题,很有可能需要你推倒重来。你需要非常明确你的目标,遇到问题能够灵活变通,解决问题才是根本,所有通向目标的方法都是手段。
现在你模型训练好了,离线测试发现也符合预期,可以从线上切点流量做个分桶测试,这个时候你需要了解怎么部署模型,怎么上线,怎么开实验,这个流程可能也会比较长,但是你熟悉之后一般也不是什么问题。
实验开了,线上成功率、预估值等监控指标看起来没什么问题,那每天早上到公司干的第一件事情可能就是点开自己的实验,看一下业务指标,时长和PV怎么样,留存怎么样,是否达到了预期。很抱歉的告诉你,经常你的实验会不符合预期,所以这个时候你又得回过头来排查问题,离线验证是否严谨、上线流程是否有纰漏、在线离线是否一致,等你把能想到的问题都排查完了,实验还是不符合预期的话,那就要寻求领导的帮助了,或者只能放弃这个实验。
如果实验符合预期,各业务指标都满足了上线要求,那么此时就可以将你的策略推全了。这个时候你需要更加严谨,因为此时你的操作会影响到所有的用户。你需要拉同事配合你上线,加机器也好,加监控也好,上线的过程中盯紧各种监控指标,有什么异常的话赶紧回滚或者观察一段时间后继续。
你的策略推全了,很好,但很可能你取得的提升很有限,离目标的完成甚至还差得很远。所以你需要继续优化你的策略,然后重复上面的流程,这就是基层程序员的日常了。
详细可以看看下面这篇文章,算法工程师的就业方向、日常、职业规划、技能都说得 比较详细:
billlee:算法工程师的就业方向、日常、技能及职业规划
发表于 2021-7-4 10:07 | 显示全部楼层
我觉得大家回答的都好长好专业,我回答一个外行也能看懂的答案吧
当你打开饿了么这个APP的时候,首页会给你一堆餐厅,这些餐厅为什么是你看到的样子呢。
这里有两个大的东西决定,一个是搜索工程然后就是算法工程。
搜索工程决定了,例如根据你所在位置,把一些合规的餐厅,销量高的餐厅,开门的餐厅召回来,例如它召回了 A、B、C、D、E、F、G
算法工程的眼里,他们会有一个优化的目标,例如要让你看到餐厅后,更容易去下单,此时优化的目标是转化率。算法的同学就会把你所有订单作为正样本,点过没下单的作为负样本;再把餐厅、你个人情况等各个维度的数据作为特征;训练一个模型出来;然后用这个模型给这些餐厅打分,打分高的,你越容易去下单,让后就把他们排前面。
当然实际的规则比这个复杂,但是基本上就是这样的。
不同的算法同学,训练模型、优化的东西不一样;对于广告的同学,他们优化的是平台收入,物流的同学他们可能是根据历史订单配送时间预估配送时间等等。直觉上,凡是那种你有一大堆历史数据,然后可以根据这些数据发现一些潜在规律的事情都可以用算法工程来解决。
发表于 2021-7-4 10:16 | 显示全部楼层
有很多小伙伴可能都对未来的工作内容有所好奇,不知道所谓的算法工程师到底日常在做什么,而我以后能不能胜任?
继续看下来,或许能解开你的疑惑~>_<
下面的内容将通过对比比较接近算法工程师日常工作内容的kaggle比赛和算法工程师真正的日常任务之间,存在的不同侧重点~
你有没有参加过Kaggle比赛?如果你正在学习,或者已经学过机器学习,那么很可能在某些时候你会参加一次。这绝对是将构建模型的技能应用于实践中的好方法,我在学习时花了很多时间在Kaggle比赛上。
如果您以前参加过机器学习竞赛,那么您的工作流程(步骤)可能看起来像我的一样:
    下载一些数据(可能是一个或几个CSV文件)。也许做一点数据清理,或者数据集可能已经足够干净了。执行一些预处理,例如将分类数据转换为数字数据。通过各种合适的模型运行数据,直到找到最佳模型。花费很长时间在超参数调整,特征工程和模型选择上,因为一个非常小的改进可能意味着你在排行榜上升几个位置。结束


但是,如果您正在为实际业务应用程序开发机器学习模型,则该过程将看起来完全不同。我第一次在业务场景中部署模型时,这些差异非常令人惊讶,特别是在工作中的某些阶段花了很多时间。在下面的文章中,我想描述在业务环境中开发模型的过程,并详细讨论这些差异和解释它们存在的原因。在商业案例中,工作流程将有更多的步骤,可能看起来像这样。
    将业务问题翻译成数据问题。考虑机器学习模型如何连接到现有的技术栈中。花费大量时间提取,转换和清理数据。花费大量时间进行探索性分析,预处理和特征提取。建立模型。选择能够以最少的工程量集成到现有技术栈中的最佳模型。考虑到业务价值,优化模型直到“足够好”。部署模型。在生产中监控模型。必要时重新训练。构建版本2。继续,直到模型不再有业务用途。
在本文的其余部分,我将详细介绍每个步骤。

您需要将业务问题翻译成数据问题

在Kaggle比赛中,要解决的问题将在前面明确定义。例如,在最近一项名为“Severstal:钢铁缺陷检测”的竞赛中,您将获得一些准备好的数据,并以数据问题的形式明确说明问题。
今天,Severstal使用来自高速摄像机获取的图像推进缺陷检测算法的改善。在本次竞赛中,您将通过对钢板上的表面缺陷进行定位和分类来帮助工程师改进算法。
在实际业务问题中,您不一定会被要求构建特定类型的模型。团队或产品经理更有可能遇到业务问题。这可能看起来像这样,有时甚至可能没有明确定义问题。
客户服务团队希望减少业务回复客户电子邮件,实时聊天和电话所需的时间,以便为客户创造更好的体验并提高客户满意度指标。
根据此业务要求,您需要与团队合作,在开始构建实际模型之前,计划并设计此问题的最佳解决方案。
发数据并未“清洗”(不干净的数据)

您使用的数据几乎肯定不会被“清洗”。通常会有缺失的值。日期可能格式错误。值,错误数据和异常值可能存在拼写错误。在你真正建立模型的任何地方之前,很可能花费大量时间来删除错误数据,异常值和处理缺失值。

您可能必须从不同来源中获取数据
同样,您需要的所有数据可能不是来自一个简单的来源。对于数据科学项目,您可能需要从以下任意组合中获取数据:SQL查询(有时跨多个数据库),第三方系统,Web抓取,API或来自合作伙伴的数据。与数据清理类似,这部分通常是项目中非常耗时的部分。
特征选择非常重要

在机器学习竞赛中,您通常会有一个给定的数据集,其中包含可在模型中使用的有限数量的变量。功能选择和工程仍然是必要的,但您首先要选择的变量数量有限。在处理现实问题时,您很可能会访问大量变量。作为数据科学家,您必须选择可能产生良好模型的数据点来解决问题。因此,您需要结合使用探索性数据分析,直觉和领域知识来选择正确的数据来构建模型。
发构建模型占流程中的最小的比重

与花费在选择,提取和清理数据的所有这些时间相比,实际构建模型所花费的时间将非常少。对于特别是模型的版本1,您可能希望将模型用作基线测试,那么您可能在第一个实例中仅花费少量时间进行模型选择和调整。一旦业务价值得到证实,您就可以投入更多时间来优化模型。
调整模型比您想象中要花费更少的时间

在Kaggle比赛中,花费数周时间调整模型以获得模型得分的小幅提升并不罕见。由于这个小小的改进可能会提升你在排行榜上的几个名次。例如,在当前的Severstal 竞赛中,排行榜上位置1和2之间的得分差异目前仅为0.002。绝对值得花时间来提高你的分数,因为它可能会给你带来最高奖金。


来源:Kaggle.com


在商业中,您花在调整模型上的时间是成本(烧钱的)。公司必须按照您在此任务上花费的天数或周数支付工资。与所有事物一样,需要以商业价值的形式回报这种投资。模型的业务用例不太可能提供足够的价值来证明花费数天的时间来提高模型的准确性,增量为0.002。实际上,您将调整模型直到它“足够好”而不是“最佳”。
您不一定会使用最好的模型

这引出了我的下一点,即你不会总是使用最好的模型或最新的深度学习方法。通常,您可以使用更简单的模型(如线性回归)来提供更多业务价值。这花费的时间更少(因此搭建模型的成本更低)并且更易于解释。
您的模型必须连接到某个终端(endpoint),例如网站。此终端的现有技术堆栈将对您将部署的模型类型产生很大影响。数据科学家和软件工程师经常会在最小化两端的工程工作方面做出妥协。如果您有一个新模型,这意味着要对现有部署流程或大量工程工作进行更改,那么您必须拥有一个非常好的业务案例来部署它。
工作并不止于此

一旦投入生产,就需要对模型进行监控,以确保其在训练和验证过程中的性能和检查模型降级情况。由于多种原因,模型的性能通常会随着时间的推移而降低。这是因为数据会随着时间的推移而变化,例如客户行为发生变化,因此您的模型可能会开始在这些新数据上表现不佳。因此,模型还需要定期重新训练以保持业务性能。


此外,大多数企业将拥有用于部署机器学习模型的测试和学习周期。因此,您的第一个模型通常是版本1,以形成性能基准。之后,您将对模型进行改进,可能会更改功能或调整模型,部署更好的版本并针对原始模型进行测试。
在此模型不再存在业务案例之前,这两个过程都可能正在进行。
结论
这篇文章的部分灵感来自Chip Huyen的推文。




招聘机器学习从业者很困难的部分原因是,我在这里讨论的许多在商业中部署机器学习的现实都没有在这些课程中讲授。这就是为什么我喜欢实用的第一种学习方法,以及为什么我认为工业实习,实习和初级数据科学角色如此重要。
然而,隧道尽头有光,因为这个领域的技术正在迅速发展,有助于实现数据清理和模型部署等流程的自动化。但是,我们还有很长的路要走,因此对于数据科学家来说,开发软件工程技能,提高沟通技巧,以及拥有弹性和持久的思维模式,以及典型的数据科学家技能组合仍然至关重要。
谢谢阅读
如果对你有所启发,可以用你发财的小手点个赞~鼓励一下小编
欢迎关注公众号:AI算法与图像处理,各种干货等你来~

本帖子中包含更多资源

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

×
发表于 2021-7-4 10:25 | 显示全部楼层
没想到这答案还有人点赞。现已做算法工程师一年了,更新一下答案。
一个算法产品开发,技术方面主要涉及以下几个方面:1. 数据分析,2. 数据处理,3. 数据建模,4. 模型优化,5. 产品化。
1. 一般来说,客户都是会带一批样本集过来,要利用它们,找出这个场景面临的问题。眼看,瞎猜,统计,各种方法,达到目的就行。
(接下来,一般会对数据稍作处理,扔到现有模型里试试,不行就练练丹,主要是为了确定一下项目的可行性,这里假设已经确定可行。)
2. 接着就是数据处理。对于深度炼丹,最重要的莫过于标注了,可能还需要自己造数据集,筛选数据等等。甚至想办法提高一下数据质量,尤其是场景比较固定的。
3. 接着数据建模,一般公司会有预训练好的算法库,或者这个项目已经有案例(只不过这里场景稍微有不同),所以这个流程基本是跳过的,无脑选就得了。深度炼丹有什么脸面提建模,是不是。当然也有场景或数据太过特殊,需要有针对性的魔改(其实是瞎试)。而且也不是所有项目都能用机器学习相关的技术来做的,这种情况数据结构相关的知识倒是帮了我大忙。
4. 要是机器学习深度学习,就得炼丹了,即模型优化。这个大概也是那么几种tricks排列组合,稍微好点,可以根据实验现象,找到调参方向。
5. 最后就是产品化,这是硬核操作。封装,转c++,多线程,数据库,kafka,flask,android等等。
家大业大的,就分的很细,小一点的,就得身兼数职了,甚至身兼多项目。比如我平时1345就都得做,而且手持三个项目,不过我的5很烂,都是在现有的上改改而已。
至于学术界进展,业界标杆,技术直播,也都略有跟进。但实际上,我们这种以业务为核心的,骚操作和硬核技术明显会比尝试刷榜的论文更加有效。


––––––以下是原答案––––––
默认你想做机器学习相关算法。
先回答答主问题:
(1)这个职业,得看公司,我朋友腾讯优图实习过,据透露就是给一个课题,自己做看文献,找到方法(算法)完成这个课题即可,不需要高超的编程技巧,有专门人优化代码。还有一些公司,估计就像其他答主所说,清洗数据多一些,因为大多数算法能够有好结果的前提就是,数据质量要好(脏数据少,特征选的好等等)。
(2)数学建模建议搞搞,因为数模的流程就是,了解课题背景,清洗数据,寻找解决办法,即设计模型和算法,最后就是算法实现和评估。这一套流程就是一个做算法的人要经历的过程,所以这是一个很好的锻炼机会。
接下来是给答主的学习建议:
首先,本人曾经和题主相同,大学并不是计算机专业(控制科学),有了几次建模和编程经验后,发现自己对计算机这类事情更感兴趣;当时“大数据”这个概念也炒得火热,还有不到两年年多毕业的我想找个高薪职业,于是开始学习数据库方面的知识;但是也就是短短半年,我就经历了oracle的没落到mysql的崛起,从辅导机构“DBA越老越吃香”的噱头到DBA面临失业的窘境,从“DBA:data-based architect”的垂死挣扎到java大数据开发的流行。这种落差让我开始慌张,我开始从新思考当初学习数据库方面的知识是不是仅仅是因为钱。结果是肯定的,于是我仔细的分析了自己,发现其实自己对数学和算法和编程比较感兴趣,于是就走向了算法之路。
我做的第一件事就是在知乎发了个帖子(大家可以点开看),内容大致是:我想学算法,我该怎么办。得到的结果,大致和这个帖子类似,有的答主给了诚恳的建议,有的直接嘲讽。(这里顺便就安慰一下题主,你可比我当时幸运多了,你大二就已经想清楚你要搞算法,我大三才结束才明白过来。)于是我做了第二件事,考研,跨专业,六个月,成功第一名上岸,目前研二,研究方向是深度学习和遥感图像。所以我可以,你也可以。那么怎么才能在算法之路上走的快点呢,就是我做的第三件事--不断的学习。
由于你暂时大二,不做科研,我就从入门和应用的角度,简单说一下你都要掌握什么。
(1)数学基础是一定要有的,作为工科生高数、线代和微积分这三门基础课想必你已经学了,建议你再学一下凸优化(中文图书更多叫“最优化方法”)。
(2)接着就是算法,显然是要推荐吴恩达的机器学习视频的,coursea上有中文字幕,讲的比较通俗,容易入门。如果英语不是很好,可以看一看周志华的西瓜书和李航的统计学习方法,经典的算法就那么几个,首先应该掌握基本思路,如果优化推导实在看不懂,可以先放一放,多看看数学,时不时再回顾一下,时间久了就懂了(学习方法这种事我就不多提了)。至于深度学习,我当时入门就是直接看的论文,所以没有推荐的书,但是吴恩达也有视频,虽然更偏向工程,但是用来入门也是可以的。
(3)最后肯定就要实现了。首先可以做一个快乐的调包侠,用scikit-learn包试试各种不同的机器学习算法(官方文档对算法的介绍也挺不错的),tensorflow可以用来搭建深度学习框架,做做网上简单的小项目。当然调包不是长久之计,慢慢的就要学着从简单的算法开始,自己实现,这样才能更深刻的理解算法。
以上就是入门,上述三点不是串行的,你可以先学算法,然后发现有不会的数学,再回去补一下相应的知识,学完这个算法就调调包试一下,反复循环。
如果入门之后发现真的感兴趣,那么就建议你考研了,选个好导师,继续研究,发现问题解决问题真的比编程好玩多了(反正我是编吐了,想去欧洲读博,做稍微理论一点的方向,比如复杂度啊图论啊博弈论啊等等,有答主了解这类方向的导师吗,求推荐)。
发表于 2021-7-4 10:26 | 显示全部楼层
近年来,算法工程师越来越成为热捧的香饽饽,薪资待遇高、发展空间大、岗位需求多。光是薪资,很多人轻轻松松就能拿到50万的年薪。此外,今日头条、抖音崛起后,推荐算法工程师等岗位也缺口越来越大。
如果要我用一句话来简单说算法工程师是做什么的,那就是,用机器学习的方法来实现人工智能和数据挖掘。
具体地,我们先来看看现在各大公司的算法工程师岗位的技能要求,你就可以知道这个岗位是做什么的了。
首先,来看看阿里的算法工程师招聘要求
总结一下一名算法工程师需要的技能树
    需要掌握计算机语言:Python,C++, SQL需要掌握的算法和数据结构知识:二叉树、链表等基本的算法和数据结构知识,达到LintCode上的算法题水平即可。需要掌握的统计学知识:能看到简单的统计学概念、符号即可需要积累的经验:Kaggle上的一些数据挖掘项目、特征工程、机器学习模型。
小私心推荐一下九章算法的《人工智能集训营》,由美国硅谷的老师授课,课程含括20+项目10+模型,并提供一对一简历修改、模拟面试、和内推。前不久有一个学员刚在老师的帮助下拿到keep算法工程师岗位offer。你现在才大二,从现在开始往这个方向努力,一定可以实现你的目标。

本帖子中包含更多资源

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

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 08:32 , Processed in 0.104669 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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