点击关注,抢跑AI世代
【AI世代编者按】美国科技博客TechCrunch日前阐述了当前机器学习的发展现状,由于很多大型科技公司仍在使用传统技术,而没有充分利用深度学习,因此这目前还处于进化阶段,算不上真正的革命。
以下为AI世代(微信号:tencentai)编译整理的原文内容:
大型科技公司都在积极围绕人工智能和机器学习进行业务调整:谷歌现在的战略是“AI为先”,Uber也在全面部署机器学习,各种各样的内部人工智能实验室相继涌现。
他们都在投入大量的资源和精力,希望说服整个世界相信,机器学习革命已经启幕。他们宣称深度学习是这场革命的关键突破,正是这种技术支撑了新的无人驾驶汽车、视觉助理和各种各样的新颖技术。
尽管这项技术令人们异常兴奋,但从实践角度来看,未来化程度却并不算高。
机器学习领域的软件工程师和数据科学家目前使用的很多算法和工具与几年前完全相同。
也就是说,多数人工智能应用使用的仍是传统机器学习模型,而非深度神经网络。工程师仍在使用传统的软件工程工具来开发机器学习,而且没有起到效果:将数据引入模型并生成结果的管道其实是由分散且互不兼容的信息拼凑而成的。然而,随着大型科技公司平滑这一流程,针对机器学习构建配有端对端功能的新平台,变化也悄然而至。
机器学习分成三个阶段——数据处理、模型构建以及部署和监控。中间层就是帮助机器学习利用输入的数据学会预测的管道。
这种模型也是“深度学习”所在的地方。深度学习是机器学习算法的一个子类,可以使用多层神经网络学习输入和输出之间的复杂关系。神经网络的层次越多,所能捕捉的复杂性就越高。
传统的统计型机器学习算法(例如不使用深度神经网络的算法)在捕捉训练数据的信息时,能力较为有限。但这些较为基础的机器学习算法足够应对很多应用,因此把深度学习模型的复杂性增加进来往往有些多余。所以,即便我们身处深度学习的浪潮之中,仍然可以看到软件工程师在机器学习工程中广泛使用这些传统模型。
但作为这个三明治流程的“面包”,那些负责把一切凑在一起的东西却是在训练机器学习模型之前和之后发生的。
第一个阶段需要清理和格式化海量数据,以供模型使用。最后一个阶段需要仔细部署和监控这个模型。我们发现,人工智能的多数工程时间其实都没有花在机器学习模型的开发阶段,而是花在筹备和监督这些模型的过程中。
尽管大型科技公司的人工智能实验室都在集中精力开发深度学习技术,但这些公司的多数机器学习应用并不依赖神经网络,而是使用传统机器学习模型。最常见的模型包括线性/逻辑回归、随机预测和提升的决策树。科技公司的许多服务都使用这种模型,包括好友推荐、广告定向、用户兴趣预测、供需模拟和搜索结果排序。
工程师用来训练这些模型的一些工具同样很过时。作为最常用的机器学习库中的一个,scikit-learn是在10年前发布的。
完全有理由使用这些更简单的模型,而不使用深度学习模型。深度神经网络很难训练,需要耗费更多时间和计算资源(往往还需要不同的硬件,也就是GPU)。想让深度学习真正起作用并非易事——目前仍然需要借助繁杂的人工程序,这既需要直觉,还要不断试错。
借助传统机器学习模型,工程师用在模型训练和调节上的时间相对较短——通常只要几个小时。归根到底,如果深度学习所能带来的精确度提升不太明显,那应该更加重视可扩展性和开发速度。
所以,具体到机器学习模型的训练过程,传统方法效果也不错。但这种方式却无法应用到那些将机器学习管道结合起来的基础设施。使用这些传统的机器学习软件工程工具可能提高错误率。
作为机器学习管道的第一阶段,数据收集和处理阶段就凸显出这一点。虽然大公司显然拥有海量数据,但数据科学家或工程师却必须清理数据才能使之发挥作用——包括查证和合并不同来源的重复内容,对指标进行标准化处理,设计和认证各种功能。
在多数公司,工程师都要把SQL和Hive请求结合起来,还要用Python脚本来聚合和格式化一个或多个数据来源的数百万数据点。这通常需要通过人工来处理,往往要耗费数天时间。其中一些可能是重复性工作,因为很多公司的流程都是分散开来的——数据科学家或工程师往往会使用离线脚本或Jupyter Notebooks来处理数据。
另外,科技公司的庞大规模混合了各种错误,因此要在生产过程中仔细部署和监控模型是不切实际的。
然而,作为传统软件测试的支柱,传统的单元测试其实并不适用于机器学习模型,因为机器学习模型的正确输出无法事先知晓。毕竟,机器学习的目的是让模型学会利用数据预测,而不需要借助工程师通过代码给出的明确指令。所以,工程师放弃了单元测试,而是采用了结构化程度更低的方法:他们手动监控控制面板,并为新的模型编写警报。
真实数据的变化也可能导致受过训练的模型准确性降低,所以工程师每天或每个月都要用新的数据对生产模型进行重新训练,具体要取决于应用模式。但现有工程基础架构里面缺乏对机器学习的明确支持,可能导致开发中的模型和生产中的模型发生脱节——常规代码的更新频率大大降低。
很多工程师仍然借助基本的方法将模型部署到生产中,例如保存一个受过训练的模型的序列化版本,或者将权重因素应用到文件之中。工程师有时候需要用不同的语言或框架重建模型原型以及数据管道的各个部分,从而从事生产基础设施的开发。但凡与机器学习开发流程的任何一个阶段不兼容,都会产生错误。
为了解决这些问题,有几家拥有足够资源开发定制工具的大公司,已经投入了时间和技术来制作自己的机器学习专用工具。他们的目标是开发端对端无缝机器学习平台,从而兼容他们自己的工程基础设施。
Facebook的FBLearner Flow和Uber的Michelangelo都是这样的内部机器学习平台。有了这样的平台,工程师就可以用直观的用户界面构建训练和验证数据集,把花在这个阶段的时间从几天缩短到几小时。之后,工程师还能通过点击按钮来训练模型。最终,他们还能轻而易举地监控和直接更新生产模型。
Azure机器学习和亚马逊机器学习等服务都是一些公开选择,可以提供类似的端对端平台功能,但只能与其他的微软或亚马逊服务整合,用于存储数据和管道的部署组件。
尽管这些科技巨头都在利用机器学习改进自家产品,但多数公司仍要面临重大挑战,流程中也存在效率低下的现象。他们仍在使用传统机器学习模型,而非更加先进的深度学习,而且仍在依靠不太适合机器学习使用的传统工具基础设施。
幸运的是,随着这些公司逐渐关注人工智能,他们都在投资开发专有工具,以便改善机器学习的效果。借助这些内部工具,或者能够与其现有基础设施紧密整合的第三方机器学习平台,这些组织便可实现人工智能的潜力。(编译/长歌)