深度学习入门:投身深度学习你需要哪些准备?

简介: 当你想要进入深度学习这个领域时,需要准备什么呢?本文将会给你解答

更多深度文章,请关注:https://yq.aliyun.com/cloud


我想回答一些我经常被问到的问题:我需要什么样的电脑来进行深度学习?为什么fast.ai推荐Nvidia GPU?你为初学者推荐什么深度学习库?你如何把深度学习引入生产?我认为这些问题都属于一个总的主题:你需要什么(硬件、软件、背景和数据)来进行深入学习? 这篇文章是针对那些新进入这个领域的,并且对入门感兴趣的人。

需要的硬件

我们感谢游戏业

电子游戏行业(收入方面)大于电影和音乐行业的总和。 在过去的20年里,视频游戏产业推动了GPU(图形处理单元)的巨大进步,其用于绘制图形所需的矩阵数学。幸运的是,这些正是深度学习所需的计算类型。GPU技术的这些进步是为什么现在的神经网络比几十年前更强大的一个关键部分。在没有GPU的情况下训练深度学习模型在大多数情况下将会非常缓慢。


并非所有的GPU都是一样的

大多数深度学习从业者不是直接编程GPU; 我们使用处理这个问题的软件库(如PyTorch或TensorFlow)。但是,要有效使用这些库,你需要访问正确类型的GPU。在几乎所有情况下,这意味着可以从Nvidia公司获得GPU

CUDAOpenCL是GPU编程的两种主要方式。CUDA是迄今为止最发达,拥有最广泛的生态系统,也是深度学习库最有力的支持。CUDA是由Nvidia创建的专有语言,因此它不能被其他公司的GPU使用。当fast.ai推荐使用Nvidia GPU时,我们并不是对Nvidia有特别的亲近或信任,而是这是迄今为止深度学习的最佳选择。

Nvidia在GPU市场占据主导地位,其次是竞争对手AMD公司。 今年夏天,AMD宣布发布一个名为ROCm的平台,为深度学习提供更多的支持。 PyTorch,TensorFlow,MxNet和CNTK等主要深度学习库的ROCm状态仍在开发中。虽然我希望看到一个开源的替代方案取得成功,但我不得不承认,我发现ROCm的文档很难理解。我刚刚阅读了ROCm网站的Overview,Getting Started和Deep Learning页面,但仍然不能用我自己的话来解释ROCm,尽管我想在这里把它包括在内以便完整。(我承认没有硬件背景,但我认为像我这样的数据科学家应该成为这个项目的目标受众之一。)

如果没有GPU ...

如果你的电脑没有GPU或者没有Nvidia GPU,那么你有几个很好的选择:

  • 使用Crestle,通过你的浏览器:Crestle是一项服务(由fast.ai学生Anurag Goel开发),为你提供在云上的已经预先安装并配置为在GPU上运行的所有流行的科学和深度学习框架的云服务。它很容易通过你的浏览器访问。新用户可免费获得10小时和1 GB的存储空间。之后,GPU使用率是每小时59美分。我向那些刚接触AWS或新手的人推荐使用这个选择来使用控制台。
  • 通过你的控制台设置AWS云实例:你可以按照这个fast.ai设置课程中的步骤创建一个AWS实例(远程为你提供Nvidia GPU)。AWS每小时收取90美分。尽管我们的设置材料都是关于AWS(并且你会发现对AWS最多的论坛支持),但是一位fast.ai学生创建了一个设置Azure虚拟机进行深度学习的指南。如果有人写关于Google云端引擎的博客文章,我很乐意分享和添加一个链接。
  • 建立你自己的框架。这是我们的fast.ai论坛中的一个冗长的话题,在论坛里人们可以提出问题,分享他们正在使用的组件,并发布其他有用的链接和提示。最便宜的新型Nvidia GPU是300美元左右,一些学生在eBay或Craigslist上发现了更便宜的旧版GPU,而另外一些则是为了更强大的GPU支付更多的费用。我们几个学生写博客文章记录他们如何建立他们的机器:

