查看原文
其他

做算法是屠龙,做工程是狩猎,做数据是养猪!

2017-12-07 李烨 51CTO技术栈

近来一段时间,能明显感到,想入行 AI 的人越来越多,而且增幅越来越大。


缘起


为什么这么多人想入行 AI 呢?真的是对计算机科学研究或者扩展人类智能抱着无限的热忱吗?说白了,大多数人是为了高薪。


人们为了获得更高的回报而做出选择、努力工作,原本这是个非常正当的事情,但是关键在于:如何找对路径。


想要入行,总得知道这个行业里面都有什么样的岗位,分别是干什么的吧。


本文中,我们将从直观的角度,管窥一下 AI 领域中,几种不同技术岗位的:

  • 日常工作的状态。

  • 所需要具备的素质。

  • 职业发展路径。


我们不去看那些招聘启事上令人眼花缭乱的 title,而是从抽象层面,以工作内容、职责为准,来分类工业界直接的 AI 技术人员。


他们大致可以分为三个不同角色:

  • 做算法。

  • 做工程。

  • 做数据。

做算法


应用科研成果,解决实际问题


说到做算法,大家首先想到的可能是发明新的算法或者对算法进行改进。这是在学术机构或者几家定价大企业研究院中担任科研任务的科学家们的任务。


在工业界做算法的算法工程师(也有公司叫科学家),最基本的日常工作其实是:衔接学术成果与实际业务,在工程实践中利用最新科研成果来达到产品或服务在业务层面的提升。


或者,说得更通俗点,他们实际每天在做的事情是:读论文&实现之——确认最新论文中的阐述是否真实可重现,进一步确认是否可应用于本企业的产品,进而将其应用到实践中提升产品质量。


强学术背景要求


既然日常工作首先是读别人论文。那么作为算法工程师必不可少应该具备快速、大量阅读英语论文的能力。


如果要做算法,平均而言,大致要保持每周读一篇最新论文的频率。


光能读不行,还必须读懂论文,要读懂论文,就需要:

  • 科研能力:或云学术研究方法,能够通过参考资料、搜索及以往的知识积累学习掌握论文内容的能力。

  • 系统数学知识:足够深入的微积分、线性代数、概率统计的知识。最新的论文,没有被时光检验过。

    阅读时,需要关注公式的推导过程。否则,万一出现数学推导有错,导致了过于喜人的结果,却无法在实践中重现,岂不空耗时力?


也许这就是为什么,到目前为止,笔者所听闻和见过的算法工程师都是名校相关专业博士的原因。


经过几年强化学术研究训练,这些博士们,就算英语综合水平不过是 CET-4,也能读得进去一篇篇硬骨头似的英语论文!


对业务负责的创新型人才


很多时候,单论具体的手头工作,做算法的算法工程师和下面要说到的做工程的机器学习工程师相差并不大,他们两者都会花费很多时间去训练模型。


但是,做工程的可以把关注点放在模型本身,只要交付符合评价指标要求的模型就可以了,而做算法的人必须对业务提升负责!


如果交付的模型虽然整体质量提升了,却不能提高用户体验,或者在某几个用户非常关心的 corner case 上总是出错。


机器学习工程师可以通过加人工干预,做几个 workaround 把这几个 dsat 绕过去,但算法工程师则有责任从算法角度解决问题,而不是随便打人工补丁。


在实践过程中,算法工程师,即使自己不发明新的算法,不提出新的算法优化方法,也得去尝试最新算法的使用或者把已有算法用出新花样来。


毋庸置疑,这是一个有着必然创新性的角色。因此,这个角色必然不适合绝大多数人!

做工程


“调参工程师”


这一角色比较有代表性的岗位是:机器学习工程师,常常被戏称为调参工程师。


他们使用别人开发的框架和工具,运行已有算法,训练业务数据,获得工作模型。


工作期间他们可能需要一些处理数据、选取特征或者调节参数的手段,不过一般都有据可循,并不需要自己去发明一个 XXXX。


TIP:很多 title 写的是“人工智能/机器学习/深度学习算法工程师”的招聘岗位,其实招的是做工程的人。不要执着于辞藻,看清楚具体职责和工作内容。


程序员的分支


说到底,机器学习工程师是广义的软件工程师(程序员)的一个分支。


说起来,每一个程序员都有一个领域。不过,不同领域在不同时期热度不同,发展趋势不同。AI 产品开发,是广义软件开发的一个领域,如今正好在热点上。


开发人工智能产品的程序员,也还是程序员。不过是需要懂一定程度的领域内理论知识而已,就和以前开发 PCI 协议栈要懂 PCI 协议,写网卡 driver 要懂 TCP / IP 的道理是一样的。


编码能力是基础


既然是程序员,首先就不能丢掉程序员的基本素质:编码能力和基础算法能力(不是前面说的那种算法,而是链、树、图的构建、删除、遍历、查找、排序等数据结构里讲的那种算法),这是最起码的两个要求。


当然,既然在 AI 领域进行开发,一定程度的机器学习/深度学习知识还是有必要掌握的。


此外,做工程也得读论文,不过和做算法不同,做工程读论文的一般目的不是尝试最新方法,而是用已知有效的方法来解决实际问题。


因此,做工程的,读的经常是“旧”论文,或者相对学术含量低一些(不那么硬)的论文。


在阅读时,主要是为了直接找到某个问题的处理方法,故而可以跳读。对于其中的数学公式,能够读懂头尾也就可以了。论文阅读频率和学术深度的要求,都比做算法低得多。

做数据


此处说得做数据并非数据的清洗和处理——大家可以看到做工程的岗位,有一部分工作内容就是 ETL 和处理数据,此处说的做数据是指数据标注。


数据人工标注的必要性


简单说,数据标注就是:给各种各样的数据(文本、图像、视频、音频等)打上标签,使原数据(raw data)变成标注数据(labeled data)——标注数据是各种有监督学习的必要条件。


虽然机器学习中有无监督学习,但在实践领域被证明有直接作用的,基本上还都是有监督模型。


近年来,深度学习在很多应用上取得了巨大的成功,而深度学习的成功,无论是图像、语音、NLP、自动翻译还是 AlphaGo,恰恰依赖于海量的标注数据。


无论是做 ML 还是 DL 的工程师(算法&工程),后者尤甚,都共同确认一个事实:现阶段而言,数据远比算法重要。


固然,目前有多种技术用以在标注的过程中辅助人工,以减小工作量及降低人工标注比例,但至今没有能在应用领域完全自动化标注的技术出现。


换言之,在看得见的未来之内,人工标注数据仍然是 AI 落地的必要和主流。


人工智能的“勤行”


好消息:数据标注工作几乎没有门槛。一般任何专业的大学毕业生,甚至更低学历都能够胜任,上手不需要机器学习之类的专业知识。


坏消息:这样一份工作是纯粹的“脏活累活”,一点都不 cool,起薪也很低。所以,虽然这是一件谁都能干的工作,但是恐怕,没几个人想干。


就单个任务而言,数据标注是一项很简单的工作,它的难点在于:


数据一致性


指所有数据的标注原则都是一样的。如果一份 raw data 由多个人同时标注,就算是反复宣讲标注原则,每个人也都有自己的理解和侧重,很难保证一致。甚至即使是将所有数据交给一个人,也可能在不同时间段理解不同。


很多公司出于对数据标注工作的不重视(正好与对算法的过分重视相映成趣),采取一种暴力解决方案试图消除不一致:让多个人(比如 3 个)同时标注同一份数据,一旦出现不一致,就采用简单多数法,取最多人一致认定的那种结果。


这种方案对于粗标数据还可以起到一定作用,但如果是精标,则往往连多数人一致的情况都难以出现。如果三个人所标结果完全不一样,那么这条数据也就失去了标注价值。


在现实中,经常会出现同一份数据因为质量过低,被要求重复标注的情况出现,费时费力。


与业务的集合


业务需求时常变动,技术解决方案变更更多,而每一次变更都可能引起数据标注策略的变化,进而要求对数据重新标注。


目前,由于人工智能的落地点还比较有限,主要集中在大公司里,它们都有各自的标注团队,业务要求也相对稳定等原因,此种挑战尚不明显。


一旦未来人工智能在各个领域全面铺开,很可能需要的是针对具体企业、具体业务,不断变更的标注需求。


如何应对快速变更的业务需求,同步更新标注结果,将是一个在 AI 真正服务于大众时全面爆发的问题,偏偏现阶段还未引起足够重视。

选一条适合自己的入行之路


认清形势,脚踏实地


寻求入行的人虽多,能真的认清市场当前的需求,了解不同层次的人才定位,并结合自己实际寻找一条可行之路的人太少。


上面我们介绍了 AI 领域内的几个工种,打个不太恰当的比喻:

  • 做算法是屠龙,仗剑江湖,天外飞仙。

  • 做工程是狩猎,跃马奔腾,纵酒狂歌。

  • 做数据是养猪,每天拌猪食清猪粪,一脸土一身泥。


人人都想“做算法”,做个独行天涯的剑客多酷啊,更何况还有那么高的薪水!


却不想想:大公司里研究院里有那么多读了十几二十年论文始终站在 AI 潮头的资深研究人员。


想要与他们为伍做算法,要么有足够分量的学术成果,要么解决过大用户量产品的实际业务问题——你占哪一条呢?


仅仅是学过课程,做过练习或实习性质的小项目,是不足以去做算法的。


现实当中能屠龙的人又有几个?留给人去屠的龙又有几条?养猪虽然没那么高大上,有猪肉吃是实实在在的。


好高骛远只会虚掷光阴,脚踏实地才能实现理想。


“算法力”的自我测试


对于一心想做算法的同学,我建议大家先自我测试一下自己的算法力。


在此先推荐一个网站,所有有志于算法的同学必须要知道:https://arxiv.org ——这里有多个学科(包括 computer science)的大量论文,里面大部分都是尚未正式出版的最新成果。


目前真正在做算法的人,都在大量阅读这个网站上的文章。


测试“算法力”有个很简单的验证方法:从上述网站里找一篇论文(比如这篇:Dynamic Routing Between Capsules),从头到尾读一遍。


现在不懂没关系,至少先试试在不懂的情况下能不能把它从头到尾一字不漏的读完,有不认识的字查字典。


如果这都做不到,还是当机立断和“算法”分手吧。既然注定无缘,何必一味纠缠?


先当程序员再选领域


在 AI 成为潮流的今天,只要能找到一个在 AI 方面相对比较前沿的企业,进去从做一名普通程序员开始吧。


即使本来开发的产品不属于 AI 范畴,未来通过在旧产品上应用新的 AI 技术或者在公司内部 transfer 到做 AI 产品的 team,都可能获得入行的机会。甚至具体知识的掌握,你都可以在入职后慢慢积累。


对于大多数 AI 工程人员,这可能才是一条自然的入行之路。


但这一切的前提是:此人首先得是一个合格的程序员!而不是本末倒置,虽然花功夫学了几个模型、算法,却连最基本的编程面试题都做不对。


市场对数据标注的潜在需求


高质量的标注数据对高质量模型的影响非常直接。


一群年薪百万起步的算法工程师耗费经年的成果,对于模型质量直接的影响甚至比不上一个靠谱标注团队一两个月的精心标注。对模型的影响尚且如此,更何况是商业价值。


此时此刻,AI 在风口浪尖,大公司、拿了巨额风投的独角兽 startup,一个个拿出千金市马骨的气概,将不可思议的高薪狠狠砸向 AI 领域的顶尖学者,顺便捧起了一批年轻的博士,也引来了世人的垂涎。


这种情形能维持多久?商业企业能承受多少年不挣钱只烧钱?待潮涌过后,行业回归理性,模型还是要用来挣钱的。


到了那个阶段,大小企业不会去算成本收益吗?他们会意识不到将资源投入数据和算法的不同产出比吗?


企业为了创造利润应用 AI 技术,算法工程师不是刚需,而数据标注这个人工智能领域的“勤行”,人工智能蓝领,一定是刚需!


一切标注工作的难点和潜藏的风险,也就是这项工作的潜力和从事这项工作未来职业发展的可能性所在。


各工种的职业发展


笼统而言,一个技术岗位的 Career Path 总有两条路径:

  • 领域专家。

  • 管理者。


做算法的岗位,虽然也确实有不少人转向管理,但因其客观的技术深度和学术积累的习惯,比起其他两种角色,更容易成为领域专家。


做工程的岗位,作为程序员的一部分,整体的职业发展和普通程序员并无太大区别。


当然也有可能成为领域专家,不过在我们现在的环境里,恐怕转向管理对于大多数人是更优的选择。


当然,做工程的,如果真的对技术和算法感兴趣,深入下去做算法,最终成为领域专家也完全可能。


而做数据的岗位和所有门槛低的工种一样,要面临如何从极大量基数资质类似的人员中脱颖而出的问题。


由于 AI 领域的特殊性,还需要面对如何与越来越多的自动化标注技术共处的问题。


因此,笔者个人建议的数据标注职业提升路径:经验+业务+管理。大致步骤为:

  • 通过实践积累数据标注的工作经验。

  • 深入理解业务需求并将其体现到数据的标注结果中。

  • 管理标注团队达到高效的标注结果与业务变更 align。


未来也许会出现一个“数据经理”之类称谓的职位:其职责以负责提供高质量标注数据为基础,技术上衔接工程领域的 ETL 和数据处理,产品上对接业务,带领团队为公司产品或服务的 revenue 提供直接贡献。


作者:李烨

编辑:陶家龙、孙淑娟

来源:转载自小象(ID:AIReport)微信公众号

李烨,现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师。先后参与聊天机器人、大数据分析平台等项目的开发,个人微信公众号:yuesiyuedu。

精彩文章推荐:

百万骑手“火速送达”背后的人工智能应用实践!

六个人如何运维一万台服务器?

从“菜鸟”码农到“资深”架构师,我到底经历了什么?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存