前言PREFACE
近十年来,随着人工智能技术的快速发展和广泛应用,各行各业掀起了一股人工智能学习浪潮。利用人工智能相关技术解决现实生活中的问题已经成为学术界和工业界的一种共识。因此,这也使与人工智能相关的专业在各类高校中如雨后春笋般涌现出来,但是对于绝大多数读者来讲,想要跨入人工智能这扇大门仍旧存在着较高的门槛。所以,一本结构合理、内容有趣、理论与实践并重的入门书籍对于初学者来讲就显得十分必要了。
为什么会有这本书
笔者大约是在2016年开始接触机器学习,也正是在那个时间点附近,笔者越发地认为“要想学得好,笔记不能少”。于是在这之后,笔者每学完一个新的知识点都会将它记录下来。慢慢地,不知不觉就记录了近200篇博客。在记录的过程中,笔者都会将看到的各种资料以笔者自己的思维方式从头梳理一遍再形成笔记。这样做的好处就是能够使这些知识点与自己脑中固有的知识更好地融合。
在2020年4月,笔者注册了一个公众号用来分享与传播与机器学习相关的知识内容。同时,为了提高这些文章的质量,笔者以原先的博客记录为蓝本又一次从头梳理了这些内容,然后陆续进行了推送。2020年11月初,笔者在微信群里看到有朋友说,如果能将这些文章整理成一个文档就好了,因为在手机上看容易分神。为了满足这些朋友的需要,笔者又一次对这些内容的组织结构进行了梳理与排版,很大程度上满足了对于初学者的需求。
2020年12月初,清华大学出版社的赵佳霓编辑找到笔者,希望能将这份笔记整理成书稿出版。在与出版社签订合同后笔者又重新对所有内容进行了第3次修订与补充。在整个内容的修订过程中,为了达到学术上的严谨及自己对于内容质量的要求,笔者同本书的另外一位作者黄晓辉一起对本书的结构与内容进行了调整与补充,对文中所出现的每个知识点做了详细的考证与引用,对于每个算法所涉及的示例代码都进行了重新调试。工作之余,在历经近半年的修订后终于形成了现在的《跟我一起学机器学习》。本书第1~3章、第6章和第9章由王成编写,第4、5、7、8章和第10章由黄晓辉编写。
如何进行学习
好的方法事半功倍,而差的方法则事倍功半。当然,从本质上来讲方法没有好和坏之分,只有适合与不适合的区别,因此本书中所总结的学习方法也只是笔者的一家之言,不过这也十分值得学习与借鉴。
如果各位读者也经常在网上浏览有关人工智能的相关内容,肯定会经常看到有人提出类似“如何才能入门机器学习”这样的问题。想想笔者自己在刚接触机器学习时又何尝不是这样呢,总觉得自己一直在门外徘徊,就是不得其中之道。幸运的是经过漫长的摸索后,笔者终于总结出了一条适合自己的学习路线。同时笔者也坚信,这也是适合绝大多数初学者的学习路线。
1.怎样学
笔者第一次学习机器学习时所接触到的资料就是吴恩达老师的机器学习视频,并且相信很多读者也都或多或少地看过这个视频。总体来讲,它的确是一个很好的机器学习入门材料,内容也非常浅显易懂,并且吴恩达老师讲得也十分详细,但是,学着学着笔者渐渐地发现这份资料并不十分适合自己。局限于当时没有找到更好的学习方法,笔者也就只能硬着头皮看完了整个内容。后来,直到拿着李航老师的《统计机器学习》进行第二次学习时,笔者才慢慢地总结出了一条有效的学习路线,总结起来就是一句话:先抓主干,后抓枝节。
学习一个算法就好比遍历一棵大树上的所有枝节,算法越复杂其对应的枝叶也就越繁茂。一般来讲通常有两种方式遍历这棵大树:深度优先遍历和广度优先遍历。对于有的人来讲可能适合第一种方式,即从底部的根开始,每到一个枝干就深入遍历下去,然后回到主干继续遍历第二个枝干,直到结束,而对于有的人来讲可能第二种方式更适合,即从底部的根开始,先沿着主干爬到树顶以便对树的整体结构有一定的概念,然后从根部开始像第一种方式那样遍历整棵大树。相比于第一种方式,第二种方式在整个遍历过程中更不容易“迷路”,因为一开始就先对树的整体结构有了一定的了解了。
因此,对于一个算法的学习,笔者将它归结成了5个层次(3个阶段):
其中,阶段一可以看成先从大树主干爬到树顶一窥大树全貌的过程,因为对于一个算法来讲最基本的就是它所对应的思想,而这也是一个算法的灵魂所在。阶段二和阶段三就可以看成遍历完整棵大树后的层次了,它是对算法里细枝末节的具体探索。
为什么会是上面这种排序呢?可以打乱吗?笔者的回答是:当然可以,只要是适合自己的方法,那就是好方法。不过,对于绝大多数人来讲,笔者认为应该遵循上面这一学习顺序。不过遗憾的是现在大多数读者的学习顺序是①②④⑤③或者是①②④③⑤。这两种学习顺序的弊端就在于,很多算法在其数学推导过程中是有难度的,当克服不了这个难度时很多读者往往就不会接着往下进行,而这一问题在初学者当中尤为突出。相反,笔者一贯主张的是:先学会怎么用,再探究为什么。学习过程最重要的就是要形成一个良好的正向循环,这样才会有继续学习下去的动力。
2.学到什么时候
对于一个算法到底应该学到什么时候或者什么层次同样也是初学者所面临的一个问题。可以想象,如果没有事先将一个算法的学习过程归结为如上3个阶段,此时笔者还真不知道告诉你应该学到哪种程度,因此笔者的建议是,对于所有的算法来讲阶段一是必须完成的,但对于一些相对容易的算法(如线性回归)可以要求自己达到上述3个阶段,而对于那些难度较大的算法(如支持向量机)可以根据自己的定位选择。同时需要注意的是,对于任何一个算法的学习很少有人能做到学一遍就全懂的境界,所以也不要抱着学一遍就结束的想法。
因此,各位读者在实际的学习过程中,可以在第一次学习时先达到阶段一,然后在第二次学习时再达到阶段二……因为这样分阶段的学习方式更能够相对容易地使自己获得满足感,获得继续学下去的乐趣。最后,照着以上步骤进行,学习3~4个算法后,便算得上是初窥机器学习的门径了。
本书特色
从整理笔记伊始,笔者尽量选择了以直白的方式阐述每个算法背后的思想与原理。尽管这看起来可能有点口语化,但极大地降低了学习的门槛,尤其是对于那些非计算机专业的读者来讲。同时,对于一些重要而又难以理解的概念,笔者会尝试2~3次以不同的口吻进行阐述。例如笔者在第3章中用了下面这段话阐述为什么需要用到最大似然估计:
我们知道,在有监督的机器学习中都是通过给定训练集,即(x(i),y(i))求得其中的未知参数W和b。换句话说,对于每个给定的样本x(i),事先已经知道了其所属的类别y(i),即y(i)的分布结果是知道的。那么,什么样的参数W和b能够使已知的y(1),y(2),…,y(m)这样一个结果(分布)最容易出现呢?也就是说,给定什么样的参数W和b,能使当输入x(1),x(2),…,x(m)这m个样本时,最能够产生已知类别标签y(1),y(2),…,y(m)这一结果呢?
尽管这段话读起来可能有些啰唆,但只要各位读者认真体会,一定会受益匪浅。
本书源代码
扫描下方付费二维码,可获取本书源代码。
说明:文中需扫码阅读的请扫此付费二维码。
致谢
首先感谢清华大学出版社赵佳霓编辑的耐心指点,以及对本书出版的推动;其次感谢在本书中笔者所引用文献的作者,没有你们的付出也不会有本书的出版;然后感谢Brandy、十、olderwang、XiaomeiMi、Wanlong、fanfan和凌同学吃饱了为本书提出的宝贵意见;最后还要感谢笔者的家人在背后默默地支持笔者。
由于时间仓促,书中难免存在不妥之处,请各位读者见谅,并提宝贵意见。如能再版,你们的名字也将出现在致谢当中。
王成
2022年4月