0. 写在前面
本文适合于想要自学机器学习、深度学习、计算机视觉等相关基础知识的人阅读。
(这一年半来,我用了大部分时间读书,这里也算给自己写个总结)
关于学习,方法有两种:
-
一种是实践先行,按需补充理论,这种方法有利于短期上手。
-
另一种是理论先行,掌握一个牢固的理论基础框架后,再把重心移到实践。
本文推荐的书籍更适合于后者的学习方式。先声明,读书不是必要的,真读起来也是永无止境。
读书的缺点是:时间很长,短期收益不明显,面试不一定用得上,一定要有耐心,时间有限往往只能读有限的书。
读书的优点是:会对知识有一个完善的结构,能打下异常扎实的基础和技术壁垒,后劲十足,以后再学新东西时能快速上手。
鉴于这种情况,建议是
- 所读的知识最好是有深度、有结构、并非几篇博客能学会,所以工具类(如Pandas、Numpy、Tensorflow等)、语法类(Python、C++)的书这里基本不会推荐。并不是说这种书没有收益,实际上很多这方面的书写的很不错,如C++ Primer, Fluent Python等,只是这些工具类知识有更好的学习和使用方法,例如查wiki、文档、博客。对于写得很好的工具书,可以当字典去查或扫读,不建议从头到尾精读。
- 想清楚读书的目的,希望得到什么。
- 同类型的知识,优秀的书籍非常多,只读最好的那一本,减小知识重叠造成递减的边际收益,读书很慢很费时间。
接下来从小白开始……
1. 工程实用类
这类书要把机器学习/数据科学/数据挖掘常用算法给小白讲清楚,多讲一些方法,说人话,有代码,有数据能实践。这方面现阶段最推荐的是
《机器学习实战:基于Scikit-Learn和TensorFlow》Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition
深度学习方面
《动手学深度学习》/ 《Python深度学习》Deep Learning with Python 二选一
注意:Hands-on Machine Learning也有深度学习部分,先读完上一本再决定要不要读这两本。另外建议只对Deep Learning感兴趣的同学最好也要有Machine Learning基础。
提名其他好书但不推荐的,及原因:
《集体智慧编程》Programming Collective Intelligence . 这书是我在大二时刷过的,很喜欢的一本书,可惜内容太老。用现在的眼光来看,第11章的遗传算法算是很有亮点。
《机器学习实战》Machine Learning in Action. 不如上一本,且内容太老。不过这本书的亮点是把Apriori和FP-Growth算法讲清楚了。
《统计学习导论》An Introduction to Statistical Learning. 这本书内容其实不错,采用R语言。如果打算以R语言为主实践语言,则可以考虑这本。
2. 进一步的机器学习算法类
这类书要把知识结构编排合理,讲清楚模型和算法之间的差异、不同模型背后的联系、数学原理,对方法的工作思想要有深刻的见解,同时难度要逐渐增大,不要开局打boss。
这一类书我读的稍多,从我的感受,难度从低到高推荐的依次是
(1)《机器学习(西瓜书)》/《统计学习方法(第2版)》
“西瓜书”的优点是简洁,内容广且有一定的思想深度,缺点是有的地方跳步严重,可配合南瓜书一起使用;
《统计学习方法》的优点是推导细心,西瓜书看不懂的看这本大概率能看懂,缺点是个人认为第二版新增内容的组织不好,不易形成合理的知识框架。
建议两本书配着看,一本看不懂了就看看另一本是怎么写的。
读完上面这两本,其实已经能超过非常多的人了。从(2)开始往下属于稍加进阶。
(2)Pattern Recognition and Machine Learning
PRML优点是公式推的细,全书自洽。哪怕跳过(1)直接看PRML,静下心来也是有大概率能看懂的。
另外全书组织的好,内容偏贝叶斯派,会对贝叶斯派的思想有深刻的认识,贝叶斯派发展起来的概率图,也是全书的重点和精华。
但缺点是PRML对频率派的很多方法不讲。概率图现在工业界用的也少。在2010那个前后十年,概率图被广泛应用,现在被Deep Learning直接压下去了,不过也说不准以后概率图会大红大紫,三十年河东三十年河西。
不过因为PRML对贝叶斯方法有些过于执着,如果只读这一本,知识体系容易”失衡“,所以就引出来了下一本。
(3)The Elements of Statistical Learning, 2nd Edition
ESL的优点是比PRML涵盖面广,统计味道更重。内容偏频率派,正好和PRML互补。另外个人认为频率派方法也更常见于现代工业界。
但缺点是跳步严重,不像PRML对新手那么友好。内容较难。
关于多久能读完的问题:我在读完了前面三本理论书和一些其他线性代数和数理统计的补充之后,读ESL,大约花了2个月,每天5个小时左右。仅供参考。
PRML和ESL这两本书如果想刷一定要做题,题目的编排是嵌在内容中的,可以看一部分,做一点题。
PRML有马春鹏的中译版,ESL的中译版见连接ESL CN.
提名其他好书但不推荐的,及原因:
Machine Learning : A Probabilistic Perspective. 组织的不太好,内容乱。优点是内容更全,像本字典,不建议通读。另外,这本书马上要出第二版了,我再观望一下。
《模式分类》Pattern Classification, 2nd Edition. 成书有些偏老,导致很多内容缺失。
(4)读到ESL这个层级,已经基本覆盖了工业界的知识需求。更进一步的学习理论相关书籍,依然有很多优秀的,但是离工业界更加遥远,不建议算法工程师阅读,更适合理论研究者及爱好者阅读。
(*)深度学习方面:《神经网络与深度学习》
俗称蒲公英书,适合零基础、内容丰富、结构清晰。阅读难度稍低于西瓜书。
提名其他好书但不推荐的,及原因
《深度学习(花书)》Deep Learning. 优点在于对深度学习知识宏大而合理的架构,对很多内容的细节有作者们深刻的见解,可以提高认识。但缺点是,全书不打算好好推公式,导致对于某部分不熟悉的读者,很难读懂。蒲公英书相比于这本书,则对新手更加友好,内容选材也更新。
3. 更细方向
下面这些书不建议上来就读,除非你真的想好要做这个方向。书中的内容是对应方向的基础,并不一定是现阶段深度学习方法的运用。
计算机视觉
(1)图像处理方面:《数字图像处理》Digital Image Processing, 4th edition
书中很多内容是计算机视觉的基础。这本经典的数字图像处理在2017年出了第4版,2020年也有了中文版。第四版改版后,第4章频率域,第7章小波,第10章分割,讲得非常好。
(2)Computer Vision Models, Learning and Inference.
深度学习前的Computer Vision。不同于其它CV书,本书从概率讲起,偏Machine Learning,且不像Szeliski那本大而全。读完最大收获不在于掌握多少CV领域的方法,而是对这一堆方法构建了体系,启发思维,什么问题能套什么模型,模型属于什么分支。这比浏览一堆“技术列表”更有启发性,是一本结构极好的教科书。
这本书有中译版,但是翻译质量有待提高。
提名其他好书但不推荐的,及原因
Computer Vision: Algorithms and Applications. 一本综述书,适合查不适合通读。另外,这本书最近在翻新第二版,把最近的技术罗列进去,可以顺势观望一波。
推荐系统 / 自然语言处理
由于我不是做这个方向的,所以就不给出建议了。可以多参考知乎、豆瓣、Amazon的书评,结合个人需要进行选择。
4. 计算机素养
关于计算机系统的基础:对于算法岗,计算机基础知识的素养越高越好。不过相比其他技术岗,其实对计算机要求算是非常低。如果想靠读书,通读OS、Network一类的书可能太费时间,内容太深,大概率用不到。最好是能有一本书把整个计算机系统讲清楚,讲到够用就行。这方面只推荐
《深入理解计算机系统》Computer System A Programmer’s Perspective, 3rd Edition.
这本书可以算是CMU的镇校神书,是大二导论课的教材。本书像地图一样把CS每个方向都扫了一遍。主要关注对程序员“有用的”原理。关于汇编、体系结构的部分可以随便翻翻,重点放在后面,链接、异常控制流、虚拟内存等。
此外,记得补充传统算法、编程语言、数据库、计算机网络方面的知识。
5. 数学知识补充
上述的书中,用到的前置数学知识,当属ESL最多。为了能顺利通读,建议补充概率论与数理统计、线性代数的知识。
(1)陈希孺《概率论与数理统计》
这是我读过的最好的概率统计的书籍,在有限的页数内,写得严谨、易懂而深刻。概率统计这种学科最怕陷入复杂的计算。能用大段描述性文字把概率统计的思想讲清楚的书太难得。书中有些段落还能了解一些统计学的发展历史和文化。
(2)线性代数。推荐两套课,MIT18.06 Linear Algebra和MIT18.065 Matrix Methods in Data Analysis, Signal Processing, and Machine Learning.
最后,读书是一件很私人的事情,也是没有止境的,不要因为书多焦虑,也不要攀比。
如果是为了准备面试,有更好的方式。读书的主要目的还是为了提高自己的素养。