《机器学习-原理、算法与应用》出版了

为什么要写本书?

本书的前身为《机器学习与应用》,雷明著,清华大学出版社。在第一版的基础上做了大幅度优化,并经过反复校对,最终形成此书。由于之前是第一次写书,缺乏经验,导致了书的内容过多,里面存在大量开源库代码占据篇幅。这一版改进了这些问题,且增加了不少新的内容,更为系统和全面,品质也得到了不小的提升。

《机器学习-原理、算法与应用》出版了

SIGAI微信公众号自去年4月份发布第一篇文章“机器学习-波澜壮阔40年”起,到今天为止,已经累计发布文章164篇,在各个平台的阅读次数超过超过300万次,深受人工智能学习者和从业者的喜爱,其中不乏大量的精品文章。此公众号创立之初的目的是为了帮助大家学习和掌握人工智能技术,用于学术研究和产品研发,传播人工智能技术。

作为公众号文章的早期的主要作者,我之前写了大量阅读量深受大家喜爱的文章,如:

学好机器学习需要哪些数学知识?

基于深度学习的目标检测算法综述

用一张图理解SVM的脉络

深度卷积神经网络演化历史及结构改进脉络

理解梯度下降法

用一句话总结常用的机器学习算法

机器学习算法地图

深度学习算法地图

其他的不再一一列举。这些文章有一个共同的特点:脉络清晰,深入浅出,一针见血。它们将一些复杂的理论和算法用很浅显易懂的方式表达出来。这是我写作的初衷,读者真正需要的是能看懂,而不是看不懂!

由于时间仓促,且不是正规的出版物,这些文章的质量无法得到完全的保证。为了让内容更为系统,准确,帮助大家学好机器学习与深度学习,我一直有写一本机器学习教材的想法。但是,市面上已经有不少这方面的经典教材,国外的如《PRML,Pattern Recognition and Machine Learning》,《ESL,The Elements of Statistical Learning》,《Pattern Classification》,《MLAPP,Machine Learning-A Probabilistic Perspective》,《Deep Learning》。国内的有大家耳熟能详的《机器学习 西瓜书》以及《统计学习方法》。这些经典教材经过了市场检验,其质量之高,是毋庸置疑的!既然已经有这么多经典教材,还有“重复造轮子”的必要吗?

笔者的回答是有必要。这里面国外的经典教材,笔者当年基本上都读过,国内的教材,也大致翻了一遍。作为一个过来人,我觉得这些教材在如下方面还可以做出改进:

1.内容是否系统性全面,是否老化。仔细读过这些教材的读者会发现,要真正做到这一点并不容易。机器学习和深度学习最近几年发展很快,新方法和理论层出不穷。若非频繁的更新,经典的教材要跟上时代的步伐绝非易事。另外,由于作者自己的知识面和偏好,能够全面覆盖机器学习和深度学习主要算法的书屈指可数。当然,是否要在一本书里同时讲机器学习和深度学习也是有争议的。

2.表述是否浅显易懂而又不失深度。在这方面,PRML堪称优秀代表,作者语言朴实易懂,将各种算法和理论阐述的非常清晰。而有的教材,看上去则晦涩难懂,尤其是对初学者。

3.对理论的讲述是否细致深入。这一点的优秀代表是《统计学习方法》和《PRML》,《ESL》以及《MLAPP》。要将算法的推导和证明做的很细,是非常耗费时间和精力的。

4.对实际的应用是否有系统性的阐述。要知道,人工智能,乃至整个计算机科学,是偏实践和应用的学科。很多读者在学完机器学习之后并不知道怎么用的。而正式的教材,一般也不提及实际应用。这会造成很多困惑:这个算法到底有什么用?应该怎么用?

笔者发现,市面上能同时满足这几点的经典教材目前还空缺,因此下定决心,写出一本系统而全面,让读者能够读懂,且知道怎么用的教材来。事实上,这一计划在2014年就开始了,本书的部分内容也始于这一年。笔者深感自己功力有限,为了不班门弄斧,在写此书之前阅读了大量经典论文,有不少都经过了反复推敲和锤炼。写书所耗费的时间和精力大幅度的超出了我的预期。

为什么要选择这本书?

本书适合作为高等学习本科,研究生的机器学习和深度学习教材,也可作为人工智能领域研发人员的参考书。作为一本机器学习、深度学习入门与提高,尤其是入门的教材,在笔者看来,需要具备以下特点:

