机器学习、深度学习的理论与实战入门建议整理(二)

来源:互联网 发布:网络安全法的特征是 编辑:程序博客网 时间:2024/06/02 06:47

转自http://blog.csdn.net/zyj098765/article/details/52860549

阶段二.深度学习入门

在对机器学习有了一定的掌握后,就可以开始在深度学习方面的学习了。刚开始要注意对神经网络的一些基本概念的掌握,如什么是感知机、什么是多层感知机(前馈神经网络)、BP算法的原理与推导等。个人觉得一个比较好的学习方式是,以视频教程为主理出一个清晰的思路,以经典书籍、博客文章、综述性论文为辅加深理解,同时,任何时候都不要忘了实践!

推荐的课程

1.UFLDL
http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
http://ufldl.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B (中文版)
这个教程可以在看完或看了一部分Cousera上吴恩达的公开课后开始看,主要介绍了autoencode,BP,self-taught,PCA等一些实用的工具,最重要的是有课后编程,帮助你快速了解。建议看的时候重点看BP算法的推导及实现,softmax回归以及它与logistic回归的联系,以及卷积和池化部分的理解与实现。当然如果能把各个章节都踏踏实实地看过、实现过,那就最好不过了。

2.VGG Convolutional Neural Networks Practical
http://www.robots.ox.ac.uk/~vgg/practicals/cnn/
这是由牛津大学提出VGG网络那个团队弄的一个CNN实践的教程,用到了vlfeat这个包,需要安装visual studio。里面有网络的各种求导输出,可以加深对CNN的理解。

3.CS231n
http://cs231n.stanford.edu/
http://pan.baidu.com/s/1pL0FCPt(视频下载)
http://cs231n.stanford.edu/syllabus.html(补充材料)
http://cs231n.stanford.edu/project.html
http://cs231n.stanford.edu/reports2016.html
http://cs231n.stanford.edu/reports.html
(以上三个链接为他们的课程大作业,大家在准备自己的大作业时可以参考下这个链接)
深度学习课程,最推荐的课程,斯坦福教授李飞飞开的,内容广泛,如果能把这些都看完,深度学习入门就基本完成了。另外这门课程也是有一些练习的(基于caffe如果没记错的话),学习的时候最好把练习也做一下,这样更利于之后的项目实战

4.Neural networks for machine learning
https://www.coursera.org/learn/neural-networks/home/welcome
Hinton老爷子开的课,虽然内容可能有些老(2014年),但老爷子的课相信上过后会有很多收获的。

5.CS224d
http://pan.baidu.com/s/1i5v2oo1
这是深度学习应用于自然语言处理的一个公开课,适合感兴趣的同学自学

6.Self-Paced Courses for Deep Learning
https://developer.nvidia.com/deep-learning-courses
这是英伟达官网上的一个很简短的关于深度学习的课程,包括对深度学习的介绍以及各类编程库如caffe、theano等的入门教程,可根据兴趣选择观看

推荐的书籍

1.《Deep learning》.Yoshua Bengio, Ian Goodfellow, Aaron Courville
http://www.deeplearningbook.org/
这本是最推荐的,2016年刚出版的,涵盖面非常广且讲解很清楚,篇幅较大,适合慢慢消化。

2.《Learning deep architecture for AI》.Yoshua Bengio
这是Bengio在2009年出版的书了,虽然相当较老,但很经典

3.《Neural networks and deep learning》.Michael Nielsen
http://neuralnetworksanddeeplearning.com/index.html
这本写的也很好,但只有网页版,不过网页版有一个好处就是可以用更丰富生动的配图来配合讲解,看的时候最好可以结合作者本人写的代码例程:
https://github.com/mnielsen/neural-networks-and-deep-learning

4.《Deep learning tutorial》
http://deeplearning.net/tutorial/contents.html
这一本更像是一本入门实战手册,适合Step by Step地实践。

推荐的综述论文

1.《Deep learning》
http://www.nature.com/nature/journal/v521/n7553/abs/nature14539.html
三大马车Y. LeCun, Y. Bengio and G. Hinton于15年发在《nature》上的论文

2.《Deep learning in neural networks: An overview》
https://arxiv.org/pdf/1404.7828.pdf
RNN之父J.Schmidhuber的88页的长篇大作,15年发表,主要总结了前馈神经网络(FNN)及递归神经网络(RNN)在监督学习、无监督学习及增强学习方面的发展历程

3.《Representation learning: A review and new perspectives》
Bengio于13年发表的表征学习的综述,也是一篇经典

推荐的编程库

深度学习领域可用的编程库就太多了,下面这个链接是对几个编程库的一个评估:
https://github.com/zer0n/deepframeworks/blob/master/README.md
然后这个链接是一个全面的整理:
http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650719733&idx=1&sn=2fce6d18e8fcae9b805d4652a7c702e9&chksm=871b018bb06c889d339f34b192579f2e7f97e2f7b64cbe3ccd85ec7b3ed9022178ed5a150359&mpshare=1&scene=1&srcid=1012kXJJBql2N0AYNFppYlci#rd
实践中并不限定一定要用哪一个库,关键看哪个库能最高效地完成我们的需求

