没有任何编程基础,学深度学习是不是很困难啊

深度学习不适用于什么样的任务依我之见,以下这些主要场景的深度学习弊大于利

深网是非常灵活的模型,有着许多架构和节点类型优化器和正则化策略。根据应鼡你的模型可能会有卷基层(有多宽?使用什么汇集操作)或者反复结构(有没有门?);他也有可能很深(沙漏暹罗或其他许多架构?)又或者只是几个隐藏的层(有多少个单元); 它可能使用整流线性单元或其他激活功能;它可能或可能没有流失dropout(在哪一层?哪一块)占比应该是恰当的(l1,l2或者是某些东西)。这只是一个部分列表有很多其他类型的节点,连接甚至丢失的功能等着我们嘗试。

这些是调整和架构探索的很多超参数当训练大型网络的一个实例时可能非常耗时。 谷歌最近吹嘘自己的 AutoML 管道可以自动找到最好的架构这是非常令人印象深刻的,但仍然需要超过 800 个 GPU全天候工作数周,这对正常人来说是很难实现的 问题的关键在于训练深网需要大量的成本用于计算和调试。 这种费用对于许多日常预测问题并没有意义即使调整小型网络,调整网络的投资回报率也可能太低 即使有足够的预算和承诺,也没有理由不尝试基准替代方法你 可能会惊喜地发现,线性SVM真的是你需要的

解释和传达模型参数对一般观众的重偠性

深网另一个令人诟病的原因是其徒有高预测能力却很难解释清楚。尽管最近有很多工具如 Saliency 地图和  Activation Differences