1.内容全面系统。作为教材,对一个领域的阐述必须是全面而系统的,而非支离破碎的知识点。本书做到了这一点,内容包括了有监督学习,无监督学习,强化学习的核心算法,共计54种。内容的组织合理,条理清晰。结合SIGAI的“机器学习算法地图”,“深度学习算法地图”使用,效果更佳。如果完整的学习本书,可以让你对机器学习和深度学习有全面而系统的理解。为了让读者理解数学公式,本书特意在第2章安排了数学知识的讲解。

2.深入浅出。写书的目的是让读者能够看到,且更容易看懂,即将复杂的问题简单化,而不是相反。本书的内容在深度上与经典教材相当,在表述上下足了功夫,用浅显易懂的语言将复杂的机器学习算法阐述清楚。对于这一领域公认的难以理解的点,如SVM,EM算法,反向传播算法,流形学习等有非常清晰而易懂的讲述。化抽象为具体,变复杂为简单。对于很多关键点,一针见血,直指问题的本质。这是一本读者真正能够读懂的机器学习教材。

3.理论讲述详细。对主要的机器学习算法和理论,从思想起源讲起,有详细的推导和证明,很多内容是市面上的教材所不曾有的。笔者亲手推导了几乎所有公式,证明了大量的核心结论。为了让读者对算法的实现不再困惑,对实现时的要点有系统性的阐述。

4.系统的阐述了具体应用。对主要算法在机器视觉,语音识别,自然语言处理等领域的应用有详细的阐述,帮助读者理解算法的使用,养成实际建模的能力。

5.配有大量实验程序源代码。对主要的机器学习算法,均配有实验程序,使用python语言编写,基于sklearn,libsvm,liblinear等开源库。为了节约篇幅,所有代码均不在书中出现,通过扫描二维码免费下载。通过实验程序可以更好的理解算法的原理,掌握算法和开源库的使用。

6.配有大量讲解视频。对书中的难点,配有共计35个讲解视频,清晰而透彻。这些视频之前已经被国内外各层次的高校学生和老师大量使用,得到了广泛的好评。通过扫描二维码可以免费观看讲解视频。

7.参考文献齐全。各章均列出了主要的参考文献,供读者进一步阅读。

对于有意向将本书作为教材的高校,我们将在后续免费提供习题集和配套PPT。

《机器学习-原理、算法与应用》出版了

本书的目录

下面列出这本书的目录,供大家参考,全书共397页,23章。由基本概念与数学知识,主要的机器学习算法与理论,工程实践问题3部分构成。第一部分介绍了机器学习领域的基本概念与所需的核心数学知识点。第二部分内容含括了有监督学习,降维,聚类,半监督学习,强化学习的核心算法。第三部分内容讲述了工程实践中的若干重要问题。

第一部分基本概念与数学知识

第1章机器学习简介3

1.1机器学习是什么3

1.1.1一个简单的例子3

1.1.2为什么需要机器学习5

1.2典型应用7

1.2.1语音识别7

1.2.2人脸检测8

1.2.3人机对弈9

1.2.4机器翻译10

1.2.5自动驾驶11

1.3发展历程11

1.3.1历史成就11

1.3.2当前进展12

1.4关于本书13

参考文献13

第2章数学知识15

2.1微积分和线性代数15

2.1.1导数15

2.1.2向量与矩阵17

2.1.3偏导数与梯度19

2.1.4雅可比矩阵20

2.1.5Hessian矩阵21

2.1.6泰勒展开22

2.1.7行列式22

2.1.8特征值与特征向量23

2.1.9奇异值分解24

2.1.10二次型24

2.1.11向量与矩阵求导24

2.2最优化方法25

2.2.1梯度下降法25

2.2.2牛顿法26

2.2.3坐标下降法27

2.2.4拉格朗日乘数法28

2.2.5凸优化28

2.2.6拉格朗日对偶32

2.2.7KKT条件34

2.2.8拟牛顿法35

2.2.9面临的问题36

2.3概率论37

2.3.1随机事件与概率37

2.3.2条件概率37

2.3.3随机变量38

2.3.4数学期望与方差39

2.3.5随机向量39

2.3.6最大似然估计40

参考文献41

第3章基本概念42

3.1算法分类42

3.1.1监督信号42

3.1.2分类问题与回归问题43

