设计以人为本的机器学习框架
文 / Google Research 高级研究员 Carrie J. Cai
和加州大学圣迭戈分校助理教授 Philip J. Guo
随着机器学习 (ML) 的运用逐渐广泛,它也越来越多地影响着利益相关各方和社会群体。更多的开发者(即使有些是未经正式 ML 培训的开发者)需要适应 ML,并将其应用于解决自己面临的一些难题上。
近年来,人们通过将复杂模型的行为抽象到更高级别的 API 中,来努力降低机器学习的门槛。例如,谷歌一直在开发 TensorFlow.js 这一开源框架,以便开发者能够直接在网络浏览器中运行 JavaScript 编写的 ML 代码。尽管我们在改进 API 方面做了大量的工程工作,但对于非 ML 软件开发者对于如何成功将 ML 应用于日常工作的实践需求知之甚少。具体来说,在尝试现代 ML 框架时,他们会遇到哪些困难?他们希望这些框架提供哪些功能?
TensorFlow.js
https://tensorflow.google.cn/js
《软件开发者学习机器学习:动机、阻碍和需求》(Software Developers Learning Machine Learning: Motivations, Hurdles, and Desires) 一文在 IEEE视觉语言和以人为中心的计算 (VL/HCC) 会议上荣获最佳论文奖,我们在该论文中分享了对这些问题的研究,并发布了对 645 名 TensorFlow.js 开发者用户的调查结果。绝大多数受访者是软件或网页开发者,他们对机器学习还很陌生,ML 通常不是他们主要工作。我们研究了开发者在使用 ML 框架时遇到的困难,并探讨了最有助于将这些框架应用于编程工作流程的功能和工具。
软件开发者学习机器学习:动机、阻碍和需求
https://drive.google.com/file/d/1O7GIx-Y-0Q_1j4mcnTiQGdD_Pz0aDgVu/viewIEEE
https://www.ieee.org/最佳论文奖
https://human-se.github.io/vlhcc2019/awards/
使用 ML 框架时,开发者最大的困难是什么?
有趣的是,到目前为止,开发者认为目前最大的困难不是缺少清晰的 API,而是 他们自身缺乏对 ML 的概念性理解,这限制了开发者成功使用 ML 框架的能力。开发者遇到的困难遍布各个方面,包括挑选适用 TensorFlow.js 解决问题的初期阶段(例如,调查受访者表示不知道 “该将 ML 应用到哪些问题或领域,哪些是 ML 能够成功处理的、哪些则不能”)、创建神经网络架构(例如, “向模型添加层时,我该放入多少个单位?”),以及了解如何在模型训练期间设置和调整参数(例如, “确定要使用的优化器、损失函数”)。在对不同参数对结果的影响没有概念性理解的情况下,开发者常常会在调试 ML 模型时感到需要调整参数空间的无穷尽,进而不知所措。
由于没有足够的概念支持,开发者还发现很难将“hello world”API 教程中学到的知识运用到自己实际问题的解决中。尽管 API 教程提供用于实现特定模型的语法(例如,对 MNIST 数字进行分类),但教程一般不提供以具体问题为基础进行泛化所必需的底层概念支架。
开发者经常将这些困难归因于自己缺乏高等数学知识。具有讽刺意味的是,尽管如今有大量的非专家在对 ML 框架进行修补,但许多人仍然认为 ML 框架是为“受过线性代数和微积分培训的专业人才而设计的,因此并不适合普通的软件开发者或产品经理”。API 文档中普遍使用深奥的数学术语,尤其加剧了这种假象,在无意间让人觉得:即使是将 ML 实际集成到软件项目中,也必须要有高等数学学位。尽管数学培训确实有益,但是掌握实用概念(例如模型的学习率)并将其应用于解决实际问题的能力并不需要高等数学学位。
开发者希望从 ML 框架获得什么?
回复调查问卷的开发者希望 ML 框架不仅可以教会他们如何使用 API,还能传授可以帮助他们将 ML 框架有效应用于解决自身问题的领域技巧。
明确支持修改的预制模型
可以访问规范的 ML 模型库是所有开发者们的共同愿望,一旦心愿达成,开发者便可修改现有模板,不必从头开始新建模板。
目前,预训练模型广泛存在于包括 TensorFlow.js 在内的众多 ML 平台。然而,当前这些模型并未向初学者提供明确的使用支持。例如,在我们的调查中,开发者反馈在他们将现有模型示例转换和修改为自己的用例时往往面临巨大困难。因此,对预制模型 (Pre-made models) 进行配置时,还应提供明确的 修改支持。
将 ML 最佳实践合成到实时提示中
开发者还希望框架能够提供 ML 最佳实践,即可以在设计或调试模型时给出实用提示和窍门。ML 专家可能会从多年的专门试验和错误中获得启发式方法和主要策略,因此在面临如“我应该首先尝试调整哪个参数?”的问题时,可能很快有答案,但非 ML 专家的开发者可能难以负担此类决策成本。为帮助缩小决策所有可能性,ML 框架应当可以将有关的最佳实践,直接在编程工作流中进行提示。目前,如 TensorBoard 和 tfjs-vis 这样的可视化工具可以查看模型内部发生了什么。
TensorBoard
https://tensorflow.google.cn/tensorboardtfjs-vis
https://github.com/tensorflow/tfjs/blob/master/tfjs-vis/README.md
将这些工具与实时策略指针(例如是调整预训练模型,还是否从头开始创建模型)或诊断性检查(如在模型未收敛时“降低学习率”的实用提示)结合起来,可以帮助用户获得实用策略。这些提示可以充当支架,有助于解释 ML 所依赖的底层数学理论和术语,并帮助开发者理解与消化。
支持边操作边学习
最后,虽然 ML 框架不是传统的学习平台,但实际上,软件开发者将其视为可以边操作边学习的轻量级工具。
例如,一位调查受访者赞赏将概念理解与框架紧密整合,而不是将概念作为单独资源展示。他认为:“……可以即时编辑和运行的代码段演示,非常有助于实现概念的理解。” 另一位受访者解释道:“我更喜欢边做边学,因此我希望在 ML 框架中看到更多的教程和示例。” 有些开发者很难定期参加正式的在线课程,他们更希望通过动手操作来一点点学习:“由于生活中的种种琐事,我只能利用 5 到 15 分钟的碎片时间学习。”
鉴于这些边操作边学习的需求,ML 框架可能需要更明确地区分针对不同专业水平的一系列资源。尽管许多框架已经提供“hello world”教程,但为了正确设定期望,这些框架应该更精确地予以区分:基于特定于语法的 API 和概念性 ML 的入门教程。
前景展望
从根本上来说,随着 ML 的不断发展,为软件开发者提供更实用的概念性提示、以及创建由社区精选的最佳实践共享资源库,无论是 ML 专家还是初学者都能从中受益。希望这些研究发现能为将来更以用户为中心的 ML 框架设计铺平道路。
致谢
这项研究的成功离不开以下人员的贡献:Yannick Assogba、Sandeep Gupta、Lauren Hannah-Murphy、Michael Terry、Ann Yuan、Nikhil Thorat、Daniel Smilkov、Martin Wattenberg、Fernanda Viegas 以及 PAIR 和 TensorFlow.js 的成员。