CCCF专栏 | 20万、50万、100万年薪的算法工程师到底有什么区别?

2017 年 10 月 18 日 中国计算机学会 刘鹏

点击上方中国计算机学会轻松订阅!

来源:《中国计算机学会通讯》2017年第10期《专栏》


近年来,人工智能迎来了新一轮的热潮。与前几次不同的是,目前人工智能开始可以真正解决许多实用问题了。一方面,得益于新计算架构带来的计算能力的快速提升,另一方面,得益于互联网等领域积累的海量数据。当然,能够用计算来挖掘数据中的价值,是因为深度学习技术的成熟。于是,在今天,从事人工智能工作,做一名算法工程师,成为眼下最热门的职业选择之一。

算法工程师曾经的境遇可没那么好:早年的互联网信奉“糙快猛”主义,各大互联网公司老板们觉得研究算法的人饱食终日、无所用心,找不到工作只好在学校“混”博士,靠数据上的障眼法装神弄鬼。可是,随着2016年AlphaGo战胜世界围棋冠军李世石之后,老板们的态度突然来了个大转弯,纷纷把各种搞劫持、送外卖的生意包装成人工智能,还纷纷请来几位懂算法的专家坐镇。

于是,算法工程师的身价也水涨船高了。各门派工程师不论过去练的是java、php还是excel,都放弃了最好语言的争论,抄起了深度学习,发誓重新修炼成算法工程师。前些天,还有人在“知乎”上问我:年薪20万、50万、100万的算法工程师,到底有什么区别?

这个问题很有意思。根据我的工作经验,用上面的数字做个参照,谈一谈算法工程师的三个层次。这里说的算法,并不是计算机系本科课程“算法与数据结构”里的算法。那门课里讲的是排序、查找这类“确定性算法”,而本文说的是用统计方法对数据进行建模的“概率性算法”。

第一层次“Operating”:会使用工具

这个层次的工程师,对常用的模型比较熟悉,得到数据以后,能选择一个合适的模型运行出结果。

要想达到这个层次,其实门槛并不高。以前,只要掌握了文档主题生成模型(LDA)、支持向量机(SVM)、逻辑回归(LR)这些基本模型,再使用libnear、mahout等开源工具,就可以在拿到数据后运行出一个结果。到了深度学习时代,这件事似乎变得更简单了:管它什么问题,不都是拿神经网络往上堆嘛!最近,经常会遇到一些工程师,成功地跑通了TensorFlow的演示程序后,兴高采烈地欢呼:我学会深度学习了!

这里要给大家狠狠浇上一盆冷水:进入这个领域的人,首先要明白一个道理:如果有两个模型进行一次多回合的较量,每个回合用的数据集不同,而且数据集没什么偏向性,那么最后的结果,十有八九是双方打平。

考虑一种极端情况:有一个参赛模型是“随机猜测”,也就是无根据地胡乱给个答案,结果如何呢?双方还是打平!所以,请再也不要问“聚类用什么算法效果好”这样的傻问题了。

这恐怕让入门者觉得沮丧:掌握了一堆模型并且会运行,其实并没有什么用。当然,实际问题的数据分布总是有一定特点的。比方说人脸识别,图中间怎么说都得有个“脸”。因此,问“人脸识别用什么模型好”这样的问题,就有意义了。而算法工程师的真正价值,就是洞察问题的数据先验特点,把它们在模型中表达出来。而这个,就需要下一个层次的能力了。

会使用工具,在算法工程师中仅仅是入门水平。如果不是在薪酬膨胀严重的互联网界,我觉得年薪20万是个比较合理的待遇。

第二层次“Optimization”:能改造模型

这个层次的工程师,能够根据具体问题的数据特点对模型进行改造,并采用合适的最优化算法,以追求最好的效果。

不论前人的模型多么美妙,都是基于当时观察到的数据先验特点设计的。比如说LDA,就是在语料质量不高的情况下,在概率隐语义分析(Probabilistic Latent Semantic Analysis, PLSA)的基础上引入贝叶斯估计,以获得更加稳健的主题。虽说用LDA不会大错,但是要在具体问题上运行出最好的结果,必须要根据数据特点对模型进行精准改造。

这一现象在互联网数据上体现得更加明显,因为没有哪两家公司拥有的数据是相似的。百度的点击率模型,有数十亿的特征,大规模的定制计算集群,独特的深度神经网络结构,你能抄么?抄过来也没用。用教科书上的模型以不变应万变,结果只能是刻舟求剑。

改造模型的能力,不是用几个开源工具那么简单,这需要有两方面的素养:

1.深入了解机器学习的原理和组件。机器学习领域,有很多看似不是直接有用的基础原理和组件。比如,正则化怎么做?什么时候应该选择什么样的基本分布(见表1)?贝叶斯先验该怎么设?两个概率分布的距离怎么算?当看到前辈高人把这些材料烹调在一起,变成LDA、卷积神经网络(CNN)等成品菜肴的时候,你也要想想如果自己下厨,是否了解食材,会不会选择和搭配。如果仅仅会吃几个菜,能说出有什么味道,离好厨师还差很远。 