你需要的软件

深度学习是一个相对年轻的领域,库和工具正在迅速改变。 例如,Theano,在2016年我们选择使用在我们的课程的第1部分,它刚刚退休。目前我们正在使用的PyTorch仅在今年(2017年)发布。 就像Jeremy之前写的那样,你应该假定你今天学到的任何特定的库和软件都会在一两年内被淘汰。最重要的是理解底层概念,为此,我们在Pytorch上创建了自己的库,我们相信深度学习概念更清晰,并将最佳实践编码为默认值。

Python是深度学习中最常用的语言。有许多深度学习库可供选择,几乎所有主要科技公司都支持不同的库,尽管这些公司的员工经常使用各种工具。深度学习库包括TensorFlow(谷歌),PyTorch(Facebook),MxNet(华盛顿大学,由亚马逊改编),CNTK(微软),DeepLearning4j(Skymind),Caffe2(也是Facebook),Nnabla(索尼),PaddlePaddle(百度),以及Keras(在此列表中的其他几个库之上运行的高级API)。所有这些都有可用的Python选项。

动态与静态图计算

在fast.ai,我们优先考虑程序员可以进行实验和迭代(通过更容易的调试和更直观的设计)比理论性能提速更重要的速度。这就是我们使用PyTorch的原因,PyTorch是一个具有动态计算功能的灵活的深度学习库。

深度学习库之间的一个区别是它们是使用动态还是静态计算(一些库,如MxNet和现在的TensorFlow,两个都允许)。动态计算意味着程序按照你编写的顺序执行。这通常使得调试更容易,并且更容易将你的想法转换成代码。静态计算意味着你预先为你的神经网络构建一个结构,然后对其执行操作。从理论上讲,这允许编译器进行更大的优化,尽管这也意味着在你的程序和编译器执行的程序之间可能存在更多的断开。这也意味着,错误可能会更多地从导致错误的代码中移除(例如,如果你在构建图形时存在错误,那么直到你稍后执行操作时,你才可能意识到)。尽管理论上有静态计算图的语言比具有动态计算的语言具有更好的性能,但我们常常发现,在实际中,这种情况并非如此。

谷歌的TensorFlow大多使用静态计算图,而Facebook的PyTorch使用动态计算。(注:TensorFlow在两周前宣布了一个动态计算选项Eager Execution,然而它还很早,大多数TensorFlow文档和项目都使用静态选项)。今年9月,fast.ai宣布,我们选择了PyTorch而不是TensorFlow来在今年的课程中使用,并用于开发我们自己的库(PyTorch的高级包装器,用于编码最佳实践)。简单地说,下面是我们选择PyTorch的几个原因(在这里更详细地解释):

  • 更容易调试
  • 动态计算更适合于自然语言处理
  • 传统的面向对象的编程风格(这对我们来说更自然)
  • TensorFlow使用如范围和会话等不寻常的约定可能会令人困惑,而且需要更多的学习

谷歌已经投入了比任何其他人更多的资源来营销TensorFlow,我认为这是TensorFlow如此知名的原因之一(对于许多深度学习以外的人来说,TensorFlow是他们听说过的唯一的DL框架)。 如上所述,TensorFlow几周前发布了一个动态计算选项,解决了上述一些问题。 许多人都在问fast.ai我们是否要切换回TensorFlow。动态选项还是相当新的,而且还不太成熟,所以我们现在会继续使用PyTorch。 然而,TensorFlow团队非常乐意接受我们的想法,我们很乐意看到我们的fastai库被移植到TensorFlow。

注意:我们更新的课程的个人版本,其使用PyTorch以及我们自己的fastai库,目前正在进行。课程结束后将免费在线发布(预计发布时间:1月)。

你生产所需要的东西:不是GPU

