人工智能
据报道,亚马逊和微软合力推出全新的深度学习库,名字叫Gluon。此举被认为是在云计算市场上与谷歌叫板,谷歌曾通过AI生态系统发力云计算,强调自身产品对深度学习的强大支持。Gluon可以让训练神经网络像开发APP一样简单,简洁的代码构建神经网络,而不需要牺牲性能。
近日,AWS和微软共同宣布了推出一个新的深度学习库:Gluon。Gluon允许所有技能水平的开发者设计原型、创建和训练深度学习模型,部署在云端、终端设备或手机APP。
Gluon接口目前与Apache MXNet兼容,并将在即将发布的版本中支持微软认知工具包(CNTK)。使用Gluon接口,开发人员可以使用简单的Python API和一系列预构建、优化的神经网络组件来构建机器学习模型。这使得开发者更容易使用简单、简洁的代码构建神经网络,而不需要牺牲性能。
AWS和微软发布了Gluon的参考规范,因此其他深度学习引擎可以与该接口集成。
美国媒体CNBC在对这一新的深度学习库进行报道时提到,这是亚马逊和微软两大巨头近日在人工智能上宣布的第二项重大合作,和此前一样,谷歌被排除在合作之外(当然,也可能是谷歌自身对这样的合作也不感兴趣,谷歌自己的深度学习开源框架TensorFlow目前已经是开源社区Githu上同类框架中最受欢迎的,用户量在不断攀升)。
亚马逊和微软此举被认为是与谷歌在云计算市场上展开争夺的重要举措。谷歌2017年以来通过强大的AI生态系统,在云计算上持续发力,尤其强调自身产品对AI和深度学习的强大支持能力。
微软在联盟上的动作最近非常频繁,9月7号微软联手Facebook推出了开放神经网络交换Open Neural Network Exchange (ONNX) 格式。这是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。10月11日,AMD、ARM、华为、 IBM、英特尔、Qualcomm都宣布将支持ONNX。
“机器学习的潜力只有在所有开发者都能访问的情况下才能实现。今天的现实是,构建和训练机器学习模型需要大量繁重的工作和专门的专业知识,”亚马逊副总裁Swami Sivasubramanian说,“我们创建了Gluon接口,使得构建神经网络和训练模型就像开发APP一样简单。我们期待与微软的合作,为让机器学习更容易使用的目标继续开发Gluon接口。”
微软人工智能和研究副总裁Eric Boyd说:“我们认为,对于整个行业来说,合作并集中资源来打造造福广大社区的技术是很重要的。这就是微软与AWS合作开发Gluon接口的原因,并支持开放的AI生态系统,让开发者可以自由选择。机器学习有能力改变我们工作、互动和交流的方式。为了实现这一目标,我们需要将正确的工具放在正确的位置,而Gluon接口则是朝着这个方向迈出的一步。”
简单、易于理解的代码
在Gluon中,你可以使用简单、清晰、简洁的代码来定义神经网络。你可以得到一套完整的即插即用的神经网络构建块,包括预定义的层、优化器和初始化器。这些把许多复杂的底层实现细节提取出来。下面的例子展示了如何用几行代码定义一个简单的神经网络:
下图展示了这个神经网络的结构:
要了解更多信息,请到对应教程学习如何构建一个多层感知器(MLP)的简单神经网络,并使用Gluon神经网络构建块。对于更高级的用例,从头开始编写神经网络的一些部分也是很容易的。Gluon允许在你的神经网络中混合和匹配预定义和自定义组件。
灵活的结构
训练神经网络模型在计算上是非常密集的,在某些情况下,可能需要几天甚至几周的时间。许多深度学习框架通过严格定义模型和将其与训练算法分离开来,从而减少训练时间。这种严格的方法大大增加了复杂性,也使调试变得困难。
Gluon方法不同。它将训练算法和神经网络模型结合在一起,从而在不牺牲性能的前提下为开发过程提供了灵活性。这种方法的核心是Gluon trainer,它用于训练模型。
trainer方法依赖 MXNet autograd 库,它用于自动计算导数(即,梯度)。导数是一个用来测量变量变化速率的数学计算。它是训练算法的必要输入。autograd库可以有效地实现这些数学计算,这对于Gluon提供的灵活性至关重要。现在你可以定义一个训练算法,它由一个简单的嵌套for循环组成,通过合并autograd和trainer。
这种灵活的结构使代码直观、易于调试,并为更高级的模型打开了大门。你可以使用熟悉的、原生的Python语言结构,比如for循环或神经网络中的if语句,或作为算法的一部分。通过将模型和算法组合在一起,就可以执行模型中的每一行代码,从而更容易地识别出导致bug的特定代码行。
动态图
在某些情况下,神经网络模型可能需要在训练过程改变形状和大小。特别是当输入到神经网络的数据输入是可变的时,这是必需的。这在自然语言处理(NLP)中很常见,因为在自然语言处理中,每个句子的输入都可以是不同的长度。使用Gluon,神经网络定义可以是动态的,这意味着你可以随时构建任何你想要的结构,并使用任何Python的控制流。
例如,这些动态的神经网络结构使构建一个树结构的长短期记忆(LSTM)模型变得更容易,这是Kai Sheng Tai、Richard Socher和Chris Manning在2015年提出的,是NLP的一个重要发展。Tree LSTM 是一种强大的模型,它可以识别一对句子是否具有相同的含义。下面的例子中,两个句子有着相同的意思:
“Michael threw the football in front of the player.”(迈克尔把足球扔到球员面前。)
“The ball was thrown short of the target by Michael.”(球被迈克尔扔出目标。)
我们可以仅将这些句子输入一个循环神经网络(一种流行的序列学习模型)来进行分类。但是,树形LSTM的主要观点是,我们经常在需要先备知识的语言方面遇到问题。例如,句子有语法结构,我们有强大的工具可以从句子中提取出这个结构。我们可以用一个树形结构的神经网络来组合这些单词,它的结构模仿了句子中已知的语法树结构,如下图所示:
(The Stanford Natural Language Processing Group)
这就需要为每个例子构建一个不同的神经网络结构。使用传统框架这很难实现,但是Gluon可以解决这个问题。在下面的代码片断中,你可以看到如何在模型训练的每个前向迭代中合并一个循环,并且仍然受益于autograd和trainer的简化。这使模型能够遍历一个句子的树结构,从而基于该结构学习。
高性能
有了Gluon提供的灵活性,你就可以很容易地设计原型并尝试使用神经网络模型。然后,当速度变得比灵活性更重要时(例如,当你准备好输入所有的训练数据时),Gluon接口能够轻松地缓存神经网络模型以实现高性能,并减少内存占用。当你完成原型并准备在一个更大的数据集上测试,只需要小的调整。你必须使用HybridSequential,而不是使用 Sequential(如前面的例子所示)来堆栈神经网络的层。HybridSequential的功能与Sequential相同,但是它允许调用底层的优化引擎来表达模型的部分或全部架构。
接下来,为了编译和优化 HybridSequential,我们可以调用它的hybridize 方法:
net.hybridize()
现在,当你训练模型时,将能够获得与本机MXNet接口相同的高性能,同时减少内存使用。
全部0条评论
快来发表一下你的评论吧 !