推荐的博客

1.Four steps for deep learning
https://medium.com/@vzkuma/4-steps-for-learning-deep-learning-86f11fcee54#.pgh7pz28s
学习深度学习的四个步骤,非常值得一看,但需要翻墙,下面的链接是中文版,但不知为何没翻译完整:
http://mp.weixin.qq.com/s?__biz=MzI0NTE4NjA0OQ==&mid=2658352176&idx=2&sn=f545269f6d02aca45458c954c577b109&chksm=f2d5f75ec5a27e48b7b07471d47772425ced49cea3f9423517b0ed462a7cf736c3dcf6918ed4&scene=25#wechat_redirect
2.How to Get a Job In Deep Learning
http://blog.deepgram.com/how-to-get-a-job-in-deep-learning/
http://www.zkreading.com/article/1065528.html (中文版)
首先对深度学习做了基本介绍,然后也列举了很多学习深度学习的很棒的资源,最后还给了一些关于如何找工作的建议,很有帮助

3.Awesome Deep Learning
https://github.com/ChristosChristofidis/awesome-deep-learning
这是一个对deep learning资源的整合,非常全面

4.Awesome - Most Cited Deep Learning Papers
https://github.com/terryum/awesome-deep-learning-papers
如题,深度学习领域的经典论文基本上都列举在内了,可根据兴趣选择阅读

5.Basic Neural Network Tutorial – Theory
https://takinginitiative.wordpress.com/2008/04/03/basic-neural-network-tutorial-theory/
对神经网络的理论做了一个简要的介绍

6.Hacker’s guide to Neural Networks
http://karpathy.github.io/neuralnets/
这一篇主要是从编程的视角来对神经网络进行介绍,适合“talk is cheap,show me the code”型同学观看,若觉得javascript看起来比较困难,可直接下载配套的python代码下来跟着看:
https://github.com/urwithajit9/HG_NeuralNetwork
值得一提的是,这篇博客的作者Andrej Karpathy也是李飞飞的高徒,目前已加入OpenAI,它写的其他博客文章也值得读一读

7.A Quick Introduction to Neural Networks
https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks/
同样是对神经网络的一个快速介绍

8.A Deep Learning Tutorial: From Perceptrons to Deep Networks
https://www.toptal.com/machine-learning/an-introduction-to-deep-learning-from-perceptrons-to-deep-networks
一份全面的深度学习导论

9.An Intuitive Explanation of Convolutional Neural Networks
https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/?sukey=3997c0719f1515200d2e140bc98b52cf321a53cf53c1132d5f59b4d03a19be93fc8b652002524363d6845ec69041b98d
相信很多同学也看过这篇文章,像这样的文章其实时不时翻出来看看没准会有些新收获

10.Understanding Convolution in Deep Learning
http://timdettmers.com/2015/03/26/convolution-deep-learning/
对于深入理解深度学习中的卷积很有帮助

11.Conv Nets: A Modular Perspective
http://colah.github.io/posts/2014-07-Conv-Nets-Modular/
这篇是Google brain研究员Christopher Olah写的理解CNN系列的第一篇,他博客上的其他文章也可根据兴趣选择阅读
http://colah.github.io/

12.卷积神经网络的数学推导
http://tech.youmi.net/2016/07/163347168.html

13.Neural Network Architectures
http://linkis.com/github.io/kDnqR
这一份主要是对CNN架构演进的一个总结
http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650718943&idx=1&sn=258117d392ca1bfc37d6496992da5eae&scene=1&srcid=0905WFh5cW5OmWViVDAOL86Q#rd
上面链接的中文版

14.The 9 Deep Learning Papers You Need To Know About
https://adeshpande3.github.io/adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html
同样列出了深度学习领域的几篇经典论文,作者对每篇论文的主要思想及贡献点对做了一定的总结,该篇博客是他写的“理解CNN”系列的第三篇,前两篇也可以看看
https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner’s-Guide-To-Understanding-Convolutional-Neural-Networks/ (part 1)
https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner’s-Guide-To-Understanding-Convolutional-Neural-Networks-Part-2/ (part 2)

15.计算机视觉和 CNN 发展十一座里程碑
http://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&mid=2651986617&idx=1&sn=fddebd0f2968d66b7f424d6a435c84af&scene=1&srcid=0831kzkroVudxNcCUpnRycIh#rd
上面链接的中文版

阶段三.实战入门

“实战入门”并不是指从这里才开始实战,而是说到这个阶段可以去网上找一些感兴趣的开源项目玩一玩了。“开源”可以算是这个领域的一大特点了,从各个实验室到各大公司,都有非常多的开源项目值得学习,而且更新速度特别快,比如11月才举行的ECCV,部分已被录用的论文的代码现在已经开源了。寻找开源项目的方法有很多,大致可通过这么几个渠道:

1.公众号文章及微博的转发

公众号就是之前提到的那几个,微博的话“爱可可爱生活”更新的很勤,仔细找找应该能找到些有趣的

