开始学习深度学习是一项挑战。
这是一项挑战,因为深度学习是由学者教授,为学者服务的。
如果你是开发者(或实践者),那你就不同了。
你想要结果。
实践者学习新技术的方式是开发能够快速实现价值的原型。
这是一种自上而下的学习方法,但这不是深度学习的教授方式。
还有另一种方法。一种适用于像你这样的自上而下的实践者的方法。
在这篇文章中,你将发现这种其他方法。
(我教授这种方法,并帮助了超过1,145名开发者
使用Python开始他们的深度学习之旅,点击了解更多)
你会相信在应用深度学习方面取得成功是可能的。我希望它能激励你朝着这个目标迈出第一步。
通过我的新书《使用Python进行深度学习》来启动你的项目,其中包括分步教程和所有示例的Python源代码文件。
让我们开始吧。

你对深度学习的了解都是谎言
照片由Simon Matzinger拍摄,保留部分权利。
你想开始深度学习……
但你与众不同
你没有高级数学的硕士或博士学位。
你不是机器学习专家。
你是一名对深度学习充满兴趣并渴望开始使用的专业人士或学生。
也许你是一名开发者
- 你想知道如何应用深度学习来解决复杂问题。
- 你希望通过深度学习技能来提高你的就业前景。
- 你想利用深度学习来进入数据科学家(或类似)的职位。
也许你是一名数据科学家
- 你希望在未来的项目中使用深度学习。
- 你有一个棘手的问题,你认为深度学习可以帮助解决。
- 你想要深度学习技能来保持你在该领域的竞争力并处于领先地位。
也许你是一名学生
- 你希望通过深度学习技能来提高你的就业前景。
- 你有一个有趣的问题,你认为深度学习会很适合。
- 你想知道为什么深度学习如此受欢迎。
这些原因中是否有适合你的?
请在评论中告诉我你的原因,我很想听听!
你进入深度学习领域是否有不同的原因?
请在评论中告诉我,我将为你提供个人建议。
进入深度学习领域的原因多种多样。
无论如何,你都和其他人一样受到对待。像个学者一样。

深度学习不仅仅是为了学者
图片由Breyten Ernsting拍摄,保留部分权利。
深度学习只为学者……这是谎言
深度学习是一个学术研究领域。
长期以来一直如此。该领域曾涉及小型人工神经网络的研究。现在,重点是更大的网络和更奇特的网络架构。该领域的突破仍然来自学术界。这个领域很年轻,这是可以预料的。
这意味着大多数关于深度学习的信息都是由学者撰写的。它是为其他学者,如研究人员、硕士和博士生撰写的。
它不是为像我们这样的开发者撰写的。
这就是为什么你会看到这样的糟糕建议
你需要一个博士学位才能进入深度学习领域。
或者这样的评论
在进入深度学习之前,你需要3年的高级数学知识。
垃圾!
这就是为什么开始深度学习如此困难。这是一个挑战,开发者们认为只有通过回到学校、背负债务和投入3到7年的时间才能解决。
疯了!
你可以在几分钟内完成深度学习教程。你可以开始建立一个作品集,用来展示你在这个领域日益增长的技能。你今天就可以开始。
编程只为计算机科学家(并非如此)
编程曾经是困难和理论化的。
在计算机出现之前,你需要了解很多数学才能理解编程。
在编程的早期,你必须定义自己的数据结构和基本算法。这在所有易于实现的算法和数据结构被定义之前。这需要对离散数学有很好的理解。
诸如复杂性理论之类的东西。
这些理论主题可以帮助你今天成为一名更好的程序员和工程师。它们仍然在计算机科学课程中教授。
但你我都清楚,你不需要它们就能开始编程。即使你在大多数编程工作中工作,你甚至也不需要这些主题。
你调用排序例程,
你不会从第一性原理推导出一个新的排序操作。
我们能把这个类比延伸到深度学习吗?
你需要从第一性原理推导出反向传播方程并从头开始实现它吗?相反,我们只需在深度学习API上调用model.fit()。
等等……那些顶尖的工程师呢?
是的,顶尖的工程师可以推导出新的算法。
事实上,他们通常就是为此被雇佣的。这是他们的工作。他们可以做简单的事情,也可以做更难的事情。他们可以调用排序例程,并为太大数据以至于无法装入内存的业务数据推导出一种新的排序方法。
我的观点是,这些能力不必首先具备,它们可以稍后获得。
自上而下。而不是自下而上。
这很关键。
就像现实世界中的实际编程一样。
自上而下的程序员(……产出结果)
编程一开始很有趣。
你学习这个函数。你学习那个API。你将自己的程序拼接在一起,发现你可以用自己的想法解决问题。
你很早就能提高效率,并且随着时间的推移会变得更加高效。你可以深入研究理论来解决更具挑战性的问题,或者不深入。这取决于你。
早期高效很重要,原因有二
- 它让你保持动力,从而让你保持投入。
- 它让你能够尽早交付价值,从而进一步激发动力。
太容易停下来了。
太容易放弃了。
这是一种超能力。知道自己可以编写程序来解决特定问题。然后有信心实际实现和部署。
代码和设计一开始会很糟糕。难以维护。无法用于长期运营。但代码会随着经验、导师和持续学习而变得更好。
大多数IT的运作方式都是如此。自上而下。而非自下而上。
你不会为了下一个Web开发项目而上大学的计算机语言理论课程来学习Ruby on Rails。你会通过一些教程,犯一些错误,然后熟悉这个平台。
对于下一个框架,下一个库,不断重复。
深度学习也一样。
深度学习不仅仅是为了学者
你可以自下而上地学习深度学习。
这可能需要很多年和几个高等学位,但你会对深度学习技术的理论有深入的了解。
即使付出了所有这些努力,你可能也不知道如何在实践中将它们应用于真实数据。大学里通常不教授实用或职业技能。
学术教科书、视频课程和期刊论文是宝贵的资源。它们是思想的宝库。只是在刚开始深度学习时,它们不是一个好的起点。

