200 个工具分析机器学习十年:前途未卜、工程师是核心( 三 )


对于机器学习来说 , 使用更多、更好的数据 , 能够实现更好效果的应用程序 。大多数的公司都将重点放在数据优化上 , 而不是机器学习算法的优化上 。由于数据的快速变化 , 我们的机器学习应用程序也需要快速的进行发布 。在很多机器学习应用的场景中 , 你需要每天都进行模型更新 。
机器学习算法的大小也是一个问题 。一个大型的 BERT 模型有 340M 的参数 , 整个算法大小约为 1.35GB 。即使这个模型可以在你用户的设备(如手机)上安装 , 这个模型在新的样本上进行推理所花费的时间也有可能使得应用程序毫无用处 。举个例子:在使用输入法的时候 , 算出建议字符花费的时间比你手动输入的时间还长 , 那自动完成的模型就一点用都没有 。
Git 使用了一行一行的比较形式 , 比较两个文本文件的差异 , 因此它对传统软件程序开发非常友好 。然而它并不适用数据集以及模型之间的差异比对 。又如 Pandas 能够很好地进行数据处理 , 但是它不支持在 GPU 上运行 。
CVS 等基于行的数据格式 , 非常适合在数据量小应用程序中使用 。但如果你的应用程序有许多功能 , 并且这些功能只需要使用数据中的一个子集 , 这种情况下 , 使用基于行格式的方式仍需要加载所有的数据 。PARQUET 和 OCR 等列格式的工具 , 针对上述的场景进行了相应的优化 。
机器学习产品在发布上也面临着很多问题:

  • 监控:如何知道你的数据分布发生了变化 , 你需要重新训练模型?例如:Dessa , Alex Krizhevsky 基于AlexNet 开发的 , 在 2020 年被 Square 收购;
  • 数据标签:如何快速的给新的数据打标 , 或将已经存在的数据进行重新打标来支持新的模型训练?例如:Snorkel;
  • 持续集成、持续交付:如何保证你的模型在每一次修改后都能够按照预期的进行工作 , 你不可能花费好几天的时间去等待训练收敛的结果?例如:Argo;
  • 交付:如何打包并发布你的新模型?例如:OctoML;
  • 模型压缩:如何将你的机器学习模型进行压缩 , 让他能够在客户的设备上运行?例如:Xnor.ai 这家公司 , 由艾伦研究所拆分出来 , 专注模型压缩的初创企业 , 在 2018 年 5 月 , 估值 6200 万美元 , 获得 1460 万美元的融资 。在 2020 年 1 月 ,  苹果以 2 亿美元收购了它 , 并关闭了它的网站 。
  • 推理优化:如何提高你的模型推理速度?多步融合?低精度?减小模型可以使推理速度变得更快 。例如:TensorRT;
  • 边缘设备:硬件设计让机器学习算法能够更快速地运行在更廉价的设备上 。例如:Coral SOM;
  • 隐私:如何使用用户的数据进行训练并且保证用户的隐私?如何让你的应用程序满足 GDPR ?例如:PySyft 。
我根据这些机器学习工具主要解决的问题绘制了下图:
200 个工具分析机器学习十年:前途未卜、工程师是核心

文章插图
工具数量
这些工具很大一部分都聚焦在数据处理上:数据管理、标记、数据查询、数据处理、数据生成等 。这些数据处理工具旨在构建一个平台 , 数据处理是项目中资源最密集的阶段 。如果有人在你的平台上 , 给你提供数据 , 你就能很容易为他们提供预先构建的训练模型 。
建模和训练模型主要是框架来实现的 。而深度学习框架竞争已经逐渐趋于冷却 , 现主要是 PyTorch 和 TensorFlow 之间的竞争 。以及一些基于这两个框架的更高层次的框架之间的竞争 , 它们围绕这两个框架来处理特定的任务:NLP 与 NLU 以及多模态问题 。这些框架都是分布式训练框架 。这还有一个新的框架 JAX , 很多讨厌 TensorFlow 的 Google 开发者都使用它 。
现在有很多独立的工具用于一些实验跟踪 , 并且流行的框架中都内置有他们自己的实验跟踪的功能 。超参数是一个非常重要的功能 , 有些人注意到他们也不奇怪 , 但是他们似乎都没有抓住重点 , 超参数的瓶颈并不是设置参数 , 而是高效的计算能力 。
另一个没有被解决的重要问题是在部署与服务上 , 在这一方面缺乏解决方案的原因在于研究人员与运维人员之间缺少沟通 。在有能力从事人工智能研究的公司中(通常是大公司) , 研发团队与运维团队几乎都是分开的 , 两个团队之前的合作只能通过(产品、项目)经理来实现 。而在小公司中 , 员工能看到全局 , 但是他们会受到产品需求的限制 。只有少数初创公司 , 这些公司聘请了有经验的运维工程师和有经验的研究人员一起协同办公 , 成功的解决了这一问题 。并且这些初创公司占据了人工智能很大一部分市场 。


推荐阅读