资讯 人工智能
此为临时链接,仅用于文章预览,将在时失效

深度学习入门指北——从硬件到软件

作者:隔壁王大喵 编辑:郭奕欣
2017/11/21 15:13

雷锋网AI科技评论按:近日,Rachel Thomas在fast.ai上发布了一篇博文《What you need to do deep learning》,他希望通过这篇文章回答一些深度学习入门者经常会问到的问题:什么样的电脑才能用来做深度学习?为什么 fast.ai 推荐使用英伟达的 GPU 呢?哪些深度学习库不适合初学者?你又是如何将深度学习应用到实际生产中的?

Rachel Thomas认为,所有的这些问题都可以归结到一个主题,那就是“究竟需要准备好哪些东西(硬件、软件、知识背景以及数据等)才能开始深度学习?”。所以本篇博客正是针对那些想入门深度学习以及对深度学习感兴趣的新人而写的。雷锋网编译如下。

一、硬件基础

关于硬件基础,我们首先不得不感谢一下游戏工业的蓬勃发展。

视频游戏工业的体量(就盈利而言)远远超出了电影工业和音乐工业之和。在过去的 20 年里,视频游戏工业极大地推进了 GPUs (图像处理单元)的发展进步,这是由于 GPU 可用于加速游戏图像渲染的矩阵数学运算过程。并且非常幸运的是,深度学习运算中也涉及到大量的矩阵操作。而这些年在 GPU 上取得运算能力的进步也正是为什么神经网络算法在早期没有发挥出效力,直到在近几年才展露头角的原因之一。因为在没有 GPU 的条件下,要训练一个深度学习模型在大多数情况下都将是一个非常漫长而痛苦的过程。

深度学习入门指北——从硬件到软件

图一 英伟达Tesla系列显卡

注意 GPU 的选择

大多数的深度学习从业者并不需要直接通过编程来操控 GPUs,而是使用一些诸如 PyTorch 或 TensorFlow 这样的软件包来实现的。但是为了能够高效地使用这些软件包,我们必须购买正确的 GPU,而这几乎就等价于我们需要购买英伟达出产的 GPU

CUDA 和 OpenCL 是当前用来实现 GPU 编程的主流方式。CUDA 是迄今为止发展最好的,拥有最广泛生态系统的,也是最被深度学习框架支持的集成技术。由于 CUDA 是由英伟达创建的集成技术,所以它无法被其它公司的 GPU 所使用。所以当 fast.ai 推荐使用英伟达的 GPU 时,并不是因为我们对英伟达公司有好感或者说英伟达给了好处,而仅仅是因为这是目前深度学习的最佳选择。

英伟达在 GPUs 的市场中占据着绝对的统治地位,然后紧随其后的竞争者则是 AMD。在这个夏天,AMD 发布了 ROCm 平台,用于对深度学习提供更多的技术支持。当前 ROCm 平台对于主流的深度学习框架(诸如 PyTorch, TensorFlow 和 CNTK 等)的支持还处于开发阶段。因为 ROCm 平台进行了开源,并且能够为深度学习的底层提供更多的选择,我是非常希望它能够取得成功的,但还是不得不承认 ROCm 的文档比较晦涩难懂。以至于尽管我想要这里介绍一下 ROCm 平台,但是在阅读了 ROCm 网站提供的 Overview、Getting Started 和 Deep Learning 页面之后却依然无法通过自己的语言来描述和解释 ROCm。(我承认自己没有硬件知识背景,但是我认为像我这样的数据科学家应该成为该项目的目标读者之一)

如果没有 GPU

如果你的电脑不具有 GPU 或者是没有英伟达产的 GPU,你还拥有以下几个选择:

二、软件基础

深度学习还是一个相对新兴的领域,因此与它有关的框架和工具也是日新月异。比如说,我们在 2016 年教学课程第一部分采用的深度学习框架 Theano 就在最近宣布停止了支持和更新。而我们目前正在使用的 PyTorch 框架则是 2017 刚刚发布的。正如 Jeremy 在早些的博客中提到的——在学习任何特定的深度学习框架和软件时你都必须做好它们可能在一年或者两年后将被抛弃的心理准备。最重要的事情是理解最基础的概念,所以为了实现这一目标,我们基于 PyTorch 的基础上创建了自己的软件库,并且我们认为这将有助于更加清晰地展示深度学习的概念,同时也有助于实现最佳编码。

Python 是当前在深度学习领域使用最为广泛的编程语言。另外还存在着各式各样的深度学习框架可供选择,并且几乎所有的主流科技公司都支持着各自不同的框架,尽管这些公司的员工在实际研发中总是混合使用着各类框架。深度学习框架包括有 TensorFlow (谷歌)、PyTorch (Facebook)、MxNet (华盛顿大学开发,后由亚马逊维护)、CNTK (微软)、DeepLearning4j (Skymind)、Caffe2 (Facebook)、Nnabla (索尼)、PaddlePaddle (百度)和Keras (一个基于前边若干个框架为基础进行高级封装的 API)。并且所有这些框架都提供有 Python 的 API 接口。

动态图 vs. 静态图

在 fast.ai,我们在选择框架时优先考虑程序员编程的便捷性(能更方便地进行调试和更直观地设计),而不是框架所能带来的模型加速能力。这也正是我们选择 PyTorch 的理由,因为它是一个具有动态图机制的灵活框架

依据采用动态计算或是静态计算的不同,可以将这些众多的深度学习框架划分成两大阵营,当然也有些框架同时具有动态计算和静态计算两种机制(比如 MxNet 和最新的 TensorFlow)。动态计算意味着程序将按照我们编写命令的顺序进行执行。这种机制将使得调试更加容易,并且也使得我们将大脑中的想法转化为实际代码变得更加容易。而静态计算则意味着程序在编译执行时将先生成神经网络的结构,然后再执行相应操作。从理论上讲,静态计算这样的机制允许编译器进行更大程度的优化,但是这也意味着你所期望的程序与编译器实际执行之间存在着更多的代沟。这也意味着,代码中的错误将更加难以发现(比如,如果计算图的结构出现问题,你可能只有在代码执行到相应操作的时候才能发现它)。尽管理论上而言,静态计算图比动态计算图具有更好的性能,但是在实践中我们经常发现并不是这样的。

谷歌的 TensorFlow 主要使用了静态计算图,而 Facebook 的 PyTorch 则使用了动态计算图机制。(注:TensorFlow 在两周前宣布了一个动态计算选项 Eager Execution,不过该特性还比较新颖并且 TensorFlow 的文档和项目依然以静态计算为主)。在九月份,fast.ai 宣布将在今年的课程中采用 PyTorch 框架进行教学以及开发 fast.ai 自己的框架(实际上就是采用了更好的编码方式对 PyTorch 进行高级封装)。简而言之,以下是我们选择 PyTorch 的几个原因(更详细的原因请参见这里):

谷歌在推广 TensorFlow 上已经花费了大量的资源,其投入要远远大于任何其它公司或者团队,并且我想这也是为什么 TensorFlow 会如此出名的原因之一(对于很多深度学习的门外汉,TensorFlow 是他们唯一听说过的框架)。正如之前所述,TensorFlow 在几周前发布了动态计算选项,这将解决了一些上述提到的问题。然后许多人就向 fast.ai 提问说我们是否考虑迁移回 TensorFlow 框架。但是目前 TensorFlow 提供的动态选项还比较新颖而且开发也不够完善,所以我们依然选择继续愉快地使用 PyTorch。但是 TensorFlow 团队非常乐意于接受我们的想法,我们也很高兴看到我们的 fastai 库被移植到 TensorFlow 中。

三、如何让技术落地?

许多人把工业应用中的深度学习想的过于复杂,认为自己需要比实际更加复杂的系统。你可以在生产中使用 CPU 和网络服务器,并且这也是我们在多数情况下所推荐的。这里有一些关键点:

对于大公司而言在服务器中采用 GPU 是有意义的,当你发展到这个程度的时候你自然就知道自己需要了。但是过早地进行扩展只会增加不必要的复杂性并且拖慢你的速度。

四、所需背景:一年的编程经历

启发 Jeremy 和我编写《写给程序员看的深度学习实践》的一大原因是,目前大多数的深度学习材料存在着以下缺陷:

我们的《写给程序员看的深度学习实践》是一门免费课程,其特点在于仅仅要求学员具备至少一年的编程经验,然后我们就可以教会你们如何创建最先进的模型。你的编程语言背景可以是任何一门语言,但是在开始学习我们的课程之前你最好先学会使用 Python,因为这正是我们所使用的。我们将根据需要介绍相关的数学概念,并不建议大家单独尝试学习数学理论。

如果你还不知道如何编写代码,我们强烈建议你去学习一下。另外如果你对数据科学感兴趣的话,Python 是一门非常合适的语言。

五、所需数据:远比你想象的要少

虽然许多人都声称需要具备有像谷歌一般的数据量才能从事深度学习工作,但这种观点是错误的。因为迁移学习(结合诸如数据增强的技术)的出现使得人们能够将经过预训练的模型在更小的数据集上进行训练。正如我们在其它地方谈到的,在一家医疗初创公司 Enlitic,Jeremy Howard 带领着一支团队仅仅只使用了 1000 例肺癌 CT 扫描样本,创建了一个比 4 位专业放射科医师具备更准确判别肺癌能力的算法。另外 C++ 库 Dlib 提供了另外一个样例,在这个例子中仅仅使用了 4 张图片的 18 张脸来训练一个面部检测器!

深度学习入门指北——从硬件到软件

图二 使用Dlib实现人脸识别

六、关于 fast.ai

fast.ai 是一个致力于为所有人提供学习深度学习机会的平台。我们相信,深度学习将是一个转型的技术,将显着改善对发展中国家影响最大的医药,教育,农业,交通等诸多领域。但是要真正实现这一点,技术需要比现在更加容易使用,可靠和直观。我们正在研究综合利用人类与计算机各自优势的混合“人机”解决方案,建立一个随时可用的应用程序和模型库,开发完整的教育框架,并为开发人员和用户编写能够快速上手和易于使用的软件。

Via: What you need to do deep learning ,雷锋网编译

长按图片保存图片,分享给好友或朋友圈

深度学习入门指北——从硬件到软件

扫码查看文章

正在生成分享图...

取消
相关文章