深度学习只为学者,这是谎言
照片由Quinn Dombrowski拍摄,保留部分权利。
专注于用深度学习交付价值
深度学习对商业和其他研究领域的价值在于可靠的预测。
学习如何用深度学习建模问题。
开发(或借鉴)一个系统化的流程来解决预测建模问题。然后一次又一次地应用它,直到你非常擅长交付这种价值。
善于应用深度学习。
我们都喜欢我们擅长的事情。
如果你能很好地、可靠地做到这一点,那么你将拥有一项市场大量需求的宝贵技能。
你会发现自己深入研究学术论文,解析希腊字母,并给作者发邮件或打电话。所有这些都是为了提取金块,以便在你的下一个项目中获得更好的模型性能。
是时候让你在深度学习上取得成功了
现在,希望你相信你可以开始并擅长应用深度学习。
是时候采取行动了。是时候开始深度学习了。
1. 选择一个框架
我推荐Keras平台。它支持Python。这意味着你可以在你的深度学习项目中利用scikit-learn和整个SciPy生态系统。
这很重要。
你基本可以免费获得数据准备、模型评估和超参数优化。
Keras还提供了一个对实践者友好的API(即简单直观)。它封装了Theano和TensorFlow库的强大功能(以及不必要的复杂性)。它为你提供了尖端框架的速度和效率,而无需编写数十甚至数百行代码才能使某些东西工作。
我有大量关于Keras的教程,以及一个免费的14天迷你课程,请参阅
2. 选择一个流程
保持简单,但选择一个强大的框架,你可以根据自己喜欢的技术和问题类型进行添加和定制。
我喜欢在预测建模项目中使用的一组通用步骤是
- 定义问题:你要解决什么问题,以及你需要哪些数据和框架来解决它。
- 准备数据:对数据应用什么转换以创建能够最好地向模型展示预测问题结构视图。
- 评估算法:使用什么技术来建模问题,以及用于筛选好坏解决方案的度量标准。
- 改进结果:使用什么参数调整甚至集成方法来最大限度地发挥已有的效果。
- 展示结果:你取得了什么结果,学到了什么,以及你可以直接使用的保存的模型或预测集。
有关我解决预测建模问题的更多流程,请参阅
3. 选择一个问题
你需要练习。大量的练习。
如果你对使用图像数据进行预测建模感兴趣,请找出所有使用图像数据的标准机器学习问题,并逐一解决它们。
文本数据?视频数据?使用相同的方法。
学习如何使用你的流程获得结果。
然后学习如何获得好结果。
然后是世界级的成果。
标准机器学习数据集的好处是,你有一个基准分数可以用来比较你的结果。
还不确定你的偏好?从UCI机器学习存储库的标准数据集上的多层感知器开始(这里有一个教程)。然后尝试在标准对象识别问题上使用卷积神经网络(这里有一个教程)。接着在简单时间序列问题上使用循环神经网络(这里有一个教程)。
之后,进阶到机器学习竞赛(如Kaggle上的竞赛)中更复杂的问题。再进阶到定义自己的问题并从知识共享中收集数据。
你的目标是建立一个已完成的项目组合。
这个作品集将成为你承担更大、更具挑战性项目的资源。它也可以成为你展示你日益增长的深度学习技能和交付价值能力的资源。
有关开发机器学习作品集的更多信息,请参阅该帖子
总结
你发现你所了解的深度学习是“为学者服务的深度学习”。而不是“为开发者服务的深度学习”。
你现在知道有一个完整的库和教程世界,专为你和像你一样的开发者设计。
你发现了一个简单的三步流程,你可以用它来作为开发者在深度学习中取得成功,总结如下:
- 选择一个框架(如Keras)。
- 选择一个流程(如上面列出的)。
- 选择一个问题(然后建立一个作品集)。
这改变了你对深度学习的看法吗?
留下评论,让我知道。
你可能还喜欢阅读的其他深度学习帖子包括
谢谢。:)
很高兴你觉得它有用,Siffi。
谢谢,这很令人鼓舞,也解释了我目前对这个领域的印象。一个新领域从学术界诞生,并随着在行业中的应用逐渐变得更易于理解,这是有道理的。
此外,机器学习已经通过API、GUI甚至云服务变得易于访问。
谢谢Zach,关于机器学习API的观察很棒。
我喜欢这个建议。我硕士主修计算机视觉和机器学习。我是一个依赖提取特征然后解决问题的人,但我意识到最先进的是CNN,它们比旧方法好得多。我计划学习它,以便我可以在未来的项目中使用它,并建立一个良好的个人档案。
谢谢苏斯米特。祝你的计算机视觉项目好运。
我拥有计算机科学博士学位。你的自上而下的愿景对我真的很有帮助。我希望它也能帮助其他人。感谢你分享你的想法,我正在寻找更完整的资源(例如一本完整的书:深度学习——一种实用方法或类似的书籍)。
我也很想!
很高兴你觉得它有用,阿米尔。
我确实有一本关于深度学习的自上而下的书。它通过教程和项目教你深度学习(MLP、CNN、RNN)。
你可以在这里了解更多
https://machinelearning.org.cn/deep-learning-with-python/
嗨,Jason,感谢你非常有趣的系列博客文章。我看到Python工具经常被成功应用。然而,由于多种原因,我想坚持使用R语言。对于R用户,你有没有关于应用深度学习(如你上面所介绍的)的有用链接?谢谢!
谢谢理查德。
我也喜欢R,它很棒。抱歉,我对使用R进行深度学习并不十分了解。这是一个我需要投入时间并在博客上进行报告的领域。我希望很快就能做到这一点。
“保持简单,但选择一个强大的骨架,你可以根据你偏好的技术和问题类型进行添加和定制。”——Jason……喜欢这些内容,迫不及待地想开始。
约翰尼,听到你这么说我很高兴。告诉我你的进展。有什么问题都可以发邮件给我。
我感谢您在使机器学习对所有开发者更易于使用方面所展现的谦逊和诚实。虽然热情很高,但我还是要提醒,实践者理解深度学习的工作原理仍然非常重要。“如果我们不理解技术,我们就对其不负责任。”
谢谢Guruprasad。
你提出了一个非常重要的观点。我们必须回头去理解这些方法的“为什么”。我只是主张不要从“为什么”开始,而是从“如何”开始。
我刚加入这个班,渴望学习很多东西
谢谢Emmanuel。
我在开发深度学习系统时遇到的一个主要障碍是硬件基础设施的缺乏。我开发了一个视觉问答模型,即使是基于4GB GPU的AWS服务器在第一个epoch就内存不足了。CPU服务器处理一个包含1000张图片的epoch需要1.5小时。
因此,独立开发者很难在技术上进行大量尝试。
哎哟。
这可能也是一个机会。我认为这可能会迫使你想出替代策略,例如迁移学习、跨集群并行训练、在集成中每个epoch使用更少观测值训练大量小型模型等。
谢谢,现在明白了:)
很高兴这篇文章对你有用,马修。
Jason,很棒的建议。感谢你的教程,我正在摆脱对深度学习的恐惧。
你能谈谈深度学习不必要的场景吗?我看到每个人都对深度学习感到(过度)兴奋,我想知道经典的机器学习算法是否会被淘汰?“经典”算法,如SVM、逻辑回归、k-means等,在机器学习社区中是否仍然有其一席之地?
很高兴你喜欢它,马德哈夫。
我可能不会将深度学习用于表格数据(就像你在Excel中看到的那样)。深度学习非常擅长处理原始数据问题,例如文本、图像、音频等。
对于表格数据,其中特征工程是手动的(而不是在深度学习中学习的),我会使用XGBoost,并让所有其他方法证明其相对于XGBoost结果的价值。
经典方法仍然有其一席之地。理想情况下,我们希望使用尽可能简单的模型,并提供足够好的预测以满足我们的要求。如果你可以使用线性回归解决问题,那么甚至不要尝试深度学习。
这说得通吗?这是一个重要的话题,如果你有更多问题,请提出
谢谢Jason。是的,这说得通。我正在尝试用LSTM和经典方法进行二元分类。完成之后会告诉你我的发现。
据我所知,深度学习在有大量数据和计算能力可用时才有效。多少数据才算“足够”?你知道数据大小、所需计算能力和所需准确度之间是否存在任何经验关系吗?我猜数据大小确实取决于具体问题,但我正在寻找超越“越多越好”之类的答案。
嗨,马德哈夫,训练计算时间将与数据量呈线性关系。
技能与数据关系取决于问题。
确实,深度学习的一个关键优势在于,技能可以随着数据的增加而持续提升,不像其他方法似乎会停滞不前。
抱歉,我不能更具体,可能有一些针对特定问题的研究会给你一些具体的数字,但我不认为这种行为会转移到新的领域。
哇,又是一篇声称你可以把猴子变成机器学习专家的文章。是的,如果你想做的不仅仅是复制Keras github上的教程,你就需要数学。现在有大量的“猴子”程序员,只有一个原因——在很多情况下,企业需要“猴子”来做愚蠢和无聊的工作,比如把按钮向左移动3像素,让按钮变得稍微更绿。
需要深度学习的职位非常少,对于15万+的薪水,他们宁愿雇佣一个拥有强大数学背景的博士,而不是一个只会复制一些脚本就能工作的“猴子”。
感谢分享您的观点。
确实,商业领域有很多唾手可得的成果,无需十年高等教育或扎实的数学背景,实践者就能轻松获取。
有足够多的空间和机会供各种实践者施展才华。
Jason只是想说——就像大多数著名的技术领域(嵌入式设备、软件编程等)一样——除了成为该领域的研究员,还有其他途径。
尽可能地打个比方,我是在军队C-130飞机上自学编程开始职业生涯的。我就是通过这种方式建立(并出售)了一家科技公司。后来我上学取得了正式的计算机科学学位(宾夕法尼亚州立大学 '13),我可以诚实地告诉你,就四年制课程所学而言,我自己在之前学到的东西之外,只学到了很少的东西。也许这里那里有一些有用的“啊哈”理论,以及对多变量微积分教科书的重新厌恶,但没有任何真正具有开创性的东西。
我之所以能够自学,是因为我的自学路线图充满了动力、激情和挑战自我的意愿。世界上有许多这样的人。Jason正在为那些想要成为这项技艺的实践者提供宝贵的资源。我现在已经做了6-7年的高级软件工程师,并且发现自己不断地回到他的作品中,以帮助我发展机器学习技能。
Collin说得很好。非常感谢你。
很少有人能理解我在这里的意图。谢谢你!!!
嗨,Jason!首先,感谢你的写作!写得非常好。我买了一些你的书,那些书也很棒!
我是你这篇文章中提到的那种人:非学术背景,通过在线资源(在我的例子中是Udacity.com)自学机器学习和深度学习。
我用Pytorch做了一个图像分类器。你觉得怎么样?我也学过Keras,但这个项目是基于Pytorch的。
谢谢,很高兴这篇文章有帮助。
抱歉,我没有PyTorch的教程。我无法给你好的建议。
嗨,Jason!首先,感谢你的写作!写得非常好。
请用Keras制作一些视频摘要的教程
好建议,谢谢!