入门深度学习真的很困难吗?从这几方面下手轻松破解!

2024-04-12 20:38

本文主要是介绍入门深度学习真的很困难吗?从这几方面下手轻松破解!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图:Pixabay

本文经公众号「雷克世界」授权转载(微信号:ROBO_AI)

原文来源:fast.ai

作者:Rachel Thomas

「雷克世界」编译:嗯~阿童木呀


对于想要入门深度学习的新手来说,可能会存在以下几个问题:我需要什么样的电脑来学习深入学习?对初学者来说什么样的深度学习库比较合适?该如何将深度学习投入到生产中?我认为所有这些问题都都涵盖在一个主题之下,即在深度学习中需要的硬件、软件、背景和数据是什么样的?这篇文章就是专门针对那些刚接触深度学习这个领域,并且对入门感兴趣的新手们的。


你需要的硬件


真的要非常感谢游戏产业。


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


并非所有的GPU都是一样的


大多数深度学习从业者并不是直接对GPU进行编程,我们正在使用软件库(如PyTorch或TensorFlow)来处理这个问题。但是,想要有效使用这些库,你需要使用正确类型的GPU。


CUDA和OpenCL是进行GPU编程的两种主要方式。CUDA是迄今为止开发最为完善的、拥有最广泛的生态系统,并且得到深度学习库最有力的支持。CUDA是由Nvidia创建的专有语言,因此它不能被其他公司的GPU使用。


今年夏天,AMD宣布发布一个名为ROCm的平台,为深度学习提供更多的支持。而ROCm对于诸如PyTorch、TensorFlow、MxNet和CNTK等主要的深度学习库,目前仍处于开发阶段。虽然我非常希望看到一个开源的替代方案能够取得成功,但不得不承认,我发现ROCm的文档难以理解。我刚刚阅读了ROCm网站的概述、入门和深度学习页面,但仍然不能用我自己的话来对ROCm进行一个概述,尽管我想在这里把它涵盖在内以便更为完整。(我虽然没有硬件背景,但我认为像我这样的数据科学家应该成为该项目目标受众的一部分。)


如果你没有GPU 


如果你的电脑没有GPU,那么你有以下几个很好的选择:


•通过浏览器使用Crestle:Crestle是一个服务器(由fast.ai学生Anurag Goel开发),它能够为你提供一个已经建立好的云服务,其中,所有的流行科学和深度学习框架都已预先安装和配置好以在云端的GPU上得以运行。它很容易通过你的浏览器进行访问。新用户可免费获得10小时和1 GB的存储空间。之后,GPU的使用费用为每小时59美分。对于那些刚接触AWS或刚开始使用console的新手们来说,这是一个不错的选择。


•通过你的控制台设置AWS云实例:你可以按照本fast.ai设置课程中的步骤创建一个AWS实例(能够远程为你提供Nvidia GPU)。AWS为此每小时收取90美分。尽管我们的设置材料都是关于AWS的,但是一位fast.ai的学生创建了一个用于深度学习的Azure虚拟机的指南。如果有人写关于Google云端引擎的博客文章,我很乐意分享该链接。


•构建你自己的盒子。以下是我们fast.ai论坛中一个非常冗长的话题,人们可以在其中提出问题、分享他们正在使用的组件,并发布其他有用的链接和提示。最便宜的新型Nvidia GPU是300美元左右,一些学生在eBay或Craigslist上发现了更为便宜的二手GPU,而另外一些则要为更强大的GPU支付更多的费用。我们的一些学生写了篇博文,记录了他们是如何构造自己的机器的:


1.Mariya Yao所写的《深度困惑:在构建深度学习机过程中的不幸经历》。

https://www.topbots.com/deep-confusion-misadventures-in-building-a-machine-learning-server/


2.Sravya Tirukkovalur所写的《以一种懒惰而快速的方式构建一个深度学习机》。

https://medium.com/impactai/setting-up-a-deep-learning-machine-in-a-lazy-yet-quick-way-be2642318850


3.Brendan Fortuner所写的《创建自己的深度学习盒》

https://towardsdatascience.com/building-your-own-deep-learning-box-47b918aea1eb


你所需要的软件


可以说,深度学习是一个相对不成熟的领域,因此相应的库和工具变化速度非常快。例如,我们在2016年课程中选择使用的Theano,现在已经不再使用了。而我们目前使用的PyTorch,则是在今年(2017年)刚刚发布的。就像Jeremy以前所写的那样,你应该要保持这样一种假设,你今天所学到的任何特定的库和软件都将在一两年内被淘汰。而在这个过程中,最重要的是理解底层概念。为此,我们在Pytorch上创建了自己的库,我们相信这将使深度学习概念更为清晰。


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


动态与静态图计算


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


