财富:亚马逊采用 MXNet ,巨头间深度学习框架之争白热化

简介:

随着人工智能的发展,现代科技公司的终极目标是构建无需人类介入、能够自我思考的 AI 软件。

亚马逊首席技术官 Werner Vogels 在周二的一篇博客文章中表示,亚马逊网络服务公司(AWS)刚刚选择 MXNet 作为其最主要的深度学习框架。

《财富》今年 9 月的一篇深度长文回溯了深度学习推动的人工智能在整个计算生态系统引发的革命,如文章所述,深度学习是 AI 的一个子集,包含神经网络的使用。神经网络在算法(而非人类程序员)的帮助下通过处理大量数据来学习并解决问题。

Vogels 表示,AWS 将为 MXNet 及支持其生态系统的其他公司提供软件代码、文档和开发资金。虽然他同时表明,该公司也支持其他深度学习框架,包括 Caffe、CNTK、TensorFlow 和 Torch,但显然在 MXNet 加入后,其他这些框架会被放到次要位置。

TensorFlow 和 CNTK 框架分别是谷歌和微软开发的,Caffe 则来自加州大学伯克利分校的伯克利人工智能研究实验室。

MXNet 的消息恰在亚马逊云服务的年度 AWS RE:Invent 大会前一周发布,亚马逊的高管将在大会上讨论人工智能带来的机会,以及他们将亚马逊的个人助理 Alexa 的工具开放给 AWS 开发者的计划。

为了实现 AI 的终极目标,亚马逊及其竞争对手也在追求尽可能大的数据集。

所以,如果你想知道亚马逊、微软、苹果以及谷歌公司分别从 Alexa、Cortana、Siri 和 Google Home 中得到了什么,记住这一点:所有使用这些智能设备和应用的人都在向这些公司提供非常有价值的数据,应用于这些面向未来的项目。

MXNet 设计和实现简介

神经网络本质上是一种语言,我们通过它来表达对应用问题的理解。例如我们用卷积层来表达空间相关性,RNN来表达时间连续性。根据问题的复杂性和信息如何从输入到输出一步步提取,我们将不同大小的层按一定原则连接起来。近年来随着数据的激增和计算能力的大幅提升,神经网络也变得越来越深和大。例如最近几次imagnet竞赛的冠军都使用有数十至百层的网络。对于这一类神经网络我们通常称之为深度学习。从应用的角度而言,对深度学习最重要的是如何方便地表述神经网络,以及如何快速训练得到模型。

对于一个优秀的深度学习系统,或者更广来说优秀的科学计算系统,最重要的是编程接口的设计。他们都采用将一个领域特定语言(domain specific language)嵌入到一个主语言中。例如numpy将矩阵运算嵌入到python中。这类嵌入一般分为两种,其中一种嵌入的较浅,其中每个语句都按原来的意思执行,且通常采用命令式编程(imperative programming),其中numpy和Torch就是属于这种。而另一种则用一种深的嵌入方式,提供一整套针对具体应用的迷你语言。这一种通常使用声明式语言(declarative programming),既用户只需要声明要做什么,而具体执行则由系统完成。这类系统包括Caffe,theano和刚公布的TensorFlow。

这两种方式各有利弊,总结如下:

命令式编程:

如何执行 a=b+1: 需要b已经被赋值。立即执行加法,将结果保存在a中。

优点: 语义上容易理解,灵活,可以精确控制行为。通常可以无缝地和主语言交互,方便地利用主语言的各类算法,工具包,debug和性能调试器。

缺点: 实现统一的辅助函数和提供整体优化都很困难。

声明式编程:

如何执行 a=b+1: 返回对应的计算图(computation graph),我们可以之后对b进行赋值,然后再执行加法运算

优点:在真正开始计算的时候已经拿到了整个计算图,所以我们可以做一系列优化来提升性能。实现辅助函数也容易,例如对任何计算图都提供forward和backward函数,对计算图进行可视化,将图保存到硬盘和从硬盘读取。

缺点:很多主语言的特性都用不上。某些在主语言中实现简单,但在这里却经常麻烦,例如if-else语句 。debug也不容易,例如监视一个复杂的计算图中的某个节点的中间结果并不简单。

  几种主要深度学习框架的比较

