机器学习/深度学习入门资料汇总
经常被同学和朋友询问机器学习或深度学习入门,有哪些不错的参考资料。老实讲,这个问题在网上随便一搜就是一大把的答案。我自己在最开始的时候也有同样的困惑,同样在搜索引擎和论坛里翻找答案。但大多数答案并不怎么让人满意:搜索结果要么星稀零散,只见树木不见森林;要么过于详尽,让人无从下手(很多资料作者自己都没看过)。
在这篇文章里,我把自己在学习过程中的参考资料进行了梳理。一方面,希望能给你一个相对系统的学习路线参考;另一方面,自己真实的实践经历,遇过坎,掉过坑,希望能给正准备入门的同学更多真实的借鉴。
入门视频
机器学习
很多人会推荐吴恩达在斯坦福的公开课CS229,但对于初学的同学来说,我觉得并不适合。虽然Andrew在课的最开始就说了,他的这门看更侧重于实践。但真实情况是,里面有太多的数学推导和证明。直接使用这门课来入门,对初学的同学来说,在信心上会是不小的打击。特别是很多从应用开发转到机器学习的同学,毕竟在平常的工作中,大学的数学知识在实际的开发中应用的并不多,估计很多现在都已经生疏了。
对于机器学习,我推荐吴恩达在Coursera开设的机器学习课程,课程免费,侧重于基本的原理和工程实现,对初学者相对友好。字幕中英可选。课程链接:
https://www.coursera.org/learn/machine-learning
深度学习
大家可能看过《一天搞懂深度学习》的PPT,作者是台湾大学的李宏毅老师。其实,李宏毅老师还有门深度学习的课程,视频也挂在网上。这门课主要针对初学者,不需要有经典的机器学习基础(其实,深度学习入门,比经典的机器学习更容易)。课程的内容深入浅出,训练和预测样本都是各种数码宝贝和二次元卡通人物,绝对让你耳目一新。没有字幕,中文授课(台湾腔)。课程链接:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html
入门书籍
机器学习
《机器学习》
机器学习的入门书籍,当仁不让的就是周志华老师的西瓜书《机器学习》了。这本书基本囊括了绝大多数经典的机器学习方法。但坦白的讲,这本书入门也不是那么轻松,大量篇幅的数学推导和证明。建议初学者可以在第一遍的时候跳过具体的数学推导,更侧重在知识框架和原理的学习和提炼,后面可以通过第二遍或第三遍来深入其中的数学原理。
深度学习
《深度学习》
这一本称为目前深度学习领域的圣经,而作者们也确实做到了深入浅出,循序渐进。不是单纯的抛一个结论,而是逐步的深入,最终阐明原理。建议像《机器学习》一样使用:不要求第一遍就能全部吸收,可以先从框架和基本原理入手,跳过部分细节,后面再逐步深入。
数学基础
看前面的视频和书籍,对于很多从事应用开发的同学来说,可能最大的障碍就是对数学的恐惧。这种感觉大概就像没经历过算法训练的同学面对算法面试一样。其实,恐惧只要能直面它,那就一定能够克服掉。就好比在LeetCode这样的OJ平台刷完200道左右的题目,再去面试算法一样。以前觉得是天大的障碍,现在回过头来,也不觉得有什么了不起。
我个人的经验是,通过前面的视频和书籍已经对机器学习和深度学习有了基本的系统框架和原理认识,同时,也积累了对数学知识进行系统复习的强烈欲望。这时候就可以有的放矢的复习大学知识了。数学知识的复习,我都是通过看网易公开课来完成的。
微积分
MIT《单变量微积分》:
http://open.163.com/special/sp/singlevariablecalculus.html
虽说是MIT的课程,但坦白的讲,老师的节奏真是比国内的课程还要慢,真正做到了通俗易懂。
网易公开课还有MIT的《多变量微积分》,但我没有看,我觉得复习完单变量微积分,也就基本够用了。
线性代数
MIT《线性代数》
http://open.163.com/special/opencourse/daishu.html
这门课就没有上面的《单变量微积分》那么Nice了,老师思路跳跃性很强,稍一走神就不知道讲到什么地方了。但这门课有个很大的优点,就是从一开始就引入了向量空间的概念,而且贯穿始终。不像国内的课程,直到课程结束都以为线性代数只是求解方程组的另一种表达形式。
概率 / 统计
可汗学院《概率》
http://open.163.com/special/Khan/probability.html
可汗学院《统计学》
http://open.163.com/special/Khan/khstatistics.html
老实讲,可汗的公开课真是太细致了,细致到觉得拖沓(可能是复习,而不是初学者的缘故)。建议根据自己的需要做适当的跳跃。同时,两门课有部分内容是完全重合的,可以直接跳过。
Python
我的自己经验是:
1.在网上找一篇Python入门的帖子,搭建环境,运行简单的例子(半天)
2.找一本基础书籍,系统的熟悉下语言的基本特性和完整框架(1~2天)(ps:我之前有C/C++和Java的语音基础)
3.开始正常使用Python进行开发,遇到问题,求助搜索引擎(2个月以上)
4.觉得自己对语言就基本的掌握后,可以根据选择进行进阶学习了
有了前面的基础相信你已经跃跃欲试了,但别急,工欲善其事必先利其器。可能你已经有MATLAB、C/C++、Java的编程经验,但建议再入手一款新武器-Python。虽然前面的语言也可以用于机器学习和深度学习相关的研究和开发,但Python的使用范围更广,参考资料也更加丰富。
我的自己经验是:
1.在网上找一篇Python入门的帖子,搭建环境,运行简单的例子(半天)
2.找一本基础书籍,系统的熟悉下语言的基本特性和完整框架(1~2天)(ps:我之前有C/C++和Java的语音基础)
3.开始正常使用Python进行开发,遇到问题,求助搜索引擎(2个月以上)
4.觉得自己对语言就基本的掌握后,可以根据选择进行进阶学习了
亲,花上面1~2天时间来系统的熟悉Python语言特性和语言框架,然后通过我推荐的python书籍来强化学习!
《Python基础教程》
(这本书很厚,初期把目录扫完就可以了,后面当做字典来使用)
Python基础教程
进阶阶段,推荐:
《流畅的Python》
流畅的Python
动手实践
好了现在我们终于可以动手实践了!
初级
《Python机器学习及实践:从零开始通往Kaggle竞赛之路》
Python机器学习及实践:从零开始通往Kaggle竞赛之路
这是很薄的一本书,但对于初学者实践来说却是非常棒的一本书。书中的大多数算法都是基于sk-learn来实现的。使用现成的Python库,而不用关心具体算法实现过程,可以快速体验机器学习算法的效果。同时,书的最后比较细致的介绍了Kaggle竞赛平台的使用,实战性更强。
《Python机器学习及实践:从零开始通往Kaggle竞赛之路》使用现成的Python库(工程中也大多是这样的)。但很多同学还是更希望能手工实现具体的算法,觉得这样基本功才扎实,那下面的这两本书就能很好的满足有这样想法的同学了。
进阶
《机器学习实战》
机器学习实战
经典的机器学习算法手工实现,书中包含大量的代码实例。但这本书出本的比较早,深度学习内容基本没有涉猎。针对这种情况,就有了下面这本的推荐:
《TensorFlow Machine Learning Cookbook》
TensorFlow Machine Learning Cookbook
这本书主要是基于TensorFlow的,手工编织网络。而且,书的内容就像它的名字一样,结构编排跟类似菜谱:开始前需要准备什么,开始后需要遵从哪些步骤,最后又会得到怎样的结果,条理非常清晰。目前这本书已经有了中文版。
领域应用
虽然我们花费了很长的时间,投入了很多精力,但我们目前的阶段仍然像做大学作业,跟真实的工业场景相差很远。那机器学习和深度学习在实际的AI场景是如何应用的呢?带着这样的问题,我推荐两本书:
《数学之美》
数学之美
吴军老师的经典之作。虽然这本书火的时候,AI都还没有现在这么火,但书中介绍的很多场景,使用的很多技术,基本都是来自我们学习的机器学习。
《统计自然语言处理》
统计自然语言处理
选择这边书是因为自己当前的工作跟自然语言处理相关。当然了,这也是自然语言处理领域非常经典的一本书,内容全面丰富。但学术的气息比较重,读起来又找到了当初读研看Paper的感觉。
杂项
比较正统的学习基本就算介绍完毕了。其实,除了上面的主线内容外,很多比较零散的资料,对于学习来说也还是很有裨益的。
《莫烦视频》
莫烦的个人主页有很多机器学习和深度学习相关的个人录制视频。以非常简洁的方式介绍了机器学习和深度学习相关的概念和框架,对初学者快速建立概念很有帮助(PS:92年的小鲜肉,真是不得了)。地址:https://morvanzhou.github.io/about/
《深度学习简化版》
形式跟莫凡的视频类似,是老外录制的。相比于莫烦的视频,内容更丰富多样,形式更新颖。通过YouTube播放,需要。地址:https://www.youtube.com/watch?list=PLjJh1vlSEYgvGod9wWiydumYl8hOXixNu&v=b99UVkWzYTQ
《AI技术内参》
这是《极客时间》的一个付费专栏。主要推送AI相关的技术历史、当前行业信息和科研成果,从目前的使用情况来说,在品质上还是有保障的。
好啦,暂时就先这样吧,后面有更好的内容再更新,也欢迎大家分享自己的学习经验!
1.从AlexNet剖析—卷积网络CNN的一般结构
2.深度神经网络训练的必知技巧
3.[视频讲解]史上最全面的正则化技术总结与分析
我的自己经验是:
1.在网上找一篇Python入门的帖子,搭建环境,运行简单的例子(半天)
2.找一本基础书籍,系统的熟悉下语言的基本特性和完整框架(1~2天)(ps:我之前有C/C++和Java的语音基础)
3.开始正常使用Python进行开发,遇到问题,求助搜索引擎(2个月以上)
4.觉得自己对语言就基本的掌握后,可以根据选择进行进阶学习了