许多人把生产中深度学习的想法过于复杂,认为他们需要比他们实际做的更复杂的系统。你可以在生产中使用CPU和你选择的网络服务器进行深入学习,事实上,这是我们推荐的大多数使用情况。 这里有几个关键点:

  • 生产中进行训练是非常罕见的。即使你想每天更新你的模型权重,你也不需要在生产中进行训练。这意味着你只是在生产过程中进行推理(通过你的模型向前传递),比培训更快更容易。
  • 你可以使用任何你喜欢的Web服务器(例如Flask),并将其设置为简单的API调用。
  • 如果你能够有效地批量处理数据,GPU只会提供更快的速度。 即使你每秒获得32个请求,使用GPU也可能会使你减慢速度,因为从第一次到达收集全部32个时,你必须等待一秒钟,然后执行计算,然后返回结果。 我们建议在生产中使用CPU,并且可以根据需要添加更多的CPU(比使用多个GPU更容易)。

对于大公司来说,在生产中使用GPU可能是有意义的——然而,当你达到这个规模的时候,这将会是明确的。过早地尝试在需要之前进行扩展只会增加不必要的复杂性,并会使你放慢速度。

你需要的背景:1年的编码

激励我和Jeremy为程序员创建用于编码的实践深度学习的一个挫折是,大多数深度学习材料分为两类:

  • 如此肤浅和高水平,以至于不能提供实际在工作场所深度学习所需的信息或技能,或创造出最先进的模型。如果你只是想要一个高层次的概述,这是好的,但如果你想成为一个有工作的从业者,那就太令人失望了。
  • 高度理论化并承担研究生水平的数学背景。对于许多人来说,这是一个阻挡的障碍,即使是有数学博士学位的人,我也发现这个理论在学习如何编写实用的解决方案方面并不是特别有用。许多材料都有这个倾向并不奇怪。直到最近,深度学习几乎完全是一门学科,很大程度上是由在顶级学术刊物上发表的内容引发的。

我们免费的实践深度学习课程的独特之处在于,唯一的先决条件是1年的编程经验,但它仍然教你如何创造最先进的模型。你的背景可以是任何语言,但在开始课程之前你可能需要学习一些Python,因为这是我们所使用的。我们根据需要介绍数学概念,我们不建议你尝试提前学习数学理论。

如果你不知道如何编写代码,我强烈建议学习,如果你对数据科学感兴趣的话,Python是一个很好的语言。

你需要的数据:远远低于你的想象

虽然很多人声称你需要Google大小的数据集来深入学习,但这是错误的。迁移学习的力量(结合数据增强等技术)使得人们可以将预先训练的模型应用于更小的数据集。 正如我们在别处谈到的那样,在医疗初创企业Enlitic,Jeremy Howard领导的一个团队只使用了1000例肺癌CT扫描与癌症相比,建立了一个比一组4位专家放射科医师更准确的诊断肺癌的算法。C ++库Dlib有一个例子,其中一个人脸检测器只使用4个图像进行精确训练,只包含18个人脸!

关于入门的说明

对于绝大多数与我交谈的人来说,进入深度学习的门槛远远低于他们的预期,成本也在预算之内。但是,我意识到事实并非如此。我定期联系想要参加我们的在线课程,但无法承担AWS成本的学生。不幸的是,我没有办法。同时还有其他的障碍。BrunoSánchez-Nuño撰写了关于在没有可靠互联网接入的地方进行数据科学的挑战,而且国际学者Tahsin Mayeesha在孟加拉国等国家描述了MOOC访问的隐藏障碍。我关心这些入门的问题,然而这是无解的。


本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《What you need to do deep learning》,作者:Rachel Thomas译者:董昭男,审校:李烽

文章为简译,更为详细的内容,请查看原文

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
打赏
0
0
0
0
1807
分享
相关文章
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
144 3
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
深度学习入门:从理论到实践
【9月更文挑战第22天】本文将带你走进深度学习的世界,从基础的理论概念出发,逐步深入到实践应用。我们将探讨神经网络的工作原理,以及如何通过编程实现一个简单的深度学习模型。无论你是初学者还是有一定基础的学习者,都能在这篇文章中找到有价值的信息。让我们一起揭开深度学习的神秘面纱,探索这个充满无限可能的领域吧!
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
94 7

热门文章

最新文章