笔者有机械工程(ME)的背景,所获学位也都是机械工程领域的。读完本科,我在机器人学领域继续深造,数字变革也就是此时上演的。当时人们对“大数据”的熟知程度高于数据科学。机器学习令我着迷不已,我的职业生涯也自此转变航向,朝着数据科学发展。我称不上赤手空拳,因为学过机器人学,特别是编程方面,所以开头并不难。尽管如此,在深入数据科学的过程中还是困难重重。
无从下手使我非常迷茫,我该提升哪些技能,怎么写简历等等。如果你正阅读本文并且有着机械工程的背景,希望这篇回答对你有所帮助。
数据科学真的优于机械工程吗?
在考虑投资时间与金钱到网上课程或其他不可避免的行动前,停下来质问自己的动机也许比较好。如果只是因为它是21世纪最具吸引力的工作,那你很有可能在热情退去后产生迷茫和沮丧,而这期间你已经投入了许多精力。
在笔者看来,任何两种工作都不具有可比性,因为任何领域都有好有坏。但是,作为一名在两个领域都有所涉及的人,我想指出二者的一些特征,仅代表个人观点。
机械工程:
- 机械工程技术长时间以来都适用于工业。比如卡尔曼滤波(KalmanFilter)、PID控制器等。这些目前都供人使用,说不定比我的年龄还大。所以完成学业后,至少在理论知识方面,你无需经常学习更新自己的知识储备。(持续学习不是鹤立鸡群的关键)
- 工具有限:有用于机器控制、硬件设计等的标准工具基准。不过还是第一点中提到的,无需频繁更新知识体系。
- 不一定要求高学历。这是主观判断,因为事实是如果想得到合适的工作而且成为他人眼中的高水平机械工程师,有机械工程领域的长期工作经历比高学历更管用。一般来说硕士学位就足以助你追求机械工程的职业生涯。
- 有些无聊,因为大多数问题都是有定义的,也有测试完备的解决方案。工作的主要任务是选择合适的方案和工具。再者,机器是持续运转且可预测的,因而某个方案在较长一段时间都会起作用。
数据科学具有几乎完全对立的特征。
数据科学:
- 技术日新月异,我们需要应对的不只是AI、ML的变化,还有范围更广的软件工程,选择成为机器学习工程师的人要注意了。
- 工具多种多样。我几乎找不到一个仅凭单个设计就可执行的机器学习应用。也许你会说“好吧,这难道不是件好事吗?我只需找出至少一种方法然后一直执行就可以了。”不完全是,你不能只想着与他人竞争,还需和谐相处,因为你相中的工具也许无法让你与团队合作。
- 高学历是必备的,至少能让你的简历通过盲审。一项研究表明,数据科学家或机器学习工程师中只有不到30%的人没有获得硕士学位或博士学位。但有意思的是,同样的研究也显示出只有不到20%的数据科学家和低于5%的机器学习工程师具有计算机科学的学位。所以放心,你可能不需要再多读一个博士学位。
- 充满惊喜,因为问题分布的范围广,而且通常是人类互动层面的。毕竟,不管AI应用的领域在何处,它们终将为人类所用。而人类是不可预测的,所以解决方案就是职业寿命,一些方案可能会坚持到你离开公司,一些也许明天就得重新设计一番。
- 薪资待遇通常很诱人。
我并没有将上述的特征分为优点与缺点,理由是一切因人而异。比如你想要稳定的生活和按部就班的工作环境,那机械工程的无聊于你而言就不算缺点。
需要多久?
角色的转变需要好一段时间和大量的努力。任何一种方式的投资,你可能都会考虑利益反馈要多久。对某些人,也许是自然而然的过程,花上数月甚至几年的时间。对于其他人,可能是一会会的功夫再加上紧凑的安排就能加速实现。依我看,假如你已有一份全职工作,这通常需要花几年的时间,那如果是大学生的话时间会相对短点。主要在于有空闲时间来培养新技能。老话重谈,绝大程度上取决于你已经具备的,所以这个思路仅供参考。
怎么转变角色?
我特别喜欢“转变”这个词,从一种状态到另一种,而非“跳跃”或“开始新的历程”。换句话说,用机械工程的知识背景实现已拥有的,用战略性眼光培养数据科学所需的新技能,就可晋级。
数据科学的技能体系通常分为三大类:数学或统计、领域知识和编程。这部分笔者会按结构分别叙述,每一个都附有“可重复使用级别”——指机械工程知识在学习中可重复利用的难易程度。
数学或统计
可重复使用级别:较易
如果笔者对机械工程背景有一项最为自信的话,那就是对数学和统计坚不可摧的理解。回看自己的学术经历,数数上了多少堂有关数学的课,你可能会大吃一惊。问题是,每次跟朋友讨论在大学学数学时,总会听到“对,我还等着有朝一日能在现实生活中运用格林公式呢”。用不到的。而且那也不是数学的用武之地,它给了你“思想的佐料”,是解决问题的燃料。
举个例子,假如让你计算函数y = x^2+ 1的一阶导数,很简单是y = 2x。但如何用该技能赚钱(给高中生当家教不算)?
办法在此,关键不看数字或数学公式,而是数学背后的直觉。一阶导数会体现函数增长或降低的速度,函数为常数时,取值为0,其他区域就是非零情况。一起看看直觉的作用。
此时你就是一名工程师,一家汽车制造厂的生产经理向你抱怨说在开除检测员之前,还得支付他们好大一笔钱作为计算机械上螺丝数的报酬。如果该任务能自动化,就会余出20%的利润,检测员也不需要了。现在我们说的就是实实在在的金钱。
应用一阶导数过滤图像,你瞧!螺丝一闪一闪像星星一样。
现在可以开发一个计算机版本系统来换掉(可怜的)检测员,所有操作都基于基本的一阶导数直觉。
另一个例子:写下概率链式规则就是小菜一碟的事:P(A,B)=P(A|B)*P(B)。但有何用呢?
假设某一天企业高管问你:“今年需要耗资2000美元恢复服务器XYZ的可能性有多少?出故障的话你也该知道。”这个问题不会过时而且是数据科学家理应能够回答出的。回归问题后下定义:
· 事件A:要花2000美元恢复服务器
· 事件B:服务器出现故障
P(A|B)是需要花2000美元修复服务器的概率,前提是服务器确实坏了;P(B)是服务器出现故障的概率。一种快速决定概率却也不妥的方法可以是:
· P(A|B):搜寻公司过去用于修复服务器的所有费用清单,绘制柱状图然后截断2000美元,曲线下方的为2%,即费用超过2000美元的概率为2%。
· P(B):搜集公司过去的所有服务器日志,找到出故障的所有年份,即算作一整年。比如过去十年中,2年内坏了2次,所以就是20%。
(请注意异常检测是一个很大的话题,这里只是过度简化的方案,但笔者认为足够说明问题。)
那么,公司今年需要花2000美元修复服务器的最终概率为0.2 * 0.02 = 0.004,也就是0.4%。
掌握概率与统计101的任何人都能写出链式规则,但也仅限于将其“转变”为商业问题的答案,保你一个职位。
领域知识
可重复利用级别:中级
不像其他任何一种工程,工程师的技能和工作结果直接生成产品或提供服务给用户来消费,数据科学通常不会产生直接价值。这就是为何领域知识至关重要。数据科学家在运用AI模型前需要彻底了解商业知识。
一般,AI模型创造利益有以下几种形式:
取代人工繁琐的工作(生产更廉价)。比如RPA、自动生产控制、分类任务等。
提高生产力(更快更好)。比如生产优化、AI调度、劳动力优化、推荐系统等。
基于发现的可行的想法,调整或创建新的商业模型。比如通过基于调查数据的分析来寻求客户对产品的新用法,由此掀起新的竞争。
阻止可能的损失。比如安全AI、不稳定预测等。
可能都显而易见,但所有的这些都回答了一个简单的问题:
如何使用提出的AI模型创造利益?
不管是美元计算还是KPIs。第一次涉足数据科学的人也许对自己的首个项目忧心忡忡。方法的新颖度、模型的执行力、计算的复杂度、领先的程度或模型评估等都会成为担心的问题。对于完整的方案来说,它们都是缺一不可的。听起来很实用,确实如此。在状况出现之前、准备开始之时应该有个完美的答案。
转变不易,但身为一名机械工程师,真的不必担心如何创造价值。但你所拥有的,是训练良好的头脑,思考如何设计和优化生产过程:原理设计、生产控制、热力学、奥托循环、顶点设计等。它们都是过程!而且在某种程度上,商业模型本身就是个过程。有太多的不确定因素,毕竟是人为参与的(人类具有随机性),但你需要接受训练,把不确定性也归纳到模型中!
不过你带来的(以过程为导向的想法)仅仅是个“车轮子”,仍需要燃油使其跑起来。你是否曾好奇过住宅旁边的美食街是如何挣钱的?你身上的衬衫是怎么在地球的另一端制造然后又运到这里供你购买?在纸上把你的想法写下来,接着便会感到很惊讶。不说“气藏”(就是热力学中对一种盛装气体容器的花式叫法),而是“好库存”;不说“流体导管”,说“数据提取管道”;不说“流量”而是“数字转换率”。物理定律适应世间万物,在数字世界中亦如此。
编程
可重复使用级别:对于数据科学家:中级,对机械工程师:难
将二者区分开是因为在笔者看来,机器学习工程师是建模的核心软件工程师。所以对编程能力的要求非常高。该区分当然是相对而言的,毕竟肯定有数据科学家会写生产代码。
掌握编程技能会耗费大量的时间。“编程”很少被提及,因为没有涵盖整个软件工程的操作:网络搭建、APIs、CI/CD、Dockerization等,凡是想到的都算。很不幸,机器学习工程师的成长之路需要所有这些东西(这里假定数据科学家身处分析和可视化任务之中,也就是他们不用写生产代码。再重复一遍,仅主观臆断)。
TDS上有大量的在线课程和好的文章告诉你如何提升编程技能,所以笔者就不一一赘述了。但有一点想说的是:压缩这一的伟大概念,不只是面向对象程序设计,在学习方面它对我的帮助极大。
你几乎可以单独学习任何一项软件工程工具或技能,一个完善的软件应用可以将其拆解,分开来学习。这很棒,是机械工程做不到的。笔者也因此习得一种极其高效的学习策略:分开克服。我有无数的“文件夹”:python实例、spark实例、Docker实例、gRPC实例、k8s实例等。每一项含有最基本的工具代码文件夹都不超过5个。一旦掌握了这些数量庞大的“乐高积木”,设计方案框架将会其乐无穷。你可以随意塑造AI模型与其他组件交流。
注意需要费很大的功夫将所有的模块组合到一起,才可形成功能性应用,不然要软件工程师何用,人们自己就可以挑选模块然后用“通用”程序组合成期望的应用程序,如同在麦当劳自助点单亭下单。这是快速学习的一种高效方式。
离开机械工程后有两种工具是我不得不花大量时间学习的:git和SQL。这合情合理,因为在机械工程中,不用管理代码不用处理相关的数据库。那个时候对我来说,Dropbox就能满足代码分享,文件名附的有“backup_20080202”就可以用来控制版本,Excel可以用来制表。一切都是那么简单。所以我需要挑战git和SQL这场游戏。
git:我以前一直认为了解一些git命令行就会一路顺畅,直到需要跟同事一起合并代码(才发现不是这样)。所以笔者建议最好跟朋友做一些成对的编程项目:课程项目、兴趣项目,或者跟伙伴一起开发小型特色项目。做得越早,会越早意识到git不仅关乎版本控制,也会让自身水平越来越高。
SQL:依我看,使用什么版本的SQL并不重要,只要理解不同类型的连接知道怎么检查结果就好了。为什么?因为语法错误很明显,平台会显示“错误:无法将字符串类型转换为整数。”,询问无果,你会懂的。但连接都是“沉默的杀手”。使用的连接类型不对或者过于相信查询结果没有进行检查,你可能只会在管理员叫你并质问“荒谬”的表格时才发现问题的存在。比如将销售表与其他产品信息表连接在一起而不检查重复项,合并的表格就会有重复行。换句话说,一个卖掉的产品会出现多次,而且你所看到的是,销售额表明本公司是财富美国五百强,而非初创企业,没有人会在意你的报告。
结束语
长话短说,本文讨论了:
· 数学或统计:所有要求的基础训练都已经在教育过程中完成了。挑战是将知识储备于大脑中,并用于处理现实问题。
· 领域知识:体会AI应用的重要目的在于创造利益,帮助你转换不同的“镜头”看待商业模型。毕竟都是些过程。
· 编程:分开攻克。利用“封装”的特性快速学习。
学习旅途中这些让我收益颇多,笔者希望它们也会助你一臂之力。
在数据领域工作回馈是多方面的,但于我而言,是模型运用于产品、亲眼见证运行时的那一份喜悦,跟我制作机器人看到整体第一次动起来时的反应一样。
毕竟我们是工程师:
“要像个厉害的工程师一样做机器学习,而不是装成厉害的机器学习专家。”
祝你学习之旅愉快!