极市导读
作者回顾了自己一步步成为算法工程师的经历,总结分享了成为一名合格的算法工程师所需的技能点,希望能给予同学们一些帮助~ >>加入极市CV技术交流群,走在计算机视觉的最前沿
最近收到了不少同学的要求,想要让我分享一下如何从0到1成长为一名合格的AI算法工程师,之前回学校也做过一些分享,总感觉比较零散,正好趁着这个机会整理一下,因为大家要求的是从0到1,我自己也审视了一下我当年是如何走上算法工程师这个不归路(开玩笑,现在也非常感激自己当年的选择),然后也去想了几个关键节点的选择,也参考了自己平时做的一些笔记和代码,同时和周围一些领域牛人做了一些交流,整理了一份还算齐全的资料出来
算法工程师是一个非常通俗的称呼,涵盖的领域非常的广,既包括我们常说的AI应用(推荐、广告、搜索、智能客服、智能风控等),也包括我们在学校开设的AI课程(机器学习、深度学习、强化学习、自然语言处理、图像处理、语音识别等)。算法工程师这个职业最早出现在JD中,是豆瓣的阿北为了招募推荐算法工程师而发布的,真正被大家所熟知应该是2016年AlphaGo席卷全球,才让越来越多的同学加入到这个行业。
衡量一个工作前景,最直接的感知就是薪水。毕竟价格是由供需关系决定的。我们都是打工人,希望能够赚钱养家户口,最近看大厂校招算法工程师白菜价工资而言 15k(16年) → 19k(17年) → 21k(18年) → 22k(19年) → 25k(20年),社招(1~3年内)的话,我列一个图,大家自行观摩吧:
其实我在大学一直是做硬件的(飞思卡尔智能车、电子设计大赛),每天接触的是单片机和ARM这些,上研究生之后当时实验室做Java开发比较多,也是懵懵懂懂的,每天也不知道自己在干啥,研一上半学期,每天也非常的迷茫,反正就是寝室和实验室两点一线。我这个人有一个特点,比较喜欢和高年级人交流,大概是春节的时候,我回家比较晚,恰巧实验室有一个博士师兄在刷公开课(吴恩达的机器学习),抱着好奇的态度,与他交流了一下,觉得这个方向很酷,然后我就入坑了。
研一暑假的时候,找实习,不出意外,所有的算法岗全跪,想想那个时候真的很年轻(代码能力弱的不行,机器学习基础不行,最重要的是没有算法项目经历);在我非常绝望的时候,有一家做数字营销的创业公司(技术6个人左右)给我发了offer。这段实习经历非常的宝贵,我也非常的珍惜(经常一起007,打地铺在公司睡觉),通过这段实习,我知道了怎么成为一名合格的算法工程师。
其实在一个小白进入一个新的领域,如果能够遇到一个大神,能帮助他梳理清楚整个方向脉络,只要他刻苦努力,基本就能很快做到入门了。现在想想其实我之前走了很多弯路,只是通过自己的观察和亲身经历入坑算法,而且运气成分占很大比例(如果我没有和博士聊天,如果博士看的不是机器学习公开课,如果博士师兄嫌我烦不愿意搭理我,如果我没有找到算法实习)。
后来在研二暑假的时候,在北京大望路某大厂做算法实习,也正式开启了自己的算法工程师之路。当时组内大神很多,最喜欢的就是每两周一次的经验分享(最新paper解读等)。当时自己比较菜,一般都是坐下面搬小板凳记笔记,然后回去把听不懂的名词在Google Scholar查找,找到文献开始认真阅读,但是很欢乐
之后就是校招拿到大厂offer,然后顺利进入大厂。但在职场初期,走的比较坎坷,自己被分配去做了1年大数据(折腾Hadoop、Hive),索性那个时候没有自怨自艾,最后通过自己的努力,重新回到算法工程师这个岗位,接触到了计算机视觉和自然语言处理,然后又去做了推广搜,到现在开始带团队做算法负责人。
在工作的这些年,遇到不少人咨询我,如何产品转算法、如何运营转算法、如何开发转算法、应届生如何入坑算法等,毕竟这几年算法工程师的工资水涨船高(需求大、供给少,典型经济学原理),人都是趋利的,都想进来卷一下,为了让各位同学更有体感,我从我之前经历的面试谈起(里面也加入了一些近期出现的新模型的一些问法,基本上都是面试真题),然后大家通过这一波面试,就能知道算法工程师要求了,当然因为是工程师,就不列算法leader面试的情况了。
同学A:我叫xxx,毕业于yyy,balabala
面试官:嗯,我看你用svm做了一个项目,能展开详细讲讲么?
同学A:我这个项目的背景是xxx,遇到了xxx问题,经过调研,决定采用svm来解决
面试官:嗯,你这个项目的目标是什么?
同学A:额,我的项目....额....额,嗯,是提高分类准确率,是一个二分类模型
面试官:嗯,你的离线指标提升了多少?
同学A:嗯,我的分类准确率到了80%,召回率到了70%
面试官:你是怎么做数据处理的?涉及到那些技巧?
同学A:我直接用了word2vec抽取了embedding来做的
面试官:你用了word2vec,那么能谈一下skip-gram和cbow么?包括skip-gram和cbow分别适合处理什么样子
场景?这两个模块都用到了层次softmax,这个会带来什么样的问题?除去Huffman tree的优化方法,还有什么
更好的算法么?NCE听过么,能详细讲讲如何在word2vec训练中怎么落地么?能聊聊word2vec有哪些不足么?
知道业界对于word2vec的一些改进方案么?【NLP算法原理内容考察】
同学A:额。。。我没有想过
面试官:你除去embedding,有尝试一些别的特征引入么?例如归一化、离散化、tf*idf、ngram【特征工程考察】
同学A:额。。。没有尝试过
面试官:紧接着你刚才谈到embedding技术,有尝试过其他的embedding技术么?
同学A:嗯,我知道有bert
面试官:嗯,bert来讲讲吧
同学A:bert是xxx模型,用到了transformer技术,
面试官:嗯,谈到了transformer,能聊下为啥要做归一化么?能聊一下为啥方差是dk么?【深度学习内容考察】
同学A:额。。。忘记了
面试官:回答开始的问题,你用到了SVM,能手动推导一下么?【机器学习原理考察】
同学A:额。。。不太会
面试官:假设你要处理的数据很多,你计划怎么处理
同学A:额。。我会用hadoop和spark去做数据处理,进行筛选
面试官:嗯,看你很了解大数据处理的工具,那么如何用hadoop或者spark实现一个并行的SVM?【机器学习应用考察】
同学A:额。。。不会
面试官:vc维知道么?能用它来解释一下SVM为啥分类效果好么?
同学A:额。。。不会
面试官:除去SVM,还有很多好的分类算法,有尝试用深度学习来做文本分类么?
同学A:用过textCNN
面试官:用过CNN对么?能聊一下卷积的实现方式么?另外如果发生gradient vanishing,有哪些方法可以帮助
解决?CNN如果加深的话业界有哪些成熟的方案么?优化算法了解么?动量法为啥能够解决梯度收敛过慢的问题?
文本是序列类的,CNN抓局部,有试过RNN类的方法么?【数学原理】
同学A:额。。。不会。。。没有用过
面试官:如果数据量很少,怎么做分类的数据增强?
同学A:额。。。
面试官:好吧,我们来做一道算法题,实现二叉树的序列化与反序列化【数据结构与算法】
同学A:嗯,这题我会,很快写完
面试官:你的时间复杂度是多少?是否有更优的方法么?
同学A:额。。。。
面试官:如果是多叉树,怎么解决?
同学A:不会。。。哭泣。。。
面试官:你有什么问题问我?
同学A:balabala
各位同学可以对号入座一下,如果你去面试,怎么回答上述提到的问题,我这边给大家列一下回答到什么程度,能拿什么样子的offer,这里选用了Google评价人才的体系
卓越(一定要这个人,他没来我就辞职)
超过预期(这个人不错,他没来我会难受)
符合预期(这个人可要可不要,其他面试官看看)
低于预期(如果录用这个人,我就辞职)
BAT三家在这个行业时间足够长,且职级体系经过了很长时间的沉淀,但腾讯小级过多,百度股价不振,最终各家都以阿里的职级体系做对标,详细可见下表:
我们以事实说话,看一下JD的要求,来分别给大家拆解一下,先看图:
计算机基础
数据结构与算法(必要)
操作系统(可选)
计算机组成原理(可选)
编译原理(可选)
计算机网络(可选)
数学基础
算法能力
熟悉常见机器学习算法原理与基础实现(必要)
熟悉常见深度学习算法原理与基础实现(必要)
自然语言处理(如果是NLP工程师,那么此处为必要,否则为可选)
图像处理(如果是CV工程师,那么此处为必要,否则为可选)
强化学习(可选)
工程能力
沟通能力
抗压能力
ownership
领导力
论文
写代码
review case
lanuch review
参加分享
读书
健身
祝大家成为一名优秀的算法工程师
如果觉得有用,就请分享到朋友圈吧!
公众号后台回复“88”获取严彬:STARK-
基于时空Transformer的视觉目标跟踪PPT下载
# CV技术社群邀请函 #
备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)
即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群
每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~