深度学习是当下计算机界火得不能再火的研究课题。作为一名计算机人,应当有不断学习当下最前沿技术的觉悟。但问题来了,深度学习领域的入门资料让人看花了眼,我实在不知道该从何学起。刚好在网上看到了Arthur Chan写的此篇文章,我试着(用谷歌)翻译了一下,给各位分享。文中观点不代表译者观点,同时不保证译文质量:)。
许多人问我该如何入门深度学习。坦白说这真是一个不好回答的问题——市面上的书籍和公开课不胜枚举,并且每个人的基础与学习目标也不尽相同。因此给出一个简单实用的学习清单实在不是一件容易的事情。
在本文中我会写出一系列我心目中最重要的学习资源,可以让你快速上手深度学习。在开始介绍之前,我想先和你聊聊我推荐这些资源的理由,以及这份清单与其他人的清单的区别。
推荐原则
网上的确有许多深度学习资源列表。我仅举几个例子:Awesome列表和Reddit机器学习常见问题解答。我认为它们列举的资源非常详尽,质量很高。
此列表并不是一个详尽的列表。相反,列表过于详尽并不是好事。一方面,我们假设您只有有限的时间用来收集资源和学习深度学习。例如,学习每一门在线课程可能需要至少3个月,而完成所有课程需要至少一年的时间。另一方面,没有任何指导,阅读Goodfellow的《深度学习》会让你感到困惑。而诸如Bishop的《模式识别和机器学习》(PRML)之类的书可能是一本更好的“入门书”。因此我们只给出了极少经典的、适合入门的资源。
此列表和其他资源列表之间的另一个区别是资源是经过我个人审核的。我基本亲自体验过列表中的内容。您还会看到一些对该资源简短的评论,诸如“为什么它们是有用的”。
列表正文
万事开头难,我们首先应该以什么资源开始呢?这是一个棘手的问题,因为每个人的学习能力和背景不同。我的建议是从以下开始。
1. 上课(包括网课) - 到目前为止,我认为这是最有效的学习方式。听课+做作业通常会教你很多。
2. 读书 - 这很重要,因为通常普通的课程只是总结一个主题。只有当您阅读某个主题的书籍时,您才会开始深入了解这个领域。
3. 使用框架 - 这使您可以实际创建一些深度学习应用程序,并在现实生活中将您的知识转变成技能
4. 阅读博客 - 这很有用,但您最好知道要阅读哪些博客(请参阅“推荐阅读的博客”部分)。现在博客作者太多了,他们可能自己都“以其昏昏”,更别提“使人昭昭”了。阅读这些只会让你感到更加困惑。
5. 加入论坛并提出问题 - 这是您可以提出一些想法并征求意见的地方。论坛的质量非常重要。所以看看“Facebook论坛”部分。
课程推荐
深度学习基础(更详尽的在这里)
如果你想对深度学习的术语有个大致了解,这就是必修课程。 Ng,Karparthy和Socher的课程能教你基本概念,并且能让你了解并建立自己的深度学习应用。Silver的课程将深度学习概念与强化学习联系起来。 因此,在这4个课程之后,您应该能够了解深度学习并能编写一些基本的深度学习应用程序。
-
Andrew Ng的Coursera机器学习课程
跑步前先得学会走路。 在我看来,Ng的课程是最好的机器学习初学者课程。 查看此页面以查看我的评论。 -
Andrew Ng的deeplearning.ai专业课程
在我看来,要想从Ng的机器学习课程过渡到最困难的课程(如cs231n和cs224n),这门课就是最好的选择。请参阅我对课程1和课程2的完整评论。还可以在这里查看我的quick impression,并瞻仰一下“深度学习的英雄”Geoffrey Hinton教授。 -
李飞飞和Andrew Karpathy的计算机视觉课程(Stanford cs231n 2015/2016)
我上过一次这门课。这门课的教师有大名鼎鼎的Karpathy,还有另一位经验丰富的研究生Justin Johnson。这门课主要讲CNN,还提及了一点困难的部分和最新技术,如图像定位,检测和分割。 -
Richard Socher的深度学习和自然语言处理(标准cs224d)
我上过一次这门课,当我试图理解RNN和LSTM时,前面提到的几个课程对我非常有用。这也可能是学习Socher递归神经网络的最佳课程。与Karpathy的课程相比,Socher更强调数学推导。因此,如果您不熟悉矩阵微分,那么这门课程将很适合你。 -
David Silver的强化学习
这是一个由AlphaGo的程序员教授的优秀课程。它从强化学习的基础开始,如基于DP的方法,然后进入更加困难的主题,如蒙特卡罗方法和时序差分方法,以及函数逼近和策略梯度。即使你已经有了监督学习的背景,也需要很长时间理解。强化学习被越来越多的应用程序使用,因此你应该学习(换句话说,学到强化学习已经是深入理解了。如果只要求入门,可以不学了!)。
你还可以参考:
-
Fast.ai出品的给程序员的深度学习课程
一个大体上不错的课程。 我建议你阅读Arvind Nagaraj的帖子,比较deeplearning.ai和fast.ai的课程。 -
深度学习理论
或Stanford Stat 385,这是深度学习的理论课之一。 -
Hugo Larochelle的神经网络课程
该领域的另一位明星级创新者。 我只是在深度学习课上听过Larochelle的讲座,但他讲得比任何人都简洁明了。 -
麻省理工学院自动驾驶课程6.S094
请参阅“强化学习”小节中的说明。 -
Nando de Freita的机器学习/深度学习课程
我没能上这门课,但它既适合初学者,也适合更高级的学习者。 它涵盖了强化学习和孪生神经网络等主题。 如果您想使用Torch作为深度学习语言,这门课肯定适合你。
中级深度学习
中级课程意味着更难 - 您必须有数学基础。即使你已经拥有硕士学位,也会遇到许多令人困惑的概念。
-
Hinton的神经网络与机器学习
Hinton教授的课可是为数不多的能讲明白深度学习与一般的机器学习方法之间的区别的课。我2016年10月第一次旁听该课程,他对基于统计力学模型的解释引起了我的注意。2017年4月左右我完成了该课程,然后我写了一篇课程的热门评论。不幸的是,由于课程的难度太高,它在这个列表中排名较低。 (一开始我把它排在总排名第2,基础排名第4,但我发现它需要对Karparthy,Socher和Silver的课程有深刻的理解。后来当deeplearning.ai出现时,我将Hinton教授的课程转移到中级课程列表。 ) -
Daphne Koller的概率图模型
如果你想了解像DBN这样的更艰深的概念,你也想了解贝叶斯网络,那Koller的课程就是为你准备的。但是这个课,就像Hinton的NNML一样,是出了名的困难 - 你会面对概率论、图论和算法和参数估计的挑战。
强化学习(RL)
强化学习本身历史悠久,你可以认为它脱胎于CS和EE。
我对RL的理解相当浅薄,所以我只能告诉你哪个课更容易,但所有这些课都是高级课程。佐治亚理工学院CS8803可以作为你的入坑课。 Silvers老师很有趣,参考书是Sutton的书,但是为了完成课上的练习,你可能得读一点其他的书。
-
Udacity的强化学习
这是由Udacity与佐治亚理工学院联合出版的课程,您可以把它看做高级CS8803。我首先参加了上面说的Silver的课程,但是这门课程对于没有深度学习经验而直接从强化学习开始的人相当友好(这段请看英文原文)。 -
David Silver的强化学习
请参阅“深入学习入门”部分中的说明。 -
麻省理工学院自动驾驶课程6.S094
自动驾驶专业课程。该课程主要讲计算机视觉,但有一个关于自动驾驶的超有意思的小练习,很可能对你想用RL解决的问题有所帮助。 (这里是关于班级的一些快速评价。)
你还可以参考:
- 伯克利的深层强化学习可能是关于深层强化学习的第三课(在Silver和Schulmann之后)。
我听说这些课程的评价很好……
-
Oxford Deep NLP 2017
这可能是学习NLP的第二门课。我发现这个课的资料很有意思,因为它涵盖了Socher课程没有涵盖的材料。我还没开始学。所以我以后会发表评论。 -
Nicholas Zabara的统计计算课
看起来非常有趣,大多数材料实际上是基于ML的。 -
CMU CS11-747神经网络和NLP
格雷厄姆·纽比格的一系列精彩公开课。 Neubig在NLP中编写了一些关于DL的有用教程。所以我也把他加了进去。 -
2014年纽约大学深度学习课程
Yann LeCun教授。这门课对我来说很重要,重要性相当于Hinton教授的课。主要是因为LeCun教授是BackProp和SGD最早的实验者之一。不幸的是,这些纽约大学的课被删除了。但是还留有一些幻灯片。 -
同样来自Yann LeCun教授,深度学习就职讲座。
-
伯克利的深度学习研讨会:由无监督学习的早期研究员Ruslan Salakhutdinov教授撰写。
-
阿姆斯特丹大学深度学习
如果您已经学过cs231n和cs224d,也许这里的材料你已经看过了,但我发现学完前面两门课后来学习该课就很有用。我喜欢这门课里关于反向传播的PPT,因为数学味更浓。 -
深度学习专题
如果你想深入学习更深奥的话题,这门课很不多。 -
语言和语音的深度学习
我有一点对语音识别的好奇心。这个课程也许是我在ASR上唯一能找到的DL课程。如果你读到了这一段,我会说你在网上发现的大多数软件在现实生活中并不太适用。在我这篇非常古老的文章中讨论了唯一的例外情况。
其他参考课程
Virginia Tech Deep Learning at 2015
University of Waterloo by Prof Ali Ghodsi
MIT 6.S191 Introduction to Deep Learning
Deep RL and Control from CMU
Udacity Deep Learning and Deep Learning NanoDegree.
先修课
Linear Algebra By Prof. Gilbert Strang
Probabilistic System and Applied Probability By Prof. John Tsitsiklis
更多关于机器学习基础的课程
ColumbiaX: CSMM.102x
ESL
Caltech Machine Learning.
Andrew Ng’s Machine Learning 2008
Tony Mitchell’s Machine Learning 2011
Nando De Freita’s Machine Learning 2012
其他关于AI的课程
Berkley CS 188
Stanford cs221
edX AI
MIT AI Courseware - lectures by Patrick Winston
Prof. Marvin Minsky’s The Society of Minds
书
我在推荐书籍页面上写了很多。简而言之,我发现像PRML,Duda&Hart(说的应该是那本《模式分类》,Duda和Hart著)这样的经典作品在深度学习的世界里仍然必读。但如果你还想要一份清单,那么…
Michael Nielson的深度学习书:或NNDL(《神经网络与深度学习》),被许多人强烈推荐。本书非常适合想要了解简单前馈神经网络及其设置的初学者。与大多数教科书不同,它不会用纯数学,而会用一些代码来循循善诱。虽然我最近才读,但我强烈建议大家阅读。另见我的评论。
《PRML》:我喜欢PRML!请去阅读我推荐的书籍页面,查看理由。
《模式分类》:我不像PRML一样喜欢它,但它是我的第一本机器学习圣经。你可以到我的推荐书页,查看理由。
Goodfellow的《深度学习》:这是深度学习的书,但这对于初学者来说并不容易。我最近浏览了这本书。这是我对它的一些快速印象。
Kyung Hyun Cho的分布式表征自然语言理解(这是一篇论文)。这主要是针对NLP科研人员,但重要的是要注意从深度学习的角度来看NLP的特别之处。
其他:查看我的推荐书籍页面。对于初学者,我发现米切尔和多明戈的书非常有趣。
译者注:国内有两本书写的很好,适合入门,那就是《机器学习》周志华著,与《统计学习方法》李航著
框架
- TensorFlow:最流行,安装过程令人生畏。另外请看Keras。
- Torch:需要会用Lua,但很容易上手。另外请看PyTorch。
- Theano:深度学习框架的祖宗。另外请看Lasagne。
- Caffe:可能是框架中运行速度最快的,但是设置过程和语法有点复杂。
- Neon:也很快。
- deeplearning4j:在企业中应用的很多。
框架的教程
Theano教程
TensorFlow教程
char-rnn
Misc
YeravaNN实验室的学习指南
你应该了解的数学概念
学习机器学习需要相当的数学知识。这些概念经常被用到,请大家积极查询。
- 贝叶斯方法
- 多维随机变量的分布,尤其是正态分布
- 矩阵微分
- 变分法
- 信息论