深度学习库与库之间的一个区别在于,它们是使用动态还是静态计算(诸如MxNet和现在的TensorFlow,是两者都允许的)。动态计算,意味着程序是按照你所编写的顺序执行的。这通常会使调试更为容易,并且使得将想法从大脑中转换成代码变得更为直接、简单。静态计算,意味着你要预先为你的神经网络构建一个结构,然后在上面执行操作。从理论上讲,这使得编译器能够进行更好的优化,尽管这同时也意味着你预计程序能做的和编译器真正执行的内容之间可能会有更多的脱节。另外,这还意味着,bug可能会更多地从导致其产生的代码中移除(例如,如果在构建图表时出现错误,你可能不会意识到,直到稍后你在上面执行一个操作)。即使从理论上来看,使用静态计算图的语言要比使用动态计算的语言具有更好的性能,但我们经常发现,在实践中并非如此。


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


•更容易调试


•动态计算更适合于自然语言处理


•传统的面向对象的编程风格(于我们而言更自然)


•TensorFlow使用诸如scope(范围)和session(会话)等不寻常的协议可能会令人感到困惑,而且还有更多的东西要学习。


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


在生产过程中需要什么:不是GPU


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


•在生产过程中进行训练是极其罕见的。即使你想每天更新模型权重,也不需要在生产中进行训练。这是一个好消息!意味着你只是在生产过程中进行推理(通过你的模型正向传递),而这要比训练快得多、简单得多。


•你可以使用任何你所喜欢的Web服务器(例如Flask),并将推理设置为一个简单的API调用。


•如果你能够有效地批量处理数据,那么GPU将会提供更快的速度。即使你每秒收到32个请求,使用GPU的话都很可能会使你减慢速度,因为从第一个请求到达直到收集全部32个请求时,你必须要等一段时间,继而执行计算,然后返回结果。我们建议在产品中使用CPU,并且可以根据需求添加更多的CPU(比使用多个GPU要简单得多)。


对于大公司来说,在产品中使用GPU可能是有意义的,而当你达到这个公司大小的时候这一点就会很清楚了。在没有需求之前过早地尝试进行扩展只会增加不必要的复杂性,并让你的速度慢下来。


你所需要的背景:1年的编程经验


激发Jeremy和我创建《程序员实用性深度学习》(http://www.fast.ai/2017/11/16/what-you-need/course.fast.ai)的挫折之一是,大多数深度学习材料分为两类:


•要么太浅,要么太深,以至于不能提供实际在工作场所或创建最先进的模型时使用深度学习所需要的信息或技能。如果你只是想要一个概述,那这就足够了,但如果你想成为一个工作实践者,这可能会令你失望。


•高度理论化并假设具有研究生水平的数学背景。对于许多人来说,这是一个令人望而却步的的屏障。我还发现,即使是有数学博士学位的人,在学习如何对实用性解决方案编程方面,这个理论并不是非常奏效。其实,许多材料都有这个倾向并不奇怪。直到最近,深度学习还几乎完全是一门学科,很大程度上是由发表在顶级学术期刊上的问题所驱动发展的。


我们免费编程课程《程序员实用性深度学习》独特之处在于,唯一的先决条件是1年的编程经验,而这只是教你该如何创造最先进的模型。其实,你的学科背景可以是任何语言,但在开始课程之前你可能会想学习一些Python,因为这是我们将要使用的。我们根据需要引入数学概念,但我们不建议你提前尝试学习数学理论。


如果你不知道如何编写代码,强烈建议去学习,而且如果你对数据科学感兴趣的话,Python会是一个不错的语言选择。


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


虽然很多人声称,你需要Google大小的数据集来进行深度学习,其实这是错误的。迁移学习的力量(结合数据增强等技术)使得人们可以将预先训练的模型应用于更小的数据集中。正如我们曾经在此处(http://www.fast.ai/2017/08/21/ai-in-medicine/)探讨过的那样,在医疗初创企业Enlitic里,Jeremy Howard领导的一个团队只使用了1000例肺癌CT扫描的样本,就建立了一个要比4位专业放射科医生更为精确的肺癌诊断算法。C ++的Dlib库有一个样本,其中一个人脸检测器只使用包含18张人脸的4个图像便可以进行精确训练!


关于访问的说明


对于我所接触过的绝大多数人来说,深度学习的入门门槛远远低于他们的预期,而且成本也在预算之内。但是,我意识到事实并非如此。我定期联系那些想要参加我们的在线课程,但无法承担AWS成本的学生。不幸的是,我并没有解决方案。除此之外还有其他的困难,Bruno Sánchez-A Nuño写了关于在没有可靠互联网接入的地方进行数据科学的挑战所在(https://towardsdatascience.com/in-defense-of-cheap-data-science-f630f248d400),而且国际学者Tahsin Mayeesha描述了在孟加拉国等国家进行MOOC访问的隐藏障碍。我很关心这些关于访问的问题,而令人满意的是至今没有解决方法。


目前有10000+人已关注加入我们,欢迎您关注

       

       


点击下方“阅读原文”报名 ↓↓↓

这篇关于入门深度学习真的很困难吗?从这几方面下手轻松破解!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898184

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题: