深度学习入门

深度学习入门(转载)

我来总结下我从一个小白到在国际顶会上发 paper 的学习经验。

深度学习的资料非常多,但这也成为了深度学习坑最大的地方,学习者很容易迷失在各种资料当中,最后只看了个皮毛。所以,我认为学习深度学习一开始就要盯着你挑选的那么一两个资料学习,最多不要同时看三本书。深度学习是一个理论与实践相结合的学科,所以我建议找一本理论和实践都覆盖的书,或者一本书讲理论,然后找些代码做实验。下面来说说我自己学习的总结的一条路径,难度由简到难,由浅到深。永远不要忽视基础,他们不是你学会之后就可以抛弃的东西,而是一点点积累让你达到更高高度的坚实台阶。

1. 入门材料。我推荐 Neural networks and deep learning,这本简短的书满足了上面我所说的既注重理论又有充分的实验代码伴随。这本书先是引入了最原始最简单的神经元和神经网络的概念,然后一步步引出全连接网络、激活函数、反向传播、优化方法、卷积神经网络等深度学习中最基本的内容,然后还给出一个视觉上的(非严格的)证明,神经网络可以计算任意函数(严格来讲,是有限制条件的)。书中还有大量的配图(其中还有很多可交互的动图),非常有助于理解。这本书对应的是作者自己的 python 代码,自己从头实现一个神经网络非常有助于理解。这本书真正做到了深入浅出,在不失理论深度的同时让难度变得很低。作为另一门不得不提的Stanford深度学习课程CS231n Convolutional Neural Networks for Visual Recognition,居然有中文版!好评如潮的话不多说了,网易云课堂上的名字是深度学习与计算机视觉

2. 找一本更深入的书学习理论,挑一个喜欢的框架可以做实验。我在入门深度学习的时候没有专门讲这个话题的书,还得自己寻找各种资料,看 paper,走了很多弯路,现在的同学可以直接看 Deep Learning 这本书了,对于基础理论讲的非常详尽了,是深入理解的一条捷径。至于框架,挑个主流的、教程完备的,我推荐 pytorch/tensorflow/mxnet 里面选一个,我个人比较喜欢 pytorch,程序非常优雅简洁。然后一边看书一边做实验,把书中的东西能实现的实现一下,把框架里面的教程也都跑一遍,这样你对于深度学习就入门了。

从这里开始,接下来你的学习可以分成两个分支了,分别对应理论和工业实践。

3.1 找一个专门的问题开始钻研,不断地试验自己的想法,前人没有的想法。同时阅读这个领域最新的文章,尝试实现。比如你可以挑物体检测这个问题,既然你对于理论和实践都已经比较熟练了,你完全可以开始修改别人的网络架构,改变训练的模式,尝试把先验信息加进来。总之,有很多的玩法都可以实验。说不定玩着玩着就能写一篇文章出来发表。

3.2 尝试实现一个自己的深度学些框架。目前深度学习离不开 c/c++ 和 cuda,所以你可以从头写一个 c/c++ 版本的,把坑自己踩一遍,这样工程能力肯定大为提高。或者,你也可以利用现有框架的后端实现一个前端,这样你对于这些框架后端的理解也能够大为提高。且你的所有的想法都可以写进这个前端里面。比如 pytorch 就是用 torch 的后端实现了一个 python 的前端,而且相比于原版的 torch 有了很多改进。



首推Geoffrey Hinton(不用多介绍了吧)在coursera上开的一门课, Neural Networks for Machine Learning,入门级课程,不需要太多的数学背景,但干货满满,对诸多算法有着深刻的解读。课程虽然并不是那么的激情四溢,但是同学们可以静静领略这位深度学习鼻祖的风采呀,处处闪耀着智慧的光芒。整个课程听下来,会让你有种宝刀即出,谁与争锋的感觉(当然啦,路漫漫。。)。(英文不好的同学看这里!)作为另一门不得不提的Stanford深度学习课程 CS231n Convolutional Neural Networks for Visual Recognition,居然有中文版!好评如潮的话不多说了,网易云课堂上的名字是深度学习与计算机视觉,小伙伴们刷起来。接着上一条,安利“知名博主”( Andrej Karpathy)的博客,在这里你可以看到深入骨髓的分析。我相信学完CS231n的同学会有极大兴趣的。 到这里差不多就能入门了吧,大概还是赢在起跑线的那种。至于如何让自己的程序跑起来呢,TensorFlow有一个官方的教学视频挂在udacity上,感兴趣的同学可以看看,零基础入门教学,刷起来飞快。喜欢读paper的同学可以找来各种经典paper好好读起来。那如果想进行体系化的阅读看看教材呢,强烈安利 Yoshua Bengio 2016年新书 Deep learning. 别被厚度吓到了,要知道付出和回报还是成正比的,更何况练的是武林宗师双手的奉上的武林秘籍呢,一招一式说的清清楚楚。(对了,这是有中文版的)再安利一本Yoshua Bengio的书,Learning Deep Architectures for AI,09年写的,需要的数学基础高一些,短短一百页,让你有种高屋建瓴的感觉。希望能为你打开新世界的大门!