目前现有的系统大部分都采用上两种编程模式的一种。与它们不同的是,MXNet 尝试将两种模式无缝的结合起来。在命令式编程上 MXNet 提供张量运算,而声明式编程中 MXNet 支持符号表达式。用户可以自由的混合它们来快速实现自己的想法。例如我们可以用声明式编程来描述神经网络,并利用系统提供的自动求导来训练模型。另一方便,模型的迭代训练和更新模型法则中可能涉及大量的控制逻辑,因此我们可以用命令式编程来实现。同时我们用它来进行方便地调式和与主语言交互数据。

五个主要 Python 深度学习库的比较

Theano 是一个专用于高效计算的低级库。如果你需要细粒度的定制和灵活性,可以直接使用这个库。

TensorFlow是另一个低级库,比 Theano 还要不成熟。但它是 Google 支持的库,并提供了开箱即用的分布式计算。

Lasagne是 Theano 中的一个轻量级库。如果你想要 Theano 的灵活性,但不想总是从头开始编写神经网络的层,可以选择 Lasagne。

Keras 是基于 Theano 或 TensorFlow 高层神经网络库。它具有极简化、模块化的优点,而且在实验中非常快速。这是深度学习的最受欢迎的库,也是初学者的最佳入门库。

MXNet是另一个类似 Keras 的高级库。它提供了多种语言的绑定,并且支持分布式计算。

导师(Mentor):Theano

我们授予 Theano “导师”称号,因为它让引导我们认识并喜欢上其他的深度学习库。

例如,Lasagne 和 Keras 都是基于 Theano 的。就其核心来说,Theano 是为使用多维数组进行数学计算的库,它的速度非常快,并且使用 GPU 进行优化(比 CPU 快 140倍)。换句话说,它是神经网络的“构建块”。

根据我们的经验,很少有人会直接写 Theano 代码。通常需要使用更高级的包装器(wrapper),除非你需要的是低级的定制。

例如,下面是一个用 Theano 写的逻辑激活函数

  后起之秀:TensorFlow

TensorFlow 是“后起之秀”,而且它很受欢迎。

TensorFlow 是 Google 自己的 AI 团队开发的,而且最近开源了。TensorFlow 允许使用数据流图进行高效的数值计算。它从 Theano 的经验中学习了很多,因此被称作是全新的 Theano 2.0 版本。Google 的强力支持也使得它格外有前景。

即便如此,Theano 在很多方面仍然比 TensorFlow 快,而且支持更多样的操作。

但是,TensorFlow 最大的优势是它支持开箱即用的分布式计算,这使得在多 GPU 上训练深度神经网络更简单。

轻量:Lasagne

Lasagne 是 Theano 的一个轻量级包装器。Lasagne 允许使用 Theano 的优化计算来构建并训练神经网络。而轻量级是指,在 Lasagne 中,你仍然需要获取相当的低级,并且声明网络的每个层。在 Theano 之外,它只提供模块化的构建块。

结果是你的代码会变得十分冗长,但你可以用 NN 结构而非多维数组进行编程。

Lasagne 可以视为 Theano 的灵活性 和 Keras 的简单性之间的折衷选择。

半机械人(Cyborg):Keras

在所有 Python 深度学习库中,Keras 是最受欢迎的。原因有三:

首先,Keras 是一个允许在后端使用 Theano 或 TensorFlow 的包装器。这意味着开发者可以根据自己的应用程序轻松在两个库之间切换,。

第二,它有很漂亮的指导原则:模块性、极简主义、易扩展性,以及与 Python 协作。这使得 Keras 的实际使用非常简单愉快。

最后,Keras 拥有常见的网络结构的开箱即用的实现。它能快速、轻易地运行卷积神经网络。

下面是一个超快的序列模型的例子:

看起来很容易,是吧?如果想快速实现,Keras 是十分理想的库。但它最大的缺点是不支持并行训练的多 GPU 环境。

多语通(Polyglot):MXNet

MXNet 同 Keras 一样是高级库,但它的优势在另外的方面。

一方面,使用 MXNet 构建网络比用 Keras 需要花更多功夫。由于教程少,学习的难度更大。

但是,MXNet 支持超过 7 种不同的语言的优势弥补了这一点,这些语言包括 C++、Python、R、Javascrip,甚至 Matlab。

