今天我们就来谈谈机器学习工程师和软件工程师的区别。
截至上半年,软件工程已经激增,在国内拥有超过万名员工,并且预计增长不会放缓。接下来就是机器学习工程师,解决自动化或决策问题。
机器学习是一种在不确定的情况下做出决策的研究:给定训练数据集,当看到新事物时应该如何行动。
鉴于机器学习(尤其是深度学习)在整个行业中的普遍性,越来越多的工程师每天都在部署这些工具。使用深度学习可为公司带来巨大利润的工具列表实际上是无止境的:搜索推荐,语音到文本,语音助手,面部识别,广告等等。
实现这些模型与构建大型分布式软件系统的角色有何不同?心态相似,但专业不同。
软件工程-建立数据网络
数据流是任何大规模软件项目的关键。工程师必须选择正确的算法以在本地设备上部署,使用哪种语言开发(以及他们使用哪种语言)以及软件堆栈中的多少层。
软件工程师最终将在语言,数据结构和算法领域工作。
语言:开发和测试语言是软件工程师的工作手段。他们对不同语言的功能都有深刻的了解。而Python之所以受欢迎,是因为它会让决策变得更加灵活简便。数据结构:不同的数据结构下能够确定计算机操作的速度——我们的需求是否是要快速访问数据(哈希表)?或者是使用学习工具(张量)进行快速后处理?或者是其他东西?不同的语言具有不同的属性可利用。厉害的软件工程师一般都需要精通数据结构。算法:标准算法是技术(排序,搜索等)的基础,因为它们确实具有规模。“BigO”表示法是一种古怪的学习工具,但是当在已部署的系统上工作时,这些想法会大量印证实现。软件工程师最致命的一点:偏执于自己编写的系统的复杂性。
Python开发人员环境
好的软件工程项目最终将使机器学习的任务更容易。数据将更容易获得,而且对于产品迭代和价值也将更加统一和提升。
机器学习工程-建立知识网络
机器学习工程师正在提取记录的知识(数据)并创建决策边界。决策边界通常是非线性的,并且通常难以解释(例如交易代理或机器人计划程序),但是它们本质是由数据告知的决策边界。
机器学习工程师在模型,部署和影响方面进行思考。
模型:什么时候应该使用深度模型或贝叶斯近似值?对于机器学习工程师来说,了解哪些系统具有更好的通用性,可以在设备上进行微调并且可以解释是关键。此外,模型专业知识才是ML博士成为科技公司如此宝贵的人才的原因。部署:许多公司已在此领域确定了自己的定位。设备规模的人工智能是消费电子公司(Ahem,Apple)当前的推动力,而模型效率则主导着数字巨人的成本。(Facebook,Google等)。特斯拉以无与伦比的云车更新在自动化市场上独占一方。接下来是各个工程师的部署方式——针对特定任务的更具体的模型将在我们的生活中利用起来,而模型的效率将改变互联网速度和电池寿命。影响:道德问题。例如正在部署的模型是否以牺牲另一个小组的利益而使一个小组受益?ML工程师所需的功能、选择和训练的数据集将反映在产品中。考虑如果一个数据集是从个私密用户的样本中收集的,那么当它碰到数百万不知情的眼睛时,它将如何转换?数据透明性落后,个人需要负责。机器学习工程师的不足之处:将他们的贡献集中在过多的层次结构和工具中。
在调查实施方案时,其他机器学习者希望能够以模块化的方式提取和镜像有用的代码,从而实现快速发展。我试图利用多个内部被困在太多层中的最新项目,以采取下一步措施,使它们在现实世界中具有规模影响力——这就是为什么简单至上的原因。
各种模型的集合。(1)高斯过程,适合物理优化的设计变量;(2)用于预测Lorenz系统(经典混沌系统)的深度动力学模型,以及(3)用于预测长期机器人轨迹的不同类型的深度神经网络。
简单至上
这两个工程角色都利用了在数字域中进行迭代便宜且快速的特质——每个边缘用户以低成本增加了高价值。这样一来,最简单的方法往往会占据主导地位,因为它们是如此普遍——简单的方法在学习中具有更好的通用性,在软件中具有更好的接口。
就像最好的软件工程师一样,最好的机器学习工程师将具有创造力和效率。
最好的工程专业学生不会在给出的建议框内进行优化,而是寻找可以完全改变游戏本质的裂缝。在软件工程中,即使用新工具和数据结构的形式,在机器学习工程中,将调整新的模型类型或如何部署它。我怀疑随着软件工程的自动化程度越来越高,机器学习工程师将推动许多有意识拓展AI的公司发展。