不知不觉,笔者已经做了在算法工程师这个热门的岗位已经两年了。笔者本身学习的化工专业。当年毕业不知道是因为打心底热爱算法,还是因为图这个岗位所能带来的钱财,总之,在花了两年的时间摸爬滚打之后姑且算是入门了算法这个领域。今天早上醒来,我迷茫得望着天花板,想着这两年我到底做了些什么,到底有没有稍微改变一下这个世界(儿时的幻想),或者已经具备这样的能力。然后就是越想越乱,越乱越想,越想越乱,越乱越想.....最后决定要整理一下这两年乱糟糟的职业生涯,以便日后的我能做一个就算改变不了世界,但是至少可以改变自己的打工人。
算法工程师到底是什么
其实到招聘网站上去搜算法工程师,你会搜索出好几个不同的工种,比如计算机视觉算法工程师,自然语言算法工程师,OCR算法工程师,机器学习算法工程师等等,而且这些工种的有很多技能各种重叠,但是又各有侧重。但这些人为什么又统称为算法工程师呢? 其实我认为算法工程师就是将通过算法和数据为企业带来实际价值的一帮人。
我入行是从机器视觉(compute vision as CV)开始,后来转到了自然语言处理(Nutrual Language Processing as NLP),目前来到了推荐系统(Recommend Systerm as RS)这个领域。我到目前为止也不知道为什么我会进行这样的路径选择,可能有主动+被动的一些原因。这样的职业路径让我有机会有个全局的视野感受到企业数据+智能算法是如何配合而产生威力的,也大概了解到了这些不同的岗位是如何分化出来的。从企业数据价值化的角度很容易就可以明白为什么市面上会将算法工程师分为这么多类型。
- 结构化数据价值化:普通算法,机器学习和深度学习算法可以帮助企业智能化利用结构化数据,比如我之前做过的异常值检测之类的项目用的就业务的mysql表单数据,帮助公司挖掘异常用户并采取措施。
- 非结构化数据价值化:NLP算法,CV算法可以帮助企业智能化利用这些非结构化数据去做服务优化或者直接提供服务(目前来说CV算法直接提供服务的场景较多,而NLP算法一般只某些服务体系中的优化者,直接提供服务效果不算特别理想)。目前大家可以感受到的是:人脸识别这个技术目前已经很成熟了基本上完全可以取代人工,而智能问答机器人目前只能辅助人工应对一些简单场景。
- 同时结构化信息和非结构化数据利用 :至于知识图谱目前可以理解为对数据的一种合理的组织方式,但是其构建过程需要用到一些机器学习和深度学习算法(主要是NLP算法),知识图谱可以很方便应对某些业务场景或者为问答服务提供知识库。而推荐,搜索,和广告则会利用到很多机器学习和深度学习算法(这里可能会涉及NLP,CV等)去提升其效果。
所以一个企业只要想做数据化转型,想必都少不了算法工程师这个岗位。
算法工程师的日常琐事
至于一个算法项目到底如何落地,基本上已经形成一个固定的流程,如下图所示:
1.算法建模:将一个业务问题抽象成一个算法问题,比如推荐可以抽象成召回,排序;异常检测可以抽象成分类,机器翻译抽象成文本生成,这一步比较关键,毕竟开头都错了,还能指望结果对吗。
2.数据处理:这部分是对涉及到业务目标的数据进行选取,清洗和转换,方便喂给后续的算法模型。
3.模型训练和优化:选择合适的模型和优化目标,写代码然后进行调优就可以。
4.模型的部署:将模型用到实际生成中,交付给需求方
这里强调一点:数据处理,模型训练优化,和模型部署是个循环优化的过程,并不是一次交付就撒手不管的事情。这就是一个算法工程师日常最主要的一些工作了。
算法岗的一些实际经验
将业务问题抽象成模型是最难的一步
当你面对一个需求时,如何将业务问题抽象成某类型算法问题很考验功力,采用什么样的算法类型会毕竟合适也需要在工作中积累经验,这个过程需要慢慢学习。规则性价比高就采用规则,算法性价比高就用算法
不要盲目迷信算法,这里的算法指的是智能算法,有时候规则可能比智能算法有着更好的性价比。这是我在一次面试时一个面试官教我的,后来在实际工作中觉得也很合理。毕竟智能算法需要标注数据,从自己的实际体验来看,标注数据需要花费的时间和人力成本还是有点高。数据优先级最高:数据决定了结果的上限,而模型选择和参数优化只能尽量接近这个上限。太差的数据集,就算喂给最强的的模型也不会有好的结果。
目前做算法被分为两拨人——算法研究员,落地工程师
算法研究员指的那些在某一个特别细分的领域,为一个任务SOTA(State of The Art )做出贡献的人,他们推动了整个算法领域在这5年的飞速前进。比如CV领域的resnet, NLP领域的BERT,推荐领域的youtubeDnn.这些算法目前已成为工业界的标配。但是要发明这些算法,还是需要有一股做学问和创新的精神。这方面能力还有待提升。
落地工程师是将这些优秀的算法学会,并在合适的场景下将其应用在实际的任务中,并能够给业务指标带来提升,这一类工程师虽然不是很拉风,但是也比较实用,我目前处于这一类算法工程师。
未来的职业规划
-
先成为一名优秀落地工程师
这里我罗列了一些硬实力,也就是我今后要学习的地方。至于面对问题如何冷静思考出对策,沟通等软实力是每个打工人都必须具备的,这里我也就不提。主要包括数据分析和处理,算法技能(核心技能),模型部署,和大数据技能等。
- 并具备一定的模型创作能力
之后通过业余时间的学习,补足在算法创新方面的实力
开源的学习资源
在转行算法的路上,除了工作上的伙伴会教我一些知识以外,我很多技能其实来自于一些非常优秀的开源的学习资源,这些大佬的无私分享让我受益匪浅,这里将平日里学习的一些宝藏资源分享出来,希望也能够帮助到有缘人。这也是我将我的学习笔记记录并分享到网上的原因。
台湾大学李宏毅老师的个人主页
李宏毅老师是我目前为止接触到的华语机器学习和深度学习课程中,讲得最好一位老师。爱好日本二次元文化的李教授会在课程的案例中引入凉宫春日,宝可梦等多款广受大家熟知的动漫,为课堂增加了些许趣味性。同时为了让向我这样资质浅薄的人也能听懂深奥的深度学习模型,李教授做一个LSTM的PPT也得花上2个多小时,把数据在模型中流动和运算讲得让你大呼:"原来神秘的LSTM其实不过如此"。而且李教授会紧跟最新的研究方向,每年调整自己的授课内容,听他的课基本上就是在了解全球最新的AI研究。下方是李宏毅教授的主页链接。
http://speech.ee.ntu.edu.tw/~tlkagk/index.html
莫烦python主页
莫烦大神本身的专业也不是计算机,他基本上也是自学AI,并将学习到的知识制作成通俗易懂的视频分享出来,他的主页包含很多关于使用python做AI的一下基础知识,主要包含:
- python的基础,
- python数据采集(爬虫)
- python数据处理(numpy,pandas)
- python数据分析及可视化(numpy,pandas,Matplotlib)
- python机器学习和深度学习框架(sklearn,tensorflow,pytorch,theano,keras)
- 以及一些进化算法和强化学习方面的知识
最近我在追他的NLP的教学实战,下方是直达链接,学习python的同学一定不要错过。
https://mofanpy.com/
https://space.bilibili.com/243821484?spm_id_from=333.788.b_765f7570696e666f.1
苏剑林的科学空间
苏神(苏剑林)本身就是一位科学爱好者。最近一两年将精力主要放在了AI(偏向NLP)的研究之上,苏神的博客每一篇都隐含着理性思维的光辉,并且极具创造力,总之近两年他的博客我每一篇都不会落下,而且多半都会有所启发,强烈推荐下方链接。
https://spaces.ac.cn/
吴恩达机器学习系列课程
最后当然不能忘了AI四巨头之一的吴恩达(Andrew Ng
)的理论基础课程,10个学AI算法的人里面有9个半都看过他的课程,吴恩达AI教学第一人也毫不夸张,下方是他的一些基础课程的B站直达链接。
https://www.bilibili.com/video/BV164411b7dx?from=search&seid=9729070341412325326
结语
其实这篇文章的行文过程就是我在思考作为一个算法工程师存在的价值(WHY),日常的工作(WHAT),所需的技能素质(HOW)。想想其实路还很长,保持前进,好久没有记录学习笔记了,希望自己能够重新开始学习起来。