3.1.3判别模型与生成模型45

3.1.4强化学习45

3.2模型评价指标46

3.2.1精度与召回率46

3.2.2ROC曲线46

3.2.3混淆矩阵48

3.2.4交叉验证48

3.3模型选择48

3.3.1过拟合与欠拟合48

3.3.2偏差与方差分解49

3.3.3正则化50

参考文献52

第二部分主要的机器学习算法与理论

第4章贝叶斯分类器55

4.1贝叶斯决策55

4.2朴素贝叶斯分类器56

4.2.1离散型特征56

4.2.2连续型特征57

4.3正态贝叶斯分类器57

4.3.1训练算法57

4.3.2预测算法58

4.4实验程序59

4.5应用61

参考文献61

第5章决策树62

5.1树形决策过程62

5.2分类与回归树63

5.3训练算法64

5.3.1递归分裂过程64

5.3.2寻找最佳分裂64

5.3.3叶子节点值的设定67

5.3.4属性缺失问题67

5.3.5剪枝算法68

5.3.6训练算法的流程69

5.3.7计算变量的重要性70

5.4实验程序70

5.5应用71

参考文献71

第6章k近邻算法72

6.1基本概念72

6.2预测算法72

6.3距离定义73

6.3.1常用距离定义74

6.3.2距离度量学习74

6.4实验程序75

6.5应用76

参考文献76

第7章数据降维78

7.1主成分分析78

7.1.1数据降维问题78

7.1.2计算投影矩阵78

7.1.3向量降维81

7.1.4向量重构81

7.2流形学习81

7.2.1局部线性嵌入82

7.2.2拉普拉斯特征映射83

7.2.3局部保持投影86

7.2.4等距映射87

7.2.5随机近邻嵌入88

7.2.6t分布随机近邻嵌入89

7.3实验程序90

7.4应用91

参考文献91

第8章线性判别分析92

8.1用投影进行分类92

8.2投影矩阵92

8.2.1一维的情况92

8.2.2推广到高维94

8.3实验程序96

8.4应用96

参考文献97

第9章人工神经网络98

9.1多层前馈型神经网络98

9.1.1神经元98

9.1.2网络结构99

9.1.3正向传播算法100

9.2反向传播算法101

9.2.1一个简单的例子101

9.2.2完整的算法105

9.3实验程序109

9.4理论解释110

9.4.1数学性质110

9.4.2与神经系统的关系111

9.5面临的问题111

9.5.1梯度消失111

9.5.2退化111

9.5.3局部极小值111

9.5.4鞍点111

9.6实现细节问题112

9.6.1输入值与输出值112

9.6.2网络规模112

9.6.3**函数112

9.6.4损失函数113

9.6.5权重初始化113

9.6.6正则化113

9.6.7学习率的设定114

9.6.8动量项114

9.7应用114

参考文献115

第10章支持向量机118

10.1线性分类器118

10.1.1线性分类器概述118

10.1.2分类间隔118

10.2线性可分的问题119

10.2.1原问题119

10.2.2对偶问题120

10.3线性不可分的问题123

10.3.1原问题123

10.3.2对偶问题123

10.4核映射与核函数126

10.5SMO算法129

10.5.1求解子问题129

10.5.2优化变量的选择132

10.6多分类问题133

10.7实验程序134

10.8libsvm简介136

10.8.1求解算法137

10.8.2库的使用140

10.9应用142

参考文献143

第11章线性模型145

11.1logistic回归145

11.1.1第一种表述145

11.1.2第二种表述147

11.1.3L2正则化原问题148

11.1.4L2正则化对偶问题151

11.1.5L1正则化原问题152

11.1.6实验程序154

11.2线性支持向量机156

11.2.1L2正则化L1loss SVC原问题156

11.2.2L2正则化L2loss SVC原问题156

11.2.3L2正则化SVC对偶问题157

11.2.4L1正则化L2loss SVC原问题158

11.2.5多类线性支持向量机158

11.2.6实验程序160

11.3liblinear简介160

11.3.1求解的问题161

11.3.2库的使用161

11.4softmax回归162

11.5应用164

参考文献165

第12章随机森林166

12.1集成学习166

12.1.1随机抽样166

12.1.2Bagging算法167

12.2随机森林概述167

12.3训练算法167

12.4变量的重要性168

12.5实验程序169

12.6应用169

参考文献169

第13章Boosting算法171