-------------------------速成的道路---------------
0、Andrew Ng的机器学习部分内容(机器学习介绍,回归问题与梯度下降,过拟合欠拟合)
英文能力足够推荐英文版: Machine Learning
(中文版对应网易公开课 斯坦福大学公开课 :机器学习课程)
(中英链接里的章节貌似不对应,按内容看)

1.UFLDL: ufldl.stanford.edu/wiki
  • Neural Networks
  • Backpropagation Algorithm
看这两部分内容

2.CMUAdvanced Introduction to Machine Learning PPT:cs.cmu.edu/~epxing/Clas

这是一门MachineLearning课程中讲到CNN的部分


3.CAFFE:Caffe | Caffe Tutorial

CAFFE是一个常用的deeplearning的软件工具,其页面上有deeplearning的tutorial材料,同时想要深入了解具体实现的话可以直接阅读源代码


--------------------------比较全面的道路--------------


一个技术上认识DL(这里说CNN),的顺序是:
线性分类->感知机->梯度下降->神经网络->BP算法->三层全连接网络->CNN
感悟上认识DL的顺序是:
(生物基础)Hubel&Wiesel视通路研究 -->(计算机模拟)神经网络-->神经网络很好骗
-->神经网络一定要深吗?-->神经网络一定要深-->混沌理论&量子力学



如果是初学,我建议从Yoshua Bengio(NN的发明者之一)的书Deep Learning开始(Deep Learning),书的第一章就介绍了学习DL基本的数学知识,从第二章开始由浅入深的介绍不同的DL模型以及部分应用。

也可以配合着Stanford课程: Convolution Neural Networks for Visual Recognition材料一起看:CS231n Convolutional Neural Networks for Visual Recognition 虽然课程名称是CNN和图像识别,但只有最后一个模块才介绍到具体的CNN,前两个模块介绍了一些基本知识和Neural Networks。 我当时是从这份材料入门,对DL有了初步的认识后,通过实验,读论文对DL有进一步的认识。然后我又发现了上述的Deep Learning这本书,对我之前理解不清的地方都有相对详细的讲解,所以现在还在读。

Coursera上有一个关于Deep Learning的公开课: https://www.coursera.org/learn/neural-networks (Neural Networks for Machine Learning) 讲师是Geoffrey Hinton(NN的发明者之一)。公开课里讲的更深入一些,不过不适合初学者,在你看完前两份资料和自己做过分析过一些实验之后再上这门课可能更好一些。



1.数学基础:搞深度学习的学生一般是研究生,刚经历过考研,数学应该没什么问题,不是研究生当然也没关系,把高数的求偏导那部分看下,做几道练习题,推荐张宇的《高等数学18讲》,以及《概率论9讲》,淘宝买的书一般会赠送对对应的视频课程,看不懂书可以看看视频,都讲得比较通俗了,并没有必要去看市面上各种几百上千的培训班讲数学基础。凸优化属于进阶的内容了,我觉得入门阶段可以先不用看


2.机器学习基础:机器学习本身是一个庞大的领域,单单一个svm的推导就能把我们虐死,而在深度学习或者能够在UFLDL教程中,Andrew Ng 已经告诉我们可以先看到逻辑回归就好,看II,III,IV章(到逻辑回归)openclassroom.stanford.edu


备注:由于ng的机器学习课程是英文的,觉得不习惯的同学,也可以参考台湾李宏毅老师的机器学习课程(网上搜索资源),一口台湾腔,讲得很棒啊,听懂没问题~


3.深度学习与计算机视觉:有了上面的两个基础,可以把李飞飞老师的网易云课堂的公开课study.163.com/course/in给刷了,最好自己把卷积的bp过程公式推导一下,参考ufldl.stanford.edu/wiki 当然,也可以事先看看一些中文博客对卷积神经网络的通俗讲解~


备注:同样,不习惯英文的同学可以参考台湾李宏毅老师的深度学习课程(网上搜索资源),我觉得李宏毅老师也算得上一个机器学习领域的新星,哈哈


4.选择一个深度学习框架开始搞事情了:像caffe TensorFlow pytorch 这三个我个人比较看好,用caffe来作为一个入门是非常不错的选择,把caffe自带的几个example跑通之后,可以开始着手选择一个领域,看相关的论文,比如人脸检测,开始训练一些模型,其中会需要用到python或者matlab来处理一些数据集的格式,对应的编程语言要学习下


5.近期大牛吴恩达离开百度之后,自己创业,在网易云课堂发布了一系列的免费课程,是关于deeplearning 的,在你有过一些实战经验之后,可以好好刷一下,地址如下:study.163.com/courses-s


你可能感兴趣的:(从SVM开始机器学习)