截至2018年,软件工程师数量大幅增长,现在美国已经有超过100万名开发工程师,并且开发者的数量在一直持续增长。近几年,机器学习飞速发展,越来越多的自动化以及决策的问题,都在使用机器学习进行处理,机器学习工程师数量也将迎来快速的增长。
机器学习,在无法用规则描述的情况下,通过学习,做出决策:通过给定的数据集进行训练,当遇到新的输入时,它就知道如何去决策。
实现这些机器学习模型与构建一个大型的分布式系统又有何差异?其实并没有太大的差异,面对他们的心态相同,只是专业不同而已。
软件工程师——构建数据网络
数据流的处理是所有大规模软件项目的关键,软件工程师需要选择正确的算法,选择正确的开发语言,正确的层级的软件子系统或组件。
软件工程师都会在语言、数据结构和算法的基础上进行开发工作。
- 语言:在开发中,语言是软件工程师的基础。当你对不同的语言进行研究学习,会了解到更多的语言特性。Python的下游决策让程序具有更大的动态性,所以他非常受欢迎。
- 数据结构:不同的数据结构,在计算机中,运行效率都是不一样的。——你需要更快的数据访问速度吗?使用学习工具进行快速后处理?或者是做一起其它事情?不同的语言有不同的特性可以用来处理特定的问题,一个好的软件工程师会像外语一样精通这些编程语言。
- 算法:在技术面试中,排序、搜索等基础算法非常常见,它们在程序中会有大规模的应用。“时间复杂度O”是很古老的算法评估工具,它在算法部署到系统的过程中非常的重要。
软件工程师在面对自己复杂的系统,会显得沾沾自喜。
很多软件工程师对自己的系统都充满自豪,复杂的系统可以支持创建更多的功能,并且这也是他们炫耀的资本。但其实,这种做法是非常不明智的。简单为王,越是简单的系统,在大规模的项目中,越容易扩展。
Python 开发环境
好的软件工程师可以使用机器学习的任务变得更加容易。数据能够更加方便的拿到,最后的产物也能更有价值,也更统一。
机器学习工程师——构建学习网络
机器学习工程师通过提取有用的数据来构建决策,这些决策通常都是非线性的结果,很难以解释。但是他们通过数据,可以学习出来决策边界。
机器学习工程师主要是在模型、部署和影响方面进行工作。
- 模型:
对于机器学习工程师来说,他们需要知道什么时候应该使用深度模型,什么时候使用贝叶斯近似值?他们也需要知道哪些系统具有更好的通用性,可以在设备上进行微调。因此,这些能处理模型的专业人和拥有机器学习学位的人变成了众多科技公司趋之若鹜的人才。
- 部署:
现如今,许多公司在这方面也有自己的布局。像苹果公司,有大量的终端设备,需要能够将机器学习模型在终端进行部署,像Google和Facebook,模型的运行效率严重的影响着他们的成本。特斯拉凭借着它的汽车,在自动驾驶中占据着主导地位。
接下来,工程师将在不同的领域贡献他们的技术——针对特定任务的具体模型将会频繁的出现在我们的日常生活中,而且高效的模型不仅加快互联网的速度,也可以提高电池的寿命。
- 影响:
从道德的角度思考一下,机器学习很大程度上会出现用机器代替人工,如果我们的模型需要牺牲一部分人的利益呢?不仅如此,机器学习的训练数据会直接影响程序的运行结果,想像一下,你的训练数据现在只有100个公测用户的数据,你如何透明的收集更多的用户数据呢?无法透明地收集数据,需要有人对收集数据负责。
机器学习工程师的不足在于:他们的贡献多集中于网络层的结构和工具中。
当遇到问题时,机器学习工程师在调研具体的解决方案时,他们都希望能够以模块化的方式提取出有用的代码,用来快速启动自己的项目。我曾经试图将多个复杂的项目进行整合,采取一系列的措施,使它们在真实场景中能够使用。这也是我之前所说简单至上的原因。
大道至简
不管是软件开发工程师,还是机器学习工程师,他们都是使用便宜的机器,快速的迭代,生产出高价值的产品——花费少量的代价,并为每一个长尾用户提供高价值。这样一来,越是简单的方法,越具有优势,他们普遍存在且很容易使用——简单的学习算法更具通用性,能够更好的扩展。
与优秀的软件工程师一样,优秀的机器学习工程师更有创造力,效率更高。
最好的工程师不是在已有的框架中找寻优化的方案,而是从更多的方面找寻突破游戏规则的方法。在软件工程中,最简单的方式就是使用新的工具或者新的数据结构。在机器学习中,就是调整机器学习模型以便更好的部署。我相信,随着软件工程自动化的提高,机器学习工程师能推动公司的高速发展。
34 thoughts on “超高薪的机器学习工程师和现在的前后端们有什么不同?”