机器学习与攻略力荐
2016年3月,google的AlphaGo对弈国际尖端围棋棋手韩国人李世石。终究,AlphaGo以五局四胜的战绩击败李世石,一时风景无限,同时也在网络上极大的激起了小伙伴们对人工智能(AI)的爱好。岁末年初,一个名叫“Master”的神秘网络围棋手轰动了围棋界,自去年12月29日开始,它在几个知名围棋对战平台上轮番挑战中日韩围棋高手,并在1月3日晚间击败了中国顶级围棋手柯洁,取得了50胜0负的惊人战绩。人们纷纷猜测“Master”就是谷歌人工智能AlphaGo的升级版。谜底很快被揭晓,就在Master取得第59场连胜后,Master账号宣布自己就是AlphaGo。各种媒体对此番交战大肆报道,某些电视上的谈话节目甚至以“人工智能在未来会否抢去人类饭碗”之类的话题展开热烈讨论。
其实人机大战这也不是头一次了。早在二十年前,国际象棋特级大师,世界冠军卡斯帕罗夫就曾与IBM公司的超级电脑“深蓝”之间进行过终极对抗。在总共的六局比赛里,卡斯帕罗夫最终以五平一负的战绩宣告败北。尽管当时媒体也有报道,但远远没有引起像最近这一两年来AlphaGo这样的话题热度。原因何在?天时也!IT界无论是小伙伴还是祖国的老花朵都意识到人工智能时代真的来了。去年在乌镇召开的世界互联网大会上,百度CEO李彦宏就表示:移动互联网时代已经结束,未来属于人工智能!
于是乎,众多小伙伴,无论是IT从业者,还是尚处在学校的青年学子,纷纷摩拳擦掌,跃跃欲试,希望至少不要被AI时代给落下。然而,要进入人工智能这个圈子,却要比从“Java程序员转成C++程序员”难太多了,很多人对此都表示望而却步或者望洋兴叹。很多人都是无头苍蝇,不得其法,好像功夫也没少下,但却还是只能在门外转悠。我希望下面的一些建议能让大家少走一些弯路或者尽快走上正路。(注意:我可没说是有捷径可走!毕竟有一些坎始终无法绕过去,这就如同一个无形的筛子摆在那一样,很多人会被其“过滤”掉。)
一、数学——万般无奈皆源此
最近读了一篇热文《放弃幻想,搞AI必须先过数学关》(你可以从参考链接【1】中浏览该文全文),文章基本已经把数学之于AI的重要性阐释的比较清楚,我只略截取一些核心内容(相信每个过来人都会有此共同心声):
“在 AI 学习的入门阶段,数学是主要的攻坚对象,任何胸有大志的 AI 学习者都不要幻想绕过数学。” 尽管 AI 工具化的可能性是有的,而且是必然,趋势很明显。所以很多时候AI工程师并不像程序开发人员那样强调编码的能力与经验,更多的时候AI工程师是在使用各种框架,调用各种现成的函数库、软件包等等。但是,“数学不过关的人在 AI 这个圈子里是无法参与交流的,或者说得直白一点,是被人瞧不起的,根本无法被接纳成为AI 圈子里的人。其次,数学不过关而只能调参数的人,实践当中并不好用。第三,即便是调参这件事情本身,懂不懂数学也是有很大差别的。”
说的很多小伙伴恐怕心都凉了一半,或者已经开始打退堂鼓了。不要紧,山人自有妙法。下面就给大家分享一下我的数学学习经验,主要是一些资源(书籍或者视频课程)。人工智能(机器学习或数据挖掘等)中最最重要的数学就是线性代数与概率论(还有其他,但这两者比重最大)。
1、线性代数
很多人会推荐MIT的线性代数公开课(确实不错),但是很多中国学生听英文课仍然有障碍,即使有字幕翻译,恐怕也会影响学习速度,所以我推荐台湾国立交通大学莊重特聘教授主讲的线性代数课程,本课程分上下两个学期:
- http://ocw.nctu.edu.tw/course_detail.php?bgid=1&gid=1&nid=271#.WKm5gxBCtsA
- http://ocw.nctu.edu.tw/course_detail.php?bgid=1&gid=1&nid=361#.WKm5gxBCtsA
我个人认为本课程的特色包括:
1)老师讲得非常非常细致,如果你循序渐进跟着学,绝对可以听得懂;
2)这门课程其实是从泛函的角度来讲解线性代数(同时兼顾了矩阵角度),会帮你建立一种更加高屋建瓴的线性代数观念;
3)课程与实际应用结合非常紧密,像最小二乘法、奇异值分解SVD等在机器学习非常重要的内容都有深入探讨。
同时,本课程所选用的教材也是你自学线性代数的一本上乘之选(网上可以找到本书的PDF版):
- Linear Algebra 4th Edition, Stephen Friedberg, Arnold Insel, Lawrence Spence,Prentice Hall
如果想自学,或者仅仅是温故以往所学的线性代数,那么下面这本从矩阵角度解释线性代数的书可能更适合中国人的阅读习惯,这本书里对于最小二乘法、SVD等内容亦有涉及。
- 线性代数及其应用 (原书第3版) David C Lay著,刘深泉等译,机械工业出版社
目前这本书的中英文版国内都可以买到:
2、概率论
有一个非常非常简单的入门课——国立台湾大学叶丙成的概率课:
- http://mooc.guokr.com/course/461/%E6%A9%9F%E7%8E%87/
但是上面这个课属于扫盲课,如果你觉得深度还不够,那么我还是推荐你从下面这些书籍中找一本来作为参考,因为概率论方面的书特别特别多,我推荐几本各具特色的:
1)首先是由Sheldon M. Ross编写的《概率论基础教程(第9版)》,这是一本在世界范围内被广泛使用的教材,内容严谨而且全面。鉴于概率论是大学本科阶段的必修内容,如果你不是忘掉太多,其实并不用重头开始学,所以备这样一本书,偶尔翻查一下也是不错的选择。
像概率里面的期望、方差、概率密度函数、边缘分布、贝叶斯定理、全概率公式、矩母函数、二项分布、高斯分布、贝塔分布等等在机器学习中都非常非常重要。最后这本算是概率学习里面比较深的一本(也非常经典),供有深入学习需求的人研读。
3)概率与计算——随机算法与概率分析,Michael M. & Eli Upfal 著
3、统计学
注意统计和概率是不一样的,尽管它们的关系实在太紧密,所以讲概率的书里往往也会插入一些统计方面的知识。但还是专门讲统计的书更专注一些。统计的书挺多,但是非统计专业,也不必学得太深。
1)统计学(第四版),贾俊平等编著。这是国内高校普遍使用的一本教材,我觉得条例是比较清晰的,讲解也比较到位,如果你要系统地学,那么它是一个不错的选择。
2)R语言实战——机器学习与数据分析,这是博主夹带的私货。不要被名字遮住眺望的眼睛,这里的“数据分析”主要是指统计数据分析,所以这本书里有1/3在讲解统计知识,而且是剥掉冗余只留干活地收录了几乎所有你该知道的统计知识(甚至包括非参数检验的内容),R语言是辅助统计计算的工具,便于向你演示一些统计方法的具体细节。
3)统计推断是统计学的核心。统计推断一般包括参数估计和假设检验两个部分。其中假设检验包括参数假设检验和非参数检验两类。参数估计又包括点估计和区间估计两种,而点估计的方法主要有矩方法和极大似然法。如果你觉得希望在统计推断方面有跟深入的研究,那么下面这本书就是一个比较经典的读物。
4、高等数学(或者叫微积分)
通常微积分部分在AI中的占比不如线性代数和概率,这其实也主要是因为我们假设像“求导计算”这样的基本功,上过大学的人应该都已经掌握。在机器学习的公式推导中,一般求导公式,链式法则,分部积分法、偏导数,这些内容都是家常便饭,如果你的记忆已经模糊,那么其实上学时的高数教材就可以涵盖这些必要的计算技巧。例如:
- 同济大学版的 高等数学(上、下)(第5版及以后)
一般这套书工科大学上课都会用到。书比较严谨,也比较经典,如果自学感觉比较枯燥,当字典查查也不错,比如公式忘了就翻翻看。
如果你基础不错,还没忘光,可以在不确定的地方翻翻看该书。如果你想复习或者重新学,或者有的地方书上讲得看不懂,我推荐看国防科大的MOOC视频课(朱健民教授主讲):
- http://www.icourse163.org/university/NUDT#/c,高等数学(一)(二)(三)(四)(五)
因为全部课程有100集之多,可能相当考验学习者的毅力。个人认为在机器学习里会用到的地方主要是泰勒展开(牛顿法的基础)、梯度的概念(在学习梯度下降,你当然应该知道梯度的意义),和一些基本的最优化问题求解等。
5、其他数学书
有些东西或是“跳出三界外,不在无形中”,或是“哪里都讲,但哪里又都不讲全”,对于这类问题,似乎也只能找些非常专门的书来参考了。比如拉格朗日乘数法,在机器学习里也算是比较常用的技巧了,在SVM里会出现,在多元逻辑回归时也会出现,要想学习学习它,有些微积分的书里会讲,有些泛函分析的书里也会讲,但是为了学习拉格朗日乘数法把泛函分析也学一遍,好像又有点太麻烦。不如直接学凸优化吧!
1)凸优化——这也算是备受推崇的一本书了,SVM的推导核心就是凸优化的具体应用,名声在外,不多赘述。
2)应用回归分析(第三版),何晓群,等编著。“回归”(包括线性回归及其推广)是个比较特殊的存在。早在机器学习诞生之前很久很久,它就已经存在了,更多的时候研究它的人都是统计学家。所以现在在统计学(或者计量经济学)的教材里面都有回归的一席之地。而回归分析也在机器学习中举重若轻,是机器学习中的一类重要方法。但是机器学习书籍的作者往往会认为,那些修过统计的人对于回归已经很熟悉了,或者他们的读者可以干脆找本统计的书来看,所以一般的机器学习书里并不太重视回归话题的探讨(有的书会提到,但篇幅都有限)。如果你对回归很感兴趣,那么不妨看看下面这本专门讲回归的书。
6、一些机器学习书中的数学基础部分
因为数学对于机器学习来说太重要了,某些机器学习方面的书还会专门开辟章节“提纲挈领”地给出阅读后续内容所必须的数学基础。如果你自我感觉数学还不错,那么你大可以看看下面这个两部书中的相关章节,如果你感觉作者所列之内容皆了然于心,那倒也省却诸多繁冗。但如若有些坑还不能填上,那么其实也可以按图索骥找些资料来看,好处是定位精准,所学即所需;不好的地方在于,数学知识之间的牵连深广,可能你不会的知识点是A,当你去找关于A的资料来看时,返现其中又用到了B,所以也又不得不去找B方面的资料来看,而且这个链条还可能继续延伸下去。所以各种利弊只有你冷暖自知了。
1)Chris Bishop, Pattern Recognition And Machine Learning,这本是机器学习里面的经典之作,其中第1、2章介绍了一些在阅读书籍时所必备的数学基础。
2)Ian Goodfellow , Yoshua Bengio , Aaron Courville,Deep Learning,本书第2、3、4章分别介绍线性代数、概率与信息论、数值计算。
一不小心现已写了这么多了,谁让数学在AI中的重量这么重呢。好在跟数学有关的材料我现已都引荐到了,后续文章中我们再来详细谈机器学习和数据发掘方面的材料吧 :)