13.1AdaBoost算法171

13.1.1强分类器与弱分类器171

13.1.2训练算法172

13.1.3训练误差分析174

13.2广义加法模型176

13.3各种AdaBoost算法177

13.3.1离散型AdaBoost177

13.3.2实数型AdaBoost179

13.3.3LogitBoost180

13.3.4Gentle型AdaBoost181

13.4实现细节问题182

13.4.1弱分类器182

13.4.2弱分类器的数量182

13.4.3样本权重削减183

13.5实验程序183

13.6梯度提升算法183

13.6.1梯度提升框架184

13.6.2回归问题185

13.6.3分类问题185

13.6.4XGBoost187

13.7应用——目标检测189

13.7.1VJ框架的原理190

13.7.2模型训练192

参考文献193

第14章深度学习概论195

14.1机器学习面临的挑战195

14.1.1人工特征196

14.1.2机器学习算法197

14.2深度学习技术197

14.3进展与典型应用199

14.3.1计算机视觉200

14.3.2语音识别202

14.3.3自然语言处理202

14.3.4计算机图形学203

14.3.5推荐系统203

14.3.6深度强化学习204

14.4自动编码器204

14.4.1自动编码器简介204

14.4.2去噪自动编码器205

14.4.3稀疏自动编码器205

14.4.4收缩自动编码器206

14.4.5多层编码器206

14.5受限玻尔兹曼机206

14.5.1玻尔兹曼分布206

14.5.2受限玻尔兹曼机结构207

14.5.3训练算法209

14.5.4深度玻尔兹曼机210

14.5.5深度置信网210

参考文献210

第15章卷积神经网络218

15.1网络结构218

15.1.1卷积层219

15.1.2池化层222

15.1.3全连接层222

15.2训练算法223

15.2.1卷积层223

15.2.2池化层226

15.2.3随机梯度下降法227

15.2.4迁移学习228

15.3典型网络228

15.3.1LeNet5网络228

15.3.2AlexNet网络229

15.3.3VGG网络230

15.3.4GoogLeNet网络231

15.4理论分析232

15.4.1反卷积运算232

15.4.2卷积层可视化233

15.4.3理论解释235

15.5挑战与改进措施236

15.5.1卷积层236

15.5.2池化层236

15.5.3**函数237

15.5.4损失函数237

15.5.5网络结构237

15.5.6批量归一化241

15.6实现细节242

15.6.1卷积层242

15.6.2**函数244

15.6.3内积层244

15.6.4损失层245

15.6.5求解器248

15.7应用——计算机视觉251

15.7.1人脸检测251

15.7.2通用目标检测254

15.7.3人脸关键点定位262

15.7.4人脸识别263

15.7.5图像分割265

参考文献266

第16章循环神经网络270

16.1网络结构270

16.1.1循环层270

16.1.2输出层271

16.1.3一个简单的例子272

16.1.4深层网络272

16.2网络的训练273

16.2.1一个简单的例子273

16.2.2完整的算法275

16.3挑战与改进措施277

16.3.1梯度消失277

16.3.2长短期记忆模型278

16.3.3门控循环单元279

16.3.4双向网络279

16.4序列预测问题280

16.4.1序列标注问题280

16.4.2连接主义时序分类281

16.4.3序列到序列学习285

16.5应用——语音识别287

16.5.1语音识别问题287

16.5.2GMM-HMM框架288

16.5.3深度模型288

16.6应用——自然语言处理291

16.6.1中文分词292

16.6.2词性标注293

16.6.3命名实体识别293

16.6.4文本分类294

16.6.5自动摘要296

16.6.6机器翻译296

参考文献298

第17章生成对抗网络302

17.1随机数据生成302

17.2生成对抗网络结构303

17.2.1生成模型303

17.2.2判别模型304

17.3模型的训练304

17.3.1目标函数304

17.3.2训练算法305

17.3.3理论分析306

17.4应用与改进307

17.4.1改进方案308

17.4.2典型应用311

参考文献313

第18章聚类算法314

18.1问题定义314

18.2层次聚类315

18.3基于质心的算法315

18.4基于概率分布的算法316

18.4.1高斯混合模型316

18.4.2EM算法317

18.5基于密度的算法322

18.5.1DBSCAN算法322

18.5.2OPTICS算法324

18.5.3Mean Shift算法326

18.6基于图的算法328

18.7算法评价指标331