2.关注某个实验室或某个大牛的进展

许多在做着顶尖工作的实验室或大牛每年都会更新若干篇顶会顶刊的文章,其中部分是有开源代码的,关注那么几个感兴趣或和自己的方向比较相关的,时不时刷一刷没准会有些意外收获喔。这里推荐几个,但相信一定还有许多许多有待发现的。

实验室:

斯坦福
http://cvgl.stanford.edu/research.html
剑桥
http://www.cl.cam.ac.uk/research/rainbow/projects/
港中文
http://mmlab.ie.cuhk.edu.hk/projects.html
加州大学默塞德分校
http://vllab.ucmerced.edu/

大牛:

王晓刚
http://www.ee.cuhk.edu.hk/~xgwang/publications_topic.html

这是王晓刚列出的几个主要方向,各个方向下都有对应的paper和project,都是vision领域的,非常适合还不确定做哪个方向或尚不清楚有哪些方向的同学多看、多了解

何恺明
http://www.kaiminghe.com/
这个人就不用说了,一直是我们实验室特别关注的一个:)

Ross B. Girshick
https://people.eecs.berkeley.edu/~rbg/
俗称的rbg,从DPM到R-CNN三部曲,目标检测领域最近6、7年的重要进展几乎从未少过他的身影

Piotr dollár
http://pdollar.github.io/publications.html
这哥们也是目标检测领域不可错过的一个关注对象,而且他自己写的用于图像与视频处理的matlab工具箱特别好用,值得好好学习下。
https://github.com/pdollar/toolbox

Ming-Hsuan Yang
http://faculty.ucmerced.edu/mhyang/
一位非常高产的教授,主要涉猎方向为目标跟踪、显著性检测、语义分割

卢湖川
http://202.118.75.4/lu/publications.html
同样也是位高产的教授

Kaihua Zhang
http://kaihuazhang.net/
主要方向为目标跟踪与图像分割

Andrej Karpathy
http://cs.stanford.edu/people/karpathy/
这人前面有提过

3.project资源整合网站

前文提及的awesome-deep-learning上就有很多的projects汇总
https://github.com/ChristosChristofidis/awesome-deep-learning

CNN在检测、识别及分割上的应用
https://rawgit.com/gujiuxiang/gujiuxiang.github.io/master/blog/post/Convolutional_Neural_Networks/Convolutional_Neural_Networks.html
虽然只是论文链接,但基本上这些论文的源码都有公开,谷歌或百度一下就能找到

4.推荐几个值得一试的开源项目

目标识别:
首先当然还是从最经典的MNIST开始
http://yann.lecun.com/exdb/mnist/

然后可以在cifar-10,cifar-100继续图像分类
http://www.cs.toronto.edu/~kriz/cifar.html
https://www.kaggle.com/c/cifar-10/data

接着就可以尝试ImageNet了
http://image-net.org/index

目标检测:
Faster r-cnn
https://github.com/rbgirshick/py-faster-rcnn
YOLO
http://pjreddie.com/darknet/yolo/
SSD
https://github.com/weiliu89/caffe/tree/ssd

推特情感分析:
CNN实现
http://casa.disi.unitn.it/~moschitt/since2013/2015_SIGIR_Severyn_TwitterSentimentAnalysis.pdf

RNN实现
https://cs224d.stanford.edu/reports/YuanYe.pdf

图像风格迁移:
最初版
https://arxiv.org/abs/1508.06576v1 (论文)
https://github.com/dmlc/mxnet/tree/master/example/neural-style (代码)
http://phunter.farbox.com/post/mxnet-tutorial2 (博客介绍)

实时版
http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650719733&idx=3&sn=950a7adb4e93bca22e4ef975877482a9&chksm=871b018bb06c889ddc87bccaa0f35de5ca5a35c156cf1164d134d5010065d68dd06ba6e7cdfa&mpshare=1&scene=1&srcid=1012x07u3GoNxt6i3c5bLAre#rd

用RNN来”玩“音乐
http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/

用深度增强学习来玩游戏
http://karpathy.github.io/2016/05/31/rl/

用深度学习来给你的自拍打分
http://karpathy.github.io/2015/10/25/selfie/

用深度学习给黑白图像上色
https://twitter.com/ColorizeBot (需翻墙)

小结

最好的学习方式:理论+实践

最好的利用资源方式:不要急,一个一个来

  这份学习建议的整理是希望你能从三个阶段来入门并逐渐掌握机器学习与深度学习,但就如引言中所说的,可能你看完了以后脑海中还是没有一条清晰的线,也就是“我现在要做什么、下一步做什么、然后呢···”,关于这个也许之后我会抽时间整理出一个step-by-step的学习建议。另外,在整理这份学习建议时还是有些仓促,再加上本人才疏学浅,有哪里错误或不得当的地方也希望能得到各位前辈的批评与指正,谢谢。最后,如果您也也曾收藏过一些本文未提及的不错的资源(入门或进阶皆可),那就请您在评论里和大家一起分享吧,学无止境,嗯,就酱!

0 0