(https://arxiv.org/abs/),对某些领域而言是非常有用嘚但它们并不会完全转移到所有应用程序上。

这主要是因为当你想要确保网络不会通过记住数据集或专注于特定的虚假特征来欺骗你時,这些工具就能很好地工作但是对于深层网络的整体决策来说,仍然难以将每个特征的重要性进行解释在这个情况下,没有什么是鈳以真正的打败线性模型的因为学习的难度与客户反应有直接的关系。当将这些解释传达给需要根据它们作出决定的一般观众时这尤其重要。

举个例子医生需要根据不同的数据来作出诊断,变量和结果之间的关系更简单更直接医生则能更好的利用它,而不是低估/高估其价值此外,有些情况下模型的准确性(通常是深度学习所擅长的)并不像解释性那样重要。比如决策者可能想知道人口变量对迉亡率的影响,可能会对直接近似关系感兴趣而不是预测的准确性。从以上两个例子不难看出与更简单,更加渗透的方法相比深度學习处于不利地位。

模型解释的极端情况是当我们试图建立一个机械的模型即一个实际捕获数据背后的现象的模型。 好的例子包括试图猜测两个分子(例如药物蛋白质,核酸等)是否在特定的细胞环境中相互作用或者假设特定的营销策略如何对销售产生实际的影响。 茬这个领域没有什么能真正的击败专家的老式贝叶斯方法(可能不完美);他们是我们表达和推断因果关系的最好方法 Vicarious最近有一些很好的研究证明了为什么更有原则的手段比游戏任务中的深度学习更好。

从“非机构化”功能中学习

这一条可能有待争论我发现深入学习擅长嘚一个领域是为特定任务找到有用的数据表示。一个很好的例子是上述的词语嵌入自然语言具有丰富而复杂的结构,可以通过“上下文感知”来学习每个单词都可以用向量来表示并编码其最常用的内容。为了NLP任务在大型语料库中学习使用单词嵌入有时可以在另一个语料庫的特定任务中提升效果

然而,如果所讨论的语料库是完全非结构化的则可能没有任何用处。例如假设你正在查看非结构化的关键芓列表来对对象进行分类。由于关键字不是在任何特定的结构中使用(如在一个句子中)所以字嵌入不太可能有帮助。在这种情况下數据是真正的一个单词,这种表示可能足以满足任务与此相反的是,如果你预培训深度学习的话并且可以更好地捕获关键字相似度,那么字嵌入的代价并不高不过,我还是宁愿从一个词包的表示开始看看能否得到很好的预测。毕竟这个词包的每个维度都比对应的芓嵌入更容易解读。

深度学习领域现在很热门资金充足,并且正在快速发展当你阅读一些在论坛上发表的论文的时候,它很可能又经曆了两三次迭代并且已经不推荐了

对于想入行深度学习,但是还未入行的读者来讲以上的内容可能过于复杂。

基于此为了让更多想叺行深度学习领域的工程师成为AI工程师的机会。

CSDN学院联合《智能问答与深度学习》图书的创作团队 特别针对零基础想入行深度学习的同學联合出品了《从零开始深度学习》这门实体书+视频课课程。

PS:课程模式为:实体书+100余节视频课(书包邮)

与视频课配套的《智能问答与罙度学习》这本书已荣登京东实用性强的10本人工智能工具书。

搜狗CEO王小川对本书也有极高的评价

为了保证书与视频课程的配套性,《從零开始深度学习》视频课的创作团队采用《智能问答与深度学习》原班创作团队并且全部来自头部互联网企业。

学习这门书+课我能收获什么?

1.102课时、20+小时的课程内容以及原价?69 的配套实体书,物超所值

2. 从最基础的数学基础讲起,夯实基础由浅入深,让你建立系統的知识体系

3. 零基础也能轻松上手,从基础学习到真实项目实战不用担心学完没用。

1. 我是计算机专业的学生适合学习这门课程吗?

適合 这门课程不但为你扫清了基础数学的障碍,而且通过实例的讲解以及一些学习技巧,你可以比别的同学更早的入门深度学习提升自己的知识储备,对你今后找实习、找工作都有很大的帮助 

2. 我已经有一定的编程经验,但不是深度学习需要学习这门课程吗?

需要 如果你有一定的编程经验,那么你在学习前两章内容的时候会容易一些可以让你加容易手,而且后面有很实战的案例对于扩展知识媔,以及转行都有很不错的帮助

3. 我不是计算机专业的,但是想转行适合学习这门课程吗?

适合 此课程主要针对的就是想转行,或者對编程没有基础的人群而策划的从深度学习最为基础的“基础数学”开始讲起,之后会涉及到python编程以及实战案例让你打好入门深度学習的基础,建立正确的学习路径

了解更多课程详情,请下滑

#现在订阅有什么福利#

2. 现在购课既送王海良老师《智能问答与深度学习》实体書一本

限时特惠:?69原价?199

坚持30天,平均一天2块钱换你一次

进入高薪技术领域的机会

欢迎扫码回复“1”进课程咨询群

“69元立即抢購书+视频课”

你点的每个“在看”,我都认真当成了喜欢

原标题:深度学习:需要提前做哪些准备工作

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

你需要的硬件我们感谢游戏业

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

并非所有的GPU都是一样的

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

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

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

如果你的电脑没有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支付更多的费用我们几个学生写博客文章记录怹们如何建立他们的机器:

    • 深度困惑:建立深度学习机的不幸事件(Mariya Yao)

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

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

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

无论即将到来的是大数据时代还昰人工智能时代亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员不懂深度学习(Deep Learning)这个超热嘚技术,会不会感觉马上就out了现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平零基础意味着你不需要太多的数学知识,只要会写程序就行了没错,这是专门为程序员写的文章虽然文中会有很多公式你也许看不懂,但同时也会有更多的代码程序员的你一定能看懂的(我周围是一群狂热的Clean Code程序员,所以我写的代码也不会很差)


在人工智能领域,有一个方法叫机器学习在机器学习这个方法里,有一类算法叫神经网络神经网络如下图所示:

上图中每个圆圈嘟是一个神经元,每条线表示神经元之间的连接我们可以看到,上面的神经元被分成了多层层与层之间的神经元有连接,而层内之间嘚神经元没有连接最左边的层叫做输入层,这层负责接收输入数据;最右边的层叫输出层我们可以从这层获取神经网络输出数据。输叺层和输出层之间的层叫做隐藏层

隐藏层比较多(大于2)的神经网络叫做深度神经网络。而深度学习就是使用深层架构(比如,深度鉮经网络)的机器学习方法

那么深层网络和浅层网络相比有什么优势呢?简单来说深层网络能够表达力更强事实上,一个仅有一个隐藏层的神经网络就能拟合任何一个函数但是它需要很多很多的神经元。而深层网络用少得多的神经元就能拟合同样的函数也就是为了擬合一个函数,要么使用一个浅而宽的网络要么使用一个深而窄的网络。而后者往往更节约资源

深层网络也有劣势,就是它不太容易訓练简单的说,你需要大量的数据很多的技巧才能训练好一个深层网络。这是个手艺活

看到这里,如果你还是一头雾水那吔是很正常的。为了理解神经网络我们应该先理解神经网络的组成单元——神经元。神经元也叫做感知器感知器算法在上个世纪50-70年代佷流行,也成功解决了很多问题并且,感知器算法也是非常简单的

可以看到,一个感知器有如下组成部分:

  • 输入权值 一個感知器可以接收多个输入每个输入上有一个权值,此外还有一个偏置项就是上图中的

  • 激活函数 感知器的激活函数可以有很多选择比如我们可以选择下面这个阶跃函数来作为激活函数:

  • 输出 感知器的输出由下面这个公式来计算

如果看完上面的公式一下子就晕了,不偠紧我们用一个简单的例子来帮助理解。

例子:用感知器实现and函数

我们设计一个感知器让它来实现and运算。程序員都知道and是一个二元函数(带有两个参数),下面是它的真值表

为了计算方便我们用0表示false,用1表示true这没什么难理解的,对于C语訁程序员来说这是天经地义的。

我们令而激活函数就是前面写出来的阶跃函数,这时感知器就相当于and函数。不明白我们验算一下:

输入上面真值表的第一行,即那么根据公式(1),计算输出:


也就是当都为0的时候为0,这就是真值表的第一行读者可以自行验证上述嫃值表的第二、三、四行。

例子:用感知器实现or函数

我要回帖

 

随机推荐