商务英语

程序员之算法攻城撕的就业方向日常技能


白癜风控制 http://m.39.net/pf/a_6020116.html

网上大家对程序员的调侃还是比较多的,谈到程序员可能就是一个发量感人或头发油腻、格子衫、双肩包的形象。主要原因还是大家对这个职业不甚了解但又充满好奇,好奇大概是因为程序员身上还有着高薪、老实人、宅这样的流量标签。你以为的程序员可能是这样的:

但实际上他们和你在大街上见到的普通人没什么区别,虽然整体上来说,程序员偏宅和内向,因为这是一个几乎不用和人打交道的职业,他们天天面对着电脑,各种面向对象编程,但。。。不要误会,这个对象不是你们以为的对象。

本文从个人经验的角度来跟大家介绍一下程序员当中的一类——算法“攻城撕”的就业方向、日常、职业规划及技能点。首先跟大家聊一聊算法工程师有哪些就业方向。

算法工程师的就业方向

我个人从事过的AI场景其实是比较多的,最初在一家数据公司做过NLP和异常检测相关的工作,后来去上汽子公司自动驾驶组接触到图像处理相关工作,然后在阿里子公司的互联网汽车部门做过数据挖掘相关工作,中间还在另一家公司做过量化投资相关的事情,现在做的是信息流推荐算法,基本上当前主流的AI的落地场景我都有所接触。总的来说,当前有产品落地或比较好的商业价值的AI就业方向有:

数据挖掘和数据分析,比如说异常检测、欺诈检测等

自然语言处理(NLP),比如说我们算法部门就有专门的NLP组,主要负责搭建上层算法应用的基础设施,如文章关键词、实体词、相似度计算等,在智能翻译、语音处理当中也会用到相关技术

图像处理(CV),比如自动驾驶当中涉及到的图像拼接、车道线检测,推荐当中涉及到的图像特征提取等

推荐算法,当前各大互联网公司基本都会有这个岗位,信息流推荐、商品推荐等

搜索算法,和推荐算法用到的技术很类似了,信息搜索、商品搜索等

广告算法,技术上和推荐算法很像,但是涉及到的其它知识会稍微多些,因为广告要考虑的不仅仅是用户和内容的关系了,还多了一层商家的关系。

其它的还有一些偏研究性质的岗位,这个一般要求也比较高,博士研究生招的比较多,主要是不差钱的大厂会成立相关部门,比如阿里的达摩院,其它公司的AILab等,这些部门当中一般也有专门做研究与应用相结合的一些岗位。

算法工程师的日常

算法工程师的日常就是做算法的优化。公司主要还是以产出论英雄,产出与绩效直接挂钩,绩效跟你的晋升和钱途紧密相关。一般每个人都会背负一个月度指标(或者双月/季度指标),比如我这个双月给定的目标是通过优化推荐算法使用户阅读时长相对提升3%,具体到用什么方法来提升,会有一个大的方向,通常是领导分配的或者上个季度没做完延续下来的,因为通常目标会定得比较激进,完不成目标也是很常见的事情。当然在做的过程当中你也可以随时调整,因为一开始定的路线可能做着做着发现走不通了,如果你有新的想法,一般可以跟领导商量看看是否值得做。因为有的任务产出高,有的产出低,所以如何将各个任务拆解合理分配到个人,其实也挺考验领导的。

目标和具体任务定下来了,那么每天的工作就是围绕怎么去实现这个目标进行的。比如我的一个任务是实现一个最近某论文上提出的复杂模型,那么我可能需要先去调研,论文也好网上其它资源也好,花点时间把原理先搞懂,然后开始结合公司现有的训练框架去实现这个模型,开发的时间依需要改动的代码量而定,通常不会太大,除非需要改动既有框架,那就是一个大工程了。

开发测试完了,开始训练模型,训练过程当中观察训练指标是否符合预期,如果不符合预期,那就需要回过头来排查问题出在哪里。模型训练好了,开始做离线测试,看看各个指标相对于baseline模型(指线上使用的模型)是否符合预期,很有可能不符合预期,一次性就能取得预期效果的基本没有,除非任务真的比较简单成熟,但是一般容易做的基本都已经被做得差不多了,剩下的都是难啃的骨头,二是论文和实际应用往往有差距,很多细节人家可能没有说,而决定效果的往往是这些细节,或者人家根本就是在吹水,这个时候你需要学会去判别,同时要学会适应和调整自己的心理预期。

所以在优化一个策略的时候你经常会遇到各种问题,需要不断地去排查问题在哪里,思考怎么去真正解决问题,很有可能需要你推倒重来。你需要非常明确你的目标,遇到问题能够灵活变通,解决问题才是根本,所有通向目标的方法都是手段。

现在你模型训练好了,离线测试发现也符合预期,可以从线上切点流量做个分桶测试,这个时候你需要了解怎么部署模型,怎么上线,怎么开实验,这个流程可能也会比较长,但是你熟悉之后一般也不是什么问题。

实验开了,线上成功率、预估值等监控指标看起来没什么问题,那每天早上到公司干的第一件事情可能就是点开自己的实验,看一下业务指标,时长和PV怎么样,留存怎么样,是否达到了预期。很抱歉的告诉你,经常你的实验会不符合预期,所以这个时候你又得回过头来排查问题,离线验证是否严谨、上线流程是否有纰漏、在线离线是否一致,等你把能想到的问题都排查完了,实验还是不符合预期的话,那就要寻求领导的帮助了,或者只能放弃这个实验。

如果实验符合预期,各业务指标都满足了上线要求,那么此时就可以将你的策略推全了。这个时候你需要更加严谨,因为此时你的操作会影响到所有的用户。你需要拉一同事配合你上线,加机器也好,加监控也好,上线的过程中盯紧各种监控指标,有什么异常的话赶紧回滚或者观察一段时间后继续。

你的策略推全了,很好,但很可能你取得的提升很有限,离目标的完成甚至还差得很远。所以你需要继续优化你的策略,然后重复上面的流程,这就是基层程序员的日常了。

算法工程师的职业发展路径

程序员的职业发展路径一般就是,初级工程师-高级工程师-资深工程师-专家-高级专家-资深专家-研究员,大公司会有相应的职级,比如阿里技术序列就对应P1~P14,校招一般是P4~P5,本科一般P4,研究生一般P5,能力强的可能给到P6甚至P7,但这毕竟是凤毛麟角。P5~P7是干活的中坚力量,占比比较大,一般一到两年晋升一次,当然升不升和怎么升跟你的个人能力和产出强相关,评定的标准还是比较规范的,P7往上升卡得比较严。

算法工程师需要点亮哪些技能

成为一个算法工程师首先你得有工程能力,就是说你得先能干活,熟练的掌握一门编程语言必不可少;

然后是相关领域的专业知识,比如推荐算法,你需要了解常见推荐算法的原理、优缺点、应用场景等;

然后是机器学习的基础知识,李航的《统计机器学习》,周志华的《机器学习》,Benjio的《深度学习》,这三本书至少得过个那么一两遍吧,把基础知识掌握牢了再学习其它的就容易多了,基础不牢地动山摇;

然后是掌握一些数据结构和算法知识,这个还是比较重要的,对你写出高效的代码很有帮助;

英语和计算机的基础知识就不讲了,优秀的程序员对这个都是有追求的。

优秀的算法工程师到底优秀在哪里

一个优秀的算法工程师

首先是基础扎实,对于算法基础知识理解透彻;

然后是业务能力强,不懂业务的算法工程师是不可能成为一个优秀的算法工程师的,公司要的是业务产出,而不是多么Fancy的算法;

然后是持续学习的能力,技术的迭代很快,不进则退,优秀的算法工程师不仅需要钻研本领域的知识,还需要了解其它方面的知识,比如推荐算法工程师需要了解各种训练结构甚至其具体实现,软硬件怎么结合,C++的进阶等等;

然后是协作能力,在公司里面可能沟通成本比开发成本高,特别是组织结构庞大以后,跨部门沟通就更难了,找到对的人,一起把问题给解决掉,这应该是一个优秀工程师需要培养和掌握的重要能力,只顾闷头写代码容易闭门造车,落后了可能都意识不到。

最后,大家有什么问题,欢迎留言讨论或扫码交流:

留言板

hellobill




转载请注明:http://www.shangwuyingyua.com/swyyks/14606.html


当前时间: