登录
  • #Amazon
  • #职场达人

亚麻‌‌‍‍‌‍‍‌‍‌‍‍‌‌‌‌‍‌‌‌‍‌‌‍‍‍‍‌‌‌‌‍经验分享续:ML scientist求职的有关问题

bpnetz
3021
16
前几天在一亩三分地发了一篇文章《亚麻8年经验分享:怎样做好机器学习(ML)科学家》,也提到过想写一篇关于ML scientist求职的文章。本文总结了一些我在日常工作和招聘过程中的想法,希望对有志于在AI方向工作的人们有所帮助,也为AI这个行业的公益尽一些绵力。

现在我们渐渐能够看到,上一个十年以“移动互联网”为主题的科技革命已经接近尾声,下一次的科技革命必然包含人工智能(AI或者ML)在各领域的大规模应用。这样就会产生对于ML scientist/engineer的海量需求。ML科学家是为了解决一个实际的商业问题(比如检测信用卡欺诈、个性化推荐商品、语言情感分析、物体识别等),负责ML模型设计-训练-评价的研究型技术人员;ML工程师是负责搭建平台实现模型的训练、部署和推断,以及相应数据管道创建的工程型技术人员。我个人认为,虽然招聘要求差不多,但是ML工程师和一般意义的SDE是有区别的,后者很多是负责创建和维护软件和服务(Service)的工程型技术人员,是最近三四十年计算机和信息技术革命的主力,就是俗称的IT行业。所以,建议SDE也要与时俱进地掌握一些ML的知识和技术。但是基于本人经验的局限性,本文主要谈的是ML科学家的求职。

首先第一个问题,既然未来对于ML科学家有海量的需求,那么这个行业必然从学校和其它行业吸纳大量的人才进来。是不是所有人都适合做ML科学家?我个人倾向于不是所有人都能做好ML科学家。这个主要和个人的教育背景、思维能力、编程水平密切相关的。比如说,如果一个人是学数学或者物理,思维能力非常优秀,但是没有计算机方面的修养(比如编程、数据库、算法设计),可能无法很好完成诸如数据处理、系统设计方面的任务;如果一个人是纯计算机人才,但是数学能力或思维能力有限,也无法理解各种模型的假设和理论背景(比如什么情况下用Logistic regression会效果不好),或者无法从实际的商业问题中正确抽象出数学模型;或者一个人能够理解各种模型的理论背景(比如attention的公式),也有很强的思维能力,但是不会编程,那就会既不能理解实现模型的代码,也没有能力实现自己的模型以及配套系统。但是如果一个人或多或少对上述方面都有掌握,那么他(或她)转ML科学家就会轻松一些,不需要补太多东西。这个就和武侠小说里修炼上乘武功一样,对于没有基本功的人来说很难,难道从扎马步开始练起吗?但是对于已经有很好基本功的高手,就像张无忌学会九阳神功之后,很快就能掌握乾坤大挪移和太极拳。当然事情也不绝对,如果一个人真的有志于此项事业,从头开始学,假以时日也是能成为一个好的ML科学家的。

第二个问题,各项技能需要达到什么样的程度?因为我们的目标是解决实际问题,不是做学术研究,也不是著书立说,所以学习的目标当以实用为主,而且可以在工作中逐步学习,并不需要什么都学好了再干。在招聘过程中,我一般会从实际问题出发,考察面试人对知识的理解深度,我分为四个层级:

不及格的一层是:满口新名词(buzz words),但不知所云。言必称reinforcement learning,deep learning,attention,word embedding,TF-IDF等。但是你问他,怎么算TF-IDF,他就答不上来了。这个人既不了解名词的实质,也不会使用这些方法解决实际问题,是不能录取的。打个比方,这就像一个人来到考官面前叫嚣,我会降龙十八掌、如来神掌、黯然销魂掌,结果被考官一掌打飞。而且这种做人做事的态度甚至要减分,相对于满口大话者,我反而觉得“知之为知之,不知为不知”的谦虚者更有潜力。这些做事的态度方法就是公司所称的leadership,即软技能。