2.熟练掌握最优化方法。如果机器学习从业者不懂最优化,相当于武术家只会耍套路。不管你设计了一个多好的模型,如果无法在有限的计算资源下找出最优解,那么这个模型不过是个花瓶罢了。

最优化,是机器学习最重要的基础。在目标函数及其导数的各种情形下,你需要熟知如何选择优化方法,各种方法的时间空间复杂度、收敛性如何,还要知道怎样构造目标函数,才便于用凸优化或其他框架来求解。这些方面的训练,要比对机器学习模型的掌握更扎实才行。

拿“以不变应万变”的深度学习举个例子。用神经网络处理语音识别、自然语言处理时间序列数据的建模,循环神经网络(Recurrent Neural Network, RNN)是个自然的选择(见图1)。不过在实践中,大家发现由于存在“梯度消失”现象,RNN很难对长程的上下文依赖建模。而在自然语言中,要决定be动词是用“is”还是“are”,有可能要往前翻好多词才能找到起决定作用的主语。怎么办呢?天才的施米德胡贝(J. Schmidhuber)设计了带有门结构的长短期记忆(Long Short-Term Memory, LSTM)模型(见图2),让数据自行决定哪些信息要保留,哪些要忘掉。如此以来,自然语言的建模效果就大大提高了。初看RNN与LSTM的结构对比,面对凭空多出来的几个门结构可能一头雾水,唯有洞彻其中的方法论,并且有扎实的机器学习和最优化基础,才能逐渐理解和学习这种思路。

图1 循环神经网络模型

图2 长短期记忆模型

当然,LSTM这个模型是神来之笔,我等对此可望不可及。不过,在这个例子里展现出来的关键能力:根据问题特点调整模型,并解决优化上的障碍,是一名合格的算法工程师应该追求的能力。年薪50万能找到这样的人,是物有所值的。

第三层次“Objective”:擅长定义问题

对这个层次的工程师的要求比较高。给他一个新的实际问题,他要能给出量化的目标函数。

当年,福特公司请斯坦门茨检修电机,他在电机外壳画了一条线,让工作人员在此处打开电机并迅速排除了故障。结账时,斯坦门茨开价1万美元,还列了个清单:画一条线,1美元;知道在哪儿画线,9999美元。

同样的道理,在算法领域,最难的也是知道在哪里画线,这就是对一个新问题构建目标函数的过程。有明确的量化目标函数,正是科学方法区别于玄学方法、神学方法的重要标志。

目标函数,有时能用一个解析形式(analytical form)写出来,有时则不能。比如网页搜索问题。它有两种目标函数:一种是归一化折损累积增益(Normalized Discounted Cumulative Gain, NDCG),这是一个在标注好的数据集上可以明确计算出来的指标;另一种则是人工看坏案例(badcase)的比例,显然它无法用公式计算,但是其结果也是定量的,也可以作为目标函数。

定义目标函数,乍听起来没有那么困难,不就是制定一个关键性能指标(KPI)吗?其实不然,要做好这件事,在意识和技术上都有很高的门槛。

1.要建立“万般皆下品、唯有目标高”的意识。无论是一个团队还是一个项目,只要确立了正确的、可衡量的目标,达到这个目标就只是时间和成本问题。

所谓“本立而道生”:一个项目开始时,总是应该先做两件事:一是定义清楚量化的目标函数;二是搭建一个能够对目标函数做线上A/B测试的实验框架。而收集什么数据、采用什么模型,都在其次。

2.能够构造准确(信)、可解(达)、优雅(雅)的目标函数。目标函数要尽可能反映实际业务目标,同时又有可行的优化方法。一般来说,优化目标与评测目标是有所不同的。比如在语音识别中,评测目标是“词错误率”,但这个不可导,所以不能直接优化。因此,我们还要找一个“代理目标”,比如似然值或者后验概率,用于求解模型参数。评测目标的定义往往比较直观,但是要把它转化成一个高度相关,又便于求解的优化目标,是需要相当的经验与功力的。在语音建模里,即便是计算似然值,也需要涉及Baum-Welch等比较复杂的算法,但要定义清楚是不简单的。

优雅,是个更高层次的要求,在遇到重大问题时,优雅往往是不二法门。因为往往只有漂亮的框架才更接近问题的本质。关于这一点,必须要提一下近年来最让人醍醐灌顶的大作——生成对抗网络(Generative Adversarial Network, GAN)。

图3 生成对抗网络模型

GAN要解决的,就是让机器根据数据学会画画、写文章等创作性问题。机器画画的目标函数怎么定义?听起来让人一头雾水。我们早年做类似的语音合成问题时,也没有什么好办法,只能通过人一句一句听来打分。令人拍案叫绝的是,伊恩·古德费洛(Ian Goodfellow)在定义这个问题时,采取了一个巧妙的框架(见图3)。

既然靠人打分费时费力,又不客观,那就干脆让机器打分吧!好在让机器辨认一幅特定语义的图画(比如说人脸),在深度学习中已经基本解决了。假设我们已经有一个能打分的机器D,现在要训练一个能画画的机器G,那就让G不断地画,D不断地打分,什么时候G的作品在D那里得分高了,G就算是学会画画了。同时,D在此过程中也因为大量接触仿品而提升了鉴赏能力,可以把G训练得更好。有了这样定性的思考还不够,这样一个巧妙设计的二人零和博弈过程,还可以表示成下面的数学问题:

这个目标,优雅得像个哲学问题,却又实实在在可以追寻。当我看到上述公式时,顿时觉得教会机器画画是个不太远的时间问题。如果你也能对这样的问题描述感到心旷神怡,就能体会为什么这才是最难的一步。

一个团队的定海神针,就是能把问题转化成目标函数的那个人——哪怕他连开源工具都不会用。花100万找到这样的人,可真是捡了个大便宜。

在机器学习领域,算法工程师脚下的进阶之路是清晰的:当你掌握了工具、会改造模型,进而可以驾驭新问题的建模时,就能成长为最优秀的人才。沿着这条路踏踏实实走下去,100万年薪并不是遥不可及的目标。

脚注请查看【阅读原文】。


作者:刘鹏

360集团架构师。互联网大数据与商业化专家,所著《计算广告》为业界第一本专著,被BAT、小米、搜狗等公司高层联名推荐,成为各大互联网公司数据与商业化部门广泛采用的教程。曾担任多家公司大数据与商业化战略顾问。

bmchs@139.com

登录查看更多
7

相关内容

在数学和计算机科学之中,算法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。 来自维基百科: 算法
【干货书】高级应用深度学习,294页pdf
专知会员服务
153+阅读 · 2020年6月20日
专知会员服务
171+阅读 · 2020年6月4日
《深度学习》圣经花书的数学推导、原理与Python代码实现
生物数据挖掘中的深度学习,诺丁汉特伦特大学
专知会员服务
67+阅读 · 2020年3月5日
算法与数据结构Python,369页pdf
专知会员服务
162+阅读 · 2020年3月4日
缺失数据统计分析,第三版,462页pdf
专知会员服务
108+阅读 · 2020年2月28日
谷歌机器学习速成课程中文版pdf
专知会员服务
145+阅读 · 2019年12月4日
年薪48万的程序员,他究竟做对了什么?
机器学习算法与Python学习
7+阅读 · 2018年12月28日
年薪40万AI工程师必备的能力项,你达标了吗?
算法与数据结构
3+阅读 · 2018年4月11日
机器学习不能做什么?
引力空间站
5+阅读 · 2018年3月28日
一个年薪30万的应届生告诉你应该如何学“算法”!
全球人工智能
4+阅读 · 2018年1月23日
深度学习,给自己一个年薪50万的工作机会!
全球人工智能
3+阅读 · 2018年1月10日
Compositional Generalization in Image Captioning
Arxiv
3+阅读 · 2019年9月16日
Implicit Maximum Likelihood Estimation
Arxiv
7+阅读 · 2018年9月24日
Meta-Learning with Latent Embedding Optimization
Arxiv
6+阅读 · 2018年7月16日
Arxiv
9+阅读 · 2018年3月23日
Arxiv
4+阅读 · 2018年1月15日
VIP会员
相关VIP内容
【干货书】高级应用深度学习,294页pdf
专知会员服务
153+阅读 · 2020年6月20日
专知会员服务
171+阅读 · 2020年6月4日
《深度学习》圣经花书的数学推导、原理与Python代码实现
生物数据挖掘中的深度学习,诺丁汉特伦特大学
专知会员服务
67+阅读 · 2020年3月5日
算法与数据结构Python,369页pdf
专知会员服务
162+阅读 · 2020年3月4日
缺失数据统计分析,第三版,462页pdf
专知会员服务
108+阅读 · 2020年2月28日
谷歌机器学习速成课程中文版pdf
专知会员服务
145+阅读 · 2019年12月4日
相关资讯
年薪48万的程序员,他究竟做对了什么?
机器学习算法与Python学习
7+阅读 · 2018年12月28日
年薪40万AI工程师必备的能力项,你达标了吗?
算法与数据结构
3+阅读 · 2018年4月11日
机器学习不能做什么?
引力空间站
5+阅读 · 2018年3月28日
一个年薪30万的应届生告诉你应该如何学“算法”!
全球人工智能
4+阅读 · 2018年1月23日
深度学习,给自己一个年薪50万的工作机会!
全球人工智能
3+阅读 · 2018年1月10日
相关论文
Compositional Generalization in Image Captioning
Arxiv
3+阅读 · 2019年9月16日
Implicit Maximum Likelihood Estimation
Arxiv
7+阅读 · 2018年9月24日
Meta-Learning with Latent Embedding Optimization
Arxiv
6+阅读 · 2018年7月16日
Arxiv
9+阅读 · 2018年3月23日
Arxiv
4+阅读 · 2018年1月15日
Top
微信扫码咨询专知VIP会员