亚马逊AWS官方博客
Gluon 简介:AWS 和 Microsoft 合作推出的新机器学习库
作者:Matt Wood 博士
使用神经网络的机器学习 (包括“深度学习”) 包含三个主要部分:训练数据、神经网络模型和训练神经网络的算法。您可以将神经网络看成是一种有向图:它有一系列输入 (数据),通过一系列连接的层和权重连接到一系列输出 (预测)。在训练期间,算法根据网络输出中的错误调整网络中的权重。这就是网络学习的过程 – 一种可能需要持续数天时间的内存和计算密集型过程。Caffe2、Cognitive Toolkit、TensorFlow 以及 Apache MXNet 等深度学习框架能够部分解决“如何加快这一过程?”的难题。与数据库中的查询优化器一样,训练引擎越了解网络和算法,越能更好地优化训练过程 (例如,它可以根据其他部分的改变,推断需要重新计算图中的哪些部分并跳过不受影响的权重,从而加快训练进度)。此外,这些框架还提供并行功能,可通过分发计算过程来减少总体训练时间。但是,要实现上述优化,大多数框架要求开发人员完成一些额外工作:首先,提供网络图形式定义,然后“定图”并调整权重。网络定义可能极其庞大而复杂 (包含数百万个连接),通常必须手动构建。深度学习网络十分“笨重”,难以调试,因而很难在项目间复用代码。
这种复杂性可能会令初学者“无从下手”,对经验丰富的科研人员来说也是一项耗时的任务。AWS 在 MXNet 中尝试了一些更灵活易用的新方法定义和训练神经网络。Microsoft 也是开源项目 MXNet 的开发者,对部分新想法感兴趣。于是我们进行了沟通,结果发现双方抱持几乎相同的愿景:借助此类技术降低机器学习的复杂性,让更多的开发人员能够轻松发挥其强大威力。
Gluon 特点:动态图,快速迭代,可扩展训练
Gluon 包含四大创新。
- 友好的 API:可以使用简单、清晰、简洁的代码定义 Gluon 网络 – 相比某些更晦涩、更形式化的网络及相关加权评分函数定义方法,这更易于开发人员学习,理解难度大幅降低。
- 动态网络:Gluon 中的网络定义是动态的:它可以像任何其他数据结构一样“收缩和扩展”。这有别于更常见的形式化网络符号定义 (既深度学习框架要求必须保持网络定义不变,才能在训练期间有效地优化计算)。相比之下,动态网络更容易管理。借助 Gluon,开发人员可以在定义网络和算法时轻松混用快速的符号表示和更友好、动态的“命令式”定义。
- 可以使用算法定义网络:这大大加强了模型与训练算法的联系。在这种情况下,算法可以在定义和训练期间动态调整网络,而不仅仅是独立的定义。也就是说,开发人员能够使用标准的编程循环、条件语句创建此类网络,科研人员也能定义以前无法实现的更复杂的算法和模型。不管是创建、更改还是调试,难度都大幅下降。
- 由高性能运营商进行训练:这样可在不牺牲训练速度的情况下提供友好、简洁的 API 和动态图,可谓是机器学习领域的一大进步。某些框架为深度学习提供了友好的 API 或动态图,但以前的此类方法都会减缓训练速度。与其他领域的软件一样,抽象需要在运行时进行协商和解释,因而会减慢计算速度。但 Gluon 将简明的 API 与形式化定义进行了深层融合,无需开发人员了解具体细节或手动调整编译器优化。
能通过 Gluon 向开发人员提供此类改进,AWS 团队和 Microsoft 的协作者倍感兴奋。目前,已有开发人员和科研人员提供十分积极的反馈。
开始使用 Gluon
Gluon 现已在 Apache MXNet 中可用,将在未来版本中支持 Microsoft Cognitive Toolkit。我们还将发布前端接口和底层 API 规范,以便在适当的时候“进驻”其他框架。
您可以立即试用 Gluon – 只需点击 AWS 深度学习 AMI,就能试验 50 个完全能够正常工作的笔记本示例。如果您是机器学习框架开发者,请访问 GitHub 查阅接口规范。
– Matt Wood 博士