勉强及格的一层是:调包侠、调参侠,但不知内核。这是能解决实际问题的最低要求。比如一个人可以拿来一些数据,调用Sk-learn的库或者PyTorch的库去训练一个Random forest或者Deep learning模型,也能通过暴力调超参数,让模型的名义表现达到还行的地步。但是此人第一不知道这些数据有没有质量问题,比如是否干净、有没有偏等等;也不知道这个问题是不是适合用Random forest,反正就会这一招;或者调模型调参数也没有方向,用暴力搜索法,不能把模型的症状和需要采取的行动对应起来。这不可能是好的ML科学家,也不能解决好实际问题。这个勉强及格的水平也不能满足很多公司的录取条件。不过,很多人在初学阶段都是这样,只是不能满足于这个阶段。当然,我觉得科技的进步(比如自动训练算法)和AI的普及,最终AI也会越来越傻瓜化,那时就是这项职业贬值的时候。所以,我建议有志者能追求高一点,能够理解模型的思想内核、使用条件等,不要 “练拳不练功,到老一场空”。

良好的一层是:能够理解模型的思想、实现细节和适用条件,能够处理实际应用中的各种异常情况。比如很多人都用过Transformer,但有多少人能够解释清楚attention的机理,又有多少人看过实现的代码?再比如,很多人都用过BERT模型,但是怎么样正确使用BERT,怎么样使用能够达到最好的效果,学习率怎么定?还有,模型训练完了发现测试的表现不好,应该怎么有计划地看症状调模型?所以,我建议大家在学习或者准备面试的过程中,能够用实际的数据训练一下真正的模型,并打开盖子,看看模型实现的代码,比如BERT模型的tokenization是怎么实现的。能够达到这一个层次的,才能真正满足很多公司ML科学家entry level的要求。不过,还需要在指导下完成实际项目,因为对于问题定义、项目流程、系统设计还是没有经验。但是ML方面的基础已经不错了,只要思维能力和编程能力不错,都能够成为比较好的实用型ML科学家。

优秀的一层是:过硬的基础加上工程实践的经验,可以成为项目中的主力干将,能够在没有指导的条件下,独立完成任务级(task)的工作,大约是ML scientist II级别。除了训练模型,还需要考虑一些实际的问题,比如是用online 模型还是offline模型,系统是否需要加cache等等。对于这些实际问题,许多新毕业的学生是不太了解的。当然,听说现在ML科学家供不应求,各大公司招人的标准有所降低。但是拿到offer的级别和能真正做事的级别是两码事。

再到上面就是思考问题的方法和领导力,senior,principal在技术上没有太多新的要求,上面更多是领导力和组织力的要求,但这已经超出本文的讨论范围。

下面列举一些我认为ML科学家需要的技能点(都是个人观点):

理论的实用化学习:

建议不要上来就看大部头的书,也不要去看太理论的视频。可以先看入门级视频,由浅入深。(网站不让发链接,就文字描述如下)

Machine learning:吴恩达 Coursera课程 Machine learning

Deep learning:B站 李沐《动手学深度学习》中文课程 含代码,一定要动手写代码

建立了基本框架和提纲性知识结构,再去看重要的论文原文。

编程和计算机:

计算机基础:Python3编程语言,数据结构,算法基础 (即LeetCode背后的知识)

Python库:包含Pandas (数据处理), Sklearn(ML), matplotlib (可视化)的库

简单数据处理:SQL, Excel pivot table,Shell script

大数据处理: PySpark或等价,DataFrame操作

Deep Learning: PyTorch或等价,熟悉主要类别的模型及应用,数据处理,优化算法等

思维方式相关的东西很多都内化在人的素质里面了,一半是天生一半靠努力,但是这个问题太宽泛,就暂不讨论了。技术型职业,基本功需要扎实,“拳不离手,曲不离口”,也要与时俱进,因为AI领域发展太快了。

最后也给初学者一点信心吧,其实我在工作中刚接触ML的时候,也是完全不懂。开会听别人说话,每个词都懂,但是连起来就是听不明白。比如embedding这个词,我好久都不知道是什么意思。也就是凭着一股好奇的精神和不怕死的勇气,边干边学,在战争中学习战争,在几年里慢慢积累起来一些实际经验。所以,我们要把每天吃的饭菜变成肌肉而不是肥肉,要把每天的工作变成经验而不是负担。

写作本文的目的只是把之前和朋友个别交流的想法稍作整理,希望能对更多人有用。才疏学浅,如果文中有说得不对的地方,还请批评指正。如果您觉得有用,也欢迎在下方评论交流。
16条回复
热度排序

发表回复