MXNet 是真正的多语通,对使用不同的语言共享模型的团队工作来说,它是不二之选。

MXNet 的另一个明显的优势是支持分布式计算。这意味着如果你需要在多个 CPU 或 GPU 上训练模型以提高速度,MXNet 是很好的选择。.

本文转自d1net(转载)

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
4月前
|
机器学习/深度学习 API 语音技术
|
16天前
|
UED 开发者
哇塞!Uno Platform 数据绑定超全技巧大揭秘!从基础绑定到高级转换,优化性能让你的开发如虎添翼
【8月更文挑战第31天】在开发过程中,数据绑定是连接数据模型与用户界面的关键环节,可实现数据自动更新。Uno Platform 提供了简洁高效的数据绑定方式,使属性变化时 UI 自动同步更新。通过示例展示了基本绑定方法及使用 `Converter` 转换数据的高级技巧,如将年龄转换为格式化字符串。此外,还可利用 `BindingMode.OneTime` 提升性能。掌握这些技巧能显著提高开发效率并优化用户体验。
37 0
|
2月前
|
机器学习/深度学习 数据采集 人工智能
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
**LeNet 摘要** - LeNet 是 Yann LeCun 在 1989 年提出的卷积神经网络,用于手写数字识别,是深度学习和计算机视觉的里程碑。 - 网络结构包括卷积层(C1, C3, C5)、池化层(S2, S4)和全连接层(F6),处理 32x32 灰度图像,最终分类为 10 类。 - 卷积层提取特征,池化层降低维度,全连接层负责分类。激活函数主要使用 Sigmoid。 - LeNet 在 MNIST 数据集上表现优秀,但现代网络常使用 ReLU 激活和更深结构。 - LeNet 的局限性包括网络较浅、Sigmoid 梯度消失问题和平均池化,但其创新为后续 CNN 发展铺平道路
23 1
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
PAI DLC与其他深度学习框架如TensorFlow或PyTorch的异同
PAI DLC与其他深度学习框架如TensorFlow或PyTorch的异同
|
3月前
|
机器学习/深度学习 人工智能 算法框架/工具
【深度学习】OneFlow深度框架:数据流图与异步计算的科技革新
【深度学习】OneFlow深度框架:数据流图与异步计算的科技革新
44 2
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
|
4月前
|
机器学习/深度学习 开发框架 Android开发
移动应用开发的未来:跨平台框架与原生系统之争深度学习在图像识别中的应用与挑战
【5月更文挑战第28天】 在移动设备日益成为我们生活不可或缺的一部分的同时,移动应用的开发也正经历着前所未有的变革。本文将探讨当前移动应用开发的关键技术趋势,特别是跨平台开发框架的兴起以及它们与传统的原生移动操作系统之间的竞争。我们将分析这些技术如何塑造了开发者构建、部署和维护移动应用的方式,并预测了未来可能的发展方向。 【5月更文挑战第28天】 随着人工智能技术的飞速发展,深度学习已成为推动计算机视觉领域进步的核心动力。本文旨在探讨深度学习技术在图像识别任务中的运用,并分析其面临的主要挑战。通过回顾卷积神经网络(CNN)的基础理论及其变体,文章揭示了深度学习如何提高图像识别的准确性和效率。
|
3月前
|
机器学习/深度学习 编解码 计算机视觉
【深度学习】探秘PSD:合成到真实去雾框架的实例解析
【深度学习】探秘PSD:合成到真实去雾框架的实例解析
55 0
|
4月前
|
机器学习/深度学习 PyTorch API
|
4月前
|
机器学习/深度学习 开发框架 自动驾驶
移动应用开发的未来:跨平台框架与原生系统之争基于深度学习的图像识别技术在自动驾驶领域的应用
【5月更文挑战第29天】 随着移动设备成为日常生活不可或缺的一部分,移动应用的开发和维护变得尤为重要。本文将探讨移动应用开发的当前趋势,重点关注跨平台开发框架和原生操作系统之间的竞争。我们将分析各种开发工具的优势和局限性,并预测未来可能的发展方向。同时,考虑到性能、用户体验和市场适应性的要求,本文旨在为开发者提供一个关于选择何种开发策略的清晰视角。