内容简介:本文提供资源帮助你在放置一个conv2d层或者在Theano里调用T.grad的时候,了解到在代码背后发生了什么。网络中有着丰富的教程,供我们开始接触深度学习。你可以选择从著名的斯坦福如果你从未接触过这方面的内容,你可以选择
本文提供资源帮助你在放置一个conv2d层或者在Theano里调用T.grad的时候,了解到在代码背后发生了什么。
网络中有着丰富的教程,供我们开始接触深度学习。你可以选择从著名的斯坦福 CS221 或者 CS224课程 开始:
-
CS221:
http://cs231n.stanford.edu/
-
CS224:
http://cs224d.stanford.edu/
如果你从未接触过这方面的内容,你可以选择 快速AI课程 或者 深度学习AI课程 :
-
快速AI课程:
http://www.fast.ai/
-
深度学习AI课程:
https://www.deeplearning.ai/
除了深度学习AI课程,其它所有课程都是免费的,你可以在家中舒适地学习。你需要的仅仅是一台好的电脑(最好带有一块Nividia的GPU), 以及你已经准备好向深度学习迈出你的第一步。
然而,本文不是为一个纯新手准备的。当你了解了一些深度学习算法的原理,你可能想要知道这些算法是怎么运作的。尽管深度学习的绝大部分工作(大概是90%的工作,除去10%的的数据)是添加像Conv2d这样的层,调节不同优化策略(如ADAM)的超参数,或者通过在 Python 中添加一行代码(得益于可用的优秀框架)使用batch norm以及其它一些技巧,很多人可能都很想知道在这之后到底发生了什么。
本文列举的这些资源,在你放置一个conv2d层或者在Theano里调用T.grad的时候,可以帮助你了解到在代码背后发生了什么。
总论
毋庸置疑, 《深度学习》(Deep Learning Book) 这本书是最著名、最为人知的资源:
-
Deearning Book:
http://www.deeplearningbook.org/
其它比较好的资源还有 Charniak教授的课程和论文 ,可以作为深度学习的技术介绍:
-
Charniak教授课程:
https://cs.brown.edu/courses/csci1460/assets/files/deep-learning.pdf
-
论文:
https://arxiv.org/abs/1709.01412
当你想要从一个具体的角度理解深度学习的话可以参考其它一些资源比较好的资源。比如,下面这个教程是从 应用数学的角度 来攥写的,或者如果你仅仅是 想要开始写代码而不是深入研究理论的 话,可以阅读下面的文章:
-
应用数学角度的教程:
https://arxiv.org/abs/1801.05894
-
文章链接:
https://arxiv.org/abs/1703.05298
还有一个比较推荐的是这个 基于PyTorch的深度学习课程 。这个课程讲解很全面,可以帮助你从一个更加宏观的角度理解:
-
基于PyTorch的深度学习课程:
https://documents.epfl.ch/users/f/fl/fleuret/www/dlc/
反向传播的问题
很多时候,人们不确定“为什么梯度下降和反向传播是同一件事情?”,或者,“到底什么是链式法则以及反向传播?”要了解这些基本问题,我们可以选择阅读 Rumelhart,Hinton和Williams之前写的 关于反向传播的论文 。这篇论文简单易懂:
-
Rumelhart,Hinton,Williams关于反向传播的论文:
https://web.stanford.edu/class/psych209a/ReadingsByDate/02_06/PDPVolIChapter8.pdf
除此之外,其它一些非常有用的资源包括 Karpathy的关于反向传播导数的博客 ,以及这段 解释导数反向传播的视频:
-
博客地址:
https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b
-
视频地址:
https://www.youtube.com/watch?v=gl3lfL-g5mA
线性代数和其它数学内容
大家都会给某位立志于学习线性代数的人推荐 Strang教授的课程 ,这大概是关于线性代数最好的资源了:
-
线性代数课程:
https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/
类似的还有 Boyd教授的运筹学课程 :
-
运筹学课程:
http://web.stanford.edu/~boyd/cvxbook
Calculus on Manifolds的 《Calculus on Manifolds》 这本书是关于向量积分的微积分内容(你可以通过Google搜索“Calculus on Manifolds”找到一份pdf)。但是,一开始学习深度学习的时候,我们不需要深入学习这些内容。另一种方法是快速复习 《深度学习微积分》(Calculus for DeepLearning) 这本书:
-
Calculus for DeepLearning:
https://arxiv.org/abs/1802.01528
这里还有一些关于深度学习的 凸优化内容 的讲座笔记:
-
凸优化讲座笔记:
http://people.eecs.berkeley.edu/~elghaoui/Teaching/EE227BT/lectures.html
此外, Sebastian Reuder的论文 也是比较好的资源,同时我也喜欢用下面的笔记来理解 tensors的导数 :
-
Sebastian Reuder论文:
https://arxiv.org/abs/1609.04747
-
tensors导数笔记:
https://github.com/mtomassoli/tensor-differential-calculus/blob/master/tensor_diff_calc.pdf
自动求导和深度学习库
在你做深度学习项目的时候,不必非要了解自动计算导数。大多数框架,像Torch,Theano或者Tensorflow会帮你自动运算好。通常来说,你甚至不需要知道怎样进行导数运算。也就是说,如果你一定要弄清楚深度学习框架是怎样工作的,你可能想在下面这篇文章中 理解自动求导是如何实现的 :
-
文章链接:
https://arxiv.org/abs/1502.05767
其它比较好的用来 理解深度学习库功能实现 的资源可以在下面的博客和视频中找到:
-
博客链接:
http://blog.christianperone.com/2018/03/pytorch-internal-architecture-tour
-
视频链接:
https://www.youtube.com/watch?v=Lo1rXJdAJ7w
卷积神经网络
在你学习了一些如何使用基本convents的课程后,你可能需要去理解卷积是如何在图像上工作的。“输入应用某种类型的卷积后,输出的维度是多少?”“stride是如何影响卷积的?”“Batch正则化是什么?”“对于这类应用问题,我看到过的最好的资源是 下面的教程 和 Ian Goodfellow的演讲 :
-
教程链接:
https://arxiv.org/abs/1603.07285
-
Ian Goodfellow演讲视频:
https://www.youtube.com/watch?v=Xogn6veSyxA
如果你想得到一个好点子的话,下面链接中 关于Convenets的评论 更加全面,另外这篇 关于物体检测的总结 也是比较好的资源:
-
关于Convenets的评论:
https://arxiv.org/abs/1803.08834
-
关于物体检测的总结:
https://arxiv.org/abs/1803.08834
自然语言处理中的深度学习
我在前文中提出的Stanford 224课程是一个非常好的起点,可以基本让你了解关于自然语言处理中深度学习的方方面面。这里还有一个 Graham Neubig(他使用dynet)发布在YouTube上的课程 :
-
Graham Neubig发布的课程:
https://www.youtube.com/watch?v=Sss2EA4hhBQ
还有一本你可能喜欢的 Yoav Goldberg编写的NLPbook 以及这本书编写之后的 NLP上新的研究进展的回顾 :
-
NLPbook:
https://u.cs.biu.ac.il/~yogo/nnlp.pdf
-
NLP上新进展回顾:
https://arxiv.org/abs/1708.02709
关于 是否在文字上使用ConvNets或者 RNNs(LSTM/GRUs ) ,也是一个非常普遍的问题,这里有一个不错的概述:
-
概述:
https://arxiv.org/pdf/1803.01271.pdf
强化学习
Sutton和Barto所写的《强化学习》(Reinforcement Learning)这本书是开始学习这些方法的不错途径。这本书是免费的,可以在下面链接中获取:
-
Reinforcement Learning:
http://incompleteideas.net/book/the-book-2nd.html
这里还有一篇 关于最新的深度强化学习方法的综述 以及一个 关于强化学习的非常有趣的教程 :
-
深度强化学习方法综述:
https://arxiv.org/abs/1708.05866
-
强化学习教程:
https://hackernoon.com/intuitive-rl-intro-to-advantage-actor-critic-a2c-4ff545978752
这里有一篇 关于MCTS (Monte CarloTree Search)的综述 (除了深度强化学习技巧外,Deepmind使用其作为AlphaGo算法的一部分),但是我喜欢用这个 快速教程 来学习它们:
-
MCTS综述:
http://mcts.ai/pubs/mcts-survey-master.pdf
-
快速教程:
http://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/?utm_source=top.caibaojian.com/19271
其它一些好的综述/教程
在ICLR 2016上,Goodfellow给出过一篇 关于GANs(生成对抗网络) 和 广义上生成模型 的教程,可以在下面链接中找到:
-
教程链接:
https://www.youtube.com/watch?v=HGYYEUSm-0Q
神经网络可以用来做艺术迁移(例如Prisma app),可以在这里找到一篇关于 如何做这个任务的 详细的调查 :
-
神经网络应用于艺术迁移:
https://arxiv.org/abs/1705.04058
另一篇关于Reuder写的关于 多任务学习 的研究(用同一个神经网络结合多个任务)在这里:
-
关于多任务学习的研究:
https://arxiv.org/abs/1706.05098
评论
尽管深度学习在许多问题上效果很好,我们知道永远有它还无法解决的问题。一些值得阅读的好评论有 Shalev-Shwartz等人写的 Failures of Gradient-Based Deep Learning:
-
Failures of Gradient-Based Deep Learning:
https://arxiv.org/abs/1703.07950
这个Hinton的讲座列举了 ConvNets的难点 和 为什么ConvNets不能解释训练集图片的负面影响:
-
ConvNets的难点:
https://www.youtube.com/watch?v=rTawFwUvnLE
-
ConvNets不能解释训练集图片的原因:
https://arxiv.org/pdf/1703.06857.pdf
下面是前段时间的 另一个评论 以及一篇 关于 滥用深度学习的全面报告 :
-
评论链接:
https://arxiv.org/abs/1801.00631
-
关于滥用深度学习的全面报告:
https://arxiv.org/abs/1802.07228
对抗样本
这是一个巨大领域,可以制造欺骗卷积神经网络的人造或真实的数据。我本可将这一节放在评论里,但我没有这样做,原因是:
1. 它们并不是所有应用的都需要面对的技术挑战。
2. 我在这方面不是非常精通。能够使人接触这个话题并引起兴趣的例子在下面这篇文章里,他们生成“对抗物体”来欺骗神经网络:
-
文章链接:
https://arxiv.org/abs/1703.05298
为了成为一位数据科学家,你还可以在下面链接中阅读关于机器学习算法的例子:
-
机器学习算法例子:
https://blog.paralleldots.com/data-science/machine-learning/ten-machine-learning-algorithms-know-become-data-scientist/
以上所述就是小编给大家介绍的《带你深入浅出理解深度学习(附资源打包下载)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何从广度与深度衡量打包工具的好坏
- 10分钟快速精通rollup.js——Vue.js源码打包原理深度分析
- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- Maven多模块项目打包前的一些注意事项(打包失败)
- tar打包如何不打包某一个文件夹(排除某些文件夹)
- iOS新手用swift写一个macos打包工具 一键打包到指定位置
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入浅出WebAssembly
于航 / 电子工业出版社 / 2018-11 / 128.00元
WebAssembly是一种新的二进制格式,它可以方便地将C/C++等静态语言的代码快速地“运行”在浏览器中,这一特性为前端密集计算场景提供了无限可能。不仅如此,通过WebAssembly技术,我们还可以将基于Unity等游戏引擎开发的大型游戏快速地移植到Web端。WebAssembly技术现在已经被计划设计成W3C的标准,众多浏览器厂商已经提供了对其MVP版本标准的支持。在Google I/O ......一起来看看 《深入浅出WebAssembly》 这本书的介绍吧!