18.7.1内部指标331

18.7.2外部指标331

18.8实验程序332

18.9应用332

参考文献332

第19章半监督学习334

19.1问题假设334

19.1.1连续性假设334

19.1.2聚类假设334

19.1.3流形假设334

19.1.4低密度分割假设334

19.2启发式算法335

19.2.1自训练335

19.2.2协同训练335

19.3生成模型335

19.4低密度分割336

19.5基于图的算法336

19.6半监督深度学习337

参考文献338

第20章隐马尔可夫模型340

20.1马尔可夫模型340

20.2隐马尔可夫模型简介343

20.2.1模型结构343

20.2.2中文分词345

20.3估值问题345

20.4解码问题347

20.5训练算法349

20.6应用352

参考文献352

第21章条件随机场353

21.1马尔可夫随机场353

21.1.1概率图模型353

21.1.2马尔可夫随机场354

21.2条件随机场概述355

21.2.1条件随机场简介355

21.2.2线性链条件随机场355

21.3推断算法357

21.4训练算法359

21.5应用360

参考文献360

第22章强化学习361

22.1强化学习简介361

22.1.1问题定义361

22.1.2马尔可夫决策过程362

22.2基于动态规划的算法366

22.2.1策略迭代算法366

22.2.2价值迭代算法368

22.3蒙特卡洛算法369

22.3.1算法简介369

22.3.2状态价值函数估计370

22.3.3动作价值函数估计371

22.3.4蒙特卡洛控制371

22.4时序差分学习372

22.4.1Sarsa算法372

22.4.2Q学习373

22.5深度强化学习374

22.5.1深度Q网络375

22.5.2策略梯度算法378

22.6应用381

参考文献381

第三部分工程实践问题

第23章工程实践问题概述385

23.1实现细节问题385

23.1.1训练样本385

23.1.2特征预处理386

23.1.3模型选择386

23.1.4过拟合问题386

23.2安全性问题387

23.2.1对抗样本387

23.2.2形成原因分析389

23.3实现成本问题390

23.3.1训练样本量390

23.3.2计算与存储成本390

23.4深度模型优化391

23.4.1剪枝与编码391

23.4.2二值化网络392

23.4.3卷积核分离396

参考文献397

如何使用本书

学习本书需要读者具有大学本科理工科的数学基础,以及基本的程序设计知识。包括:

微积分/高等数学

线性代数

概率论

书中有大量涉及最优化方法,对于国内高校的大部分学生是没有学过这门课的,但通过阅读本书第2章,能够有效弥补这些知识。

如果有至少一种程序设计语言的知识,已经数据结构和算法的基础知识,阅读起来会更为顺畅。要阅读和修改本书的实验程序则需要读者掌握python语言程序设计。

对于要学机器学习或深度学习课程的同学,建议系统的阅读本书,以保证能够理解内容,知识系统。对于要实际使用机器学习或深度学习算法的工程技术人员,可以根据自己的需要进行裁剪,阅读所需的章节,以节约时间和精力。

作者简介

雷明,2009年毕业于清华大学计算机系,研究方向为机器学习,机器视觉。曾发表论文数篇。毕业后曾就职于百度,任高级软件工程师;zmodo/meshare,任CTO。有超过15年机器学习学术研究与产品研发经验。SIGAI微信公众号早期主要作者。

如何购买本书

《机器学习-原理、算法与应用》出版了

本书已经在京东预售,购买链接为:

https://item.jd.com/12685964.html?dist=jd

由于水平有限,时间仓促,书中难免会有错误。本书的勘误可以在:

http://www.tensorinfinity.com/paper_78.html

免费获取

文中所提及的深受人民群众喜爱的机器学习算法地图和深度学习算法地图可以在:

http://www.tensorinfinity.com/paper_158.html

http://www.tensorinfinity.com/paper_18.html

免费获取

致谢

本书在写作和优化过程中收到了大量读者和同事、同行的反馈。这本书的诞生凝聚了清华大学出版社白立军老师的大量心血,得到了出版社领导和老师的大力支持。数位热心读者为本书审稿。上海交通大学计算机系严骏驰教授为本书作序,哈佛大学数学中心教授、丘成桐先生的弟子顾险峰教授,前优酷首席科学家李卓桓师兄,笔者的好友刘彬先生,师弟欧阳鹏博士,张振博士为本书写推荐。

在此一并表示感谢!