机器学习没有捷径,根据机器学习算法地图学习是最有效的一种方式
《机器学习与应用》由清华大学出版社出版,是机器学习和深度学习领域又一高质量的入门与提高教材。该书系统、深入地讲述了机器学习与深度学习的主要方法与理论,并紧密结合工程实践与应用。
作者简介
雷明,毕业于清华大学计算机系,研究方向为机器学习、计算机视觉。有超过12年的学术研究与产品研发经验,曾发表论文数篇,具有深厚的理论功底与丰富的实践经验。其撰写的系列技术文章在半年内累计阅读量达数百万次,擅长用生动、形象的语言把复杂、抽象的理论和算法解释清楚。
适读人群
计算机,电子,自动化,人工智能等相关专业的本科生,研究生
从事人工智能学术研究与产品研发的人员
对人工智能、机器学习感兴趣的人
本书优势(附精彩试读)
1、内容全面、系统,紧跟技术进步
完整的讲述了机器学习、深度学习主要算法以及在各个领域的典型应用,含括了学术界与工业界截止2017年初的新成果,紧跟时代步伐,弥补了市面上经典教材内容老化的缺憾。
精彩试读:
图像超分辨的目标是由低分辨率的图像得到高分辨率的图像,传统的做法大多采用纯图像处理的技术。用机器学习的思路解决超分辨问题取得了更好的效果,卷积神经网络被成功地用于超分辨问题。文献[7]提出了一种用生成对抗网络框架解决图像超分辨问题的方法,称为超分辨生成对抗网络,简称SRGAN,能够将缩小4倍以上的图像进行复原。
这种方法使用了一种新的损失函数,由对抗损失和内容损失两部分构成。第一部分损失和标准生成对抗框架相同,通过一个判别模型,让生成网络生成的超分辨图像和真实高分辨率图像尽可能接近。
生成器卷积网络采用了深度残差网络;判别模型也是一个层次很深的卷积网络,用于区分一张图像是真实的高分辨率图像还是由生成器网络生成的图像。网络结构如下图所示。
图像超分辨的网络结构
假设低分辨率图像为,这里的目标是根据它估计出高分辨率的图像,在训练样本中与低分辨率图像相对应的真实高分辨率图像为。
2、推导论证清晰、深入、详细
绝大部分核心算法均有详细的推导、证明过程,从问题本源、思想层面对算法进行讲解,让读者不仅知其然还知其所以然,真正掌握算法的思想与精髓。在书的前部对机器学习所需的数学知识也做了系统的讲解
精彩试读:
目标函数的二阶导数为,前面假设二阶导数,从而保证目标函数是凸函数,即开口向上的抛物线,有极小值。如果,或者该怎么处理?对于线性核或正定核函数,由于矩阵的任意一个上述子问题对应的二阶子矩阵半正定,必定有。下面给出证明这个关于两个变量的子问题的目标函数是凸函数,只需要证明它的Hessian矩阵是半正定矩阵。这两个变量的目标函数的Hessian为
和10.3.2节证明整个对偶问题的Hessian矩阵正定的方法相同,如果是线性核,这个矩阵也可以写成一个矩阵和它的转置的乘积形式:
矩阵为训练样本特征向量乘上类别标签形成的矩阵。显然这个Hessian矩阵是半正定的,因此必定有。如果是非线性核,因为核函数相当于对两个核映射之后的向量做内积,因此上面的结论同样成立。
无论本次迭代时和的初始值是多少,通过上面的子问题求解算法得到是在可行域里的最小值,因此每次求解更新这两个变量的值之后,都能保证目标函数值小于或者等于初始值,即函数值下降,所以SMO算法能保证收敛。
3、核心算法配有实现细节介绍,使用示例,知名开源库代码分析
对大部分核心算法的实现细节进行了介绍,并配有示例程序与知名开源库源代码分析,包括OpenCV,libsvm,liblinear,Caffe,这对需要使用、实现机器学习算法的读者至关重要
精彩试读:
求解器的实现是源代码分析的核心,分为可信域牛顿法与坐标下降法两类。可信域牛顿法由TRON类实现,坐标下降法由各个问题具体的求解函数实现。限于篇幅,在这里只分析一部分求解器,其他的实现原理类似。
可信域牛顿法由类TRON实现,这个类为L2-正则化logistic回归和L2-正则化支持向量机的训练提供支持。类定义如下:
class TRON
{
public:
// 传入的是基类function的指针,可以使用上面两种损失函数,eps为迭代精度
// max_iter为最大迭代次数,默认值为1000
TRON(const function *fun_obj, double eps = 0.1, int max_iter = 1000);
~TRON();
// 这是求解的接口函数
void tron(double *w);
void set_print_string(void (*i_print) (const char *buf));
private:
int trcg(double delta, double *g, double *s, double *r); // 共轭梯度法,被tron调用
double norm_inf(int n, double *x);
double eps; // 收敛精度
int max_iter; // 最大迭代次数
function *fun_obj; // 目标函数
void info(const char *fmt,...);
void (*tron_print_string)(const char *buf);
};
4、重要算法的实际应用均有讲解
核心算法的实际应用都有介绍,对深度学习技术在计算机视觉、语音识别、自然语言处理、计算机图形学等领域的应用情况有详细而深入的介绍。这些内容能帮助读者掌握算法的实际应用方法、建模的思路。
在本书的核心算法部分介绍了机器学习和深度学习的主要算法,包括
线性回归
岭回归
LASSO回归
贝叶斯分类器
决策树
K近邻算法
距离度量学习
数据降维算法,包括主成分分析、流形学习
线性判别分析
人工神经网络
支持向量机
logistic回归
线性支持向量机
softmax回归
Bagging算法与随机森林
boosting算法
高斯混合模型
隐马尔可夫模型
自动编码器
受限玻尔兹曼机
卷积神经网络
循环神经网络
生成对抗网络
聚类算法,包括层次聚类、k均值算法、DBSCAN算法、OPTICS算法、EM算法、均值漂移算法、谱聚类
半监督学习,包括自训练、协同训练、生成模型、半监督支持向量机、基于图的算法、半监督深度学习
强化学习,包括策略迭代算法、价值迭代算法、蒙特卡洛算法、时序差分算法、深度Q网络、策略梯度算法
在工程实践部分介绍了机器学习算法在工程应用时面临的问题与解决方案,包括
样本的收集与标注
特征工程
算法与模型选择
过拟合问题
安全性问题(对抗样本)
计算与存储成本问题
深度神经网络模型压缩与优化
目录
全书由21章组成,共分为三大部分。第1~3章为第一部分,介绍机器学习的基本原理、所需的数学知识(包括微积分、线性代数、概率论和优化方法),以及机器学习中的核心概念。第4~20章为第二部分,是本书的主体,介绍各种常用的有监督学习算法、无监督学习算法、半监督学习算法和强化学习算法。对于每种算法,从原理与推导、工程实现和实际应用3个方面进行讲解,对于大多数算法,都配有实验程序。第21章为第三部分,介绍机器学习和深度学习算法实际应用时面临的问题,并给出典型的解决方案。此外,附录A给出各种机器学习算法的总结,附录B给出梯度下降法的演化关系,附录C给出EM算法的推导。
第一部分 基本概念与数学知识
第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
参考文献15
第2章数学知识17
2.1微积分和线性代数17
2.1.1导数17
2.1.2向量与矩阵19
2.1.3偏导数与梯度21
2.1.4雅克比矩阵22
2.1.5Hessian矩阵23
2.1.6泰勒展开24
2.1.7行列式24
2.1.8特征值与特征向量25
2.1.9奇异值分解26
2.1.10二次型26
2.1.11向量与矩阵求导26
2.2最优化方法27
2.2.1梯度下降法27
2.2.2牛顿法28
2.2.3坐标下降法29
2.2.4拉格朗日乘数法30
2.2.5凸优化30
2.2.6拉格朗日对偶34
2.2.7KKT条件36
2.2.8拟牛顿法37
2.2.9面临的问题38
2.3概率论39
2.3.1随机事件与概率39
2.3.2条件概率39
2.3.3随机变量40
2.3.4数学期望与方差41
2.3.5随机向量41
2.3.6最大似然估计42
参考文献43
第3章基本概念44
3.1算法分类44
3.1.1监督信号44
3.1.2分类问题与回归问题45
3.1.3判别模型与生成模型47
3.1.4强化学习47
3.2模型评价指标48
3.2.1精度与召回率48
3.2.2ROC曲线48
3.2.3混淆矩阵50
3.2.4交叉验证50
3.3模型选择50
3.3.1过拟合与欠拟合50
3.3.2偏差与方差分解51
3.3.3正则化52
参考文献54
第二部分主要的机器学习算法与理论
第4章贝叶斯分类器57
4.1贝叶斯决策57
4.2朴素贝叶斯分类器58
4.2.1离散型特征58
4.2.2连续型特征59
4.3正态贝叶斯分类器59
4.3.1训练算法59
4.3.2预测算法60
4.4实验程序61
4.5源代码分析64
4.5.1主要数据结构64
4.5.2训练函数65
4.5.3预测函数68
4.6应用70
参考文献71
第5章决策树72
5.1树形决策过程72
5.2分类与回归树73
5.3训练算法74
5.3.1递归分裂过程74
5.3.2寻找最佳分裂74
5.3.3叶子节点值的设定77
5.3.4属性缺失问题77
5.3.5剪枝算法78
5.4实验程序79
5.5源代码分析81
5.5.1主要数据结构81
5.5.2递归分裂84
5.5.3寻找最佳分裂90
5.5.4寻找替代分裂96
5.5.5变量的重要性99
5.5.6预测算法100
5.6应用103
参考文献103
第6章k近邻算法104
6.1基本概念104
6.2预测算法104
6.3距离定义105
6.3.1常用距离定义105
6.3.2距离度量学习106
6.4实验程序107
6.5应用109
参考文献110
第7章数据降维111
7.1主成分分析111
7.1.1数据降维问题111
7.1.2计算投影矩阵111
7.1.3向量降维114
7.1.4向量重构114
7.2源代码分析114
7.2.1主要数据结构114
7.2.2计算投影矩阵115
7.2.3向量降维117
7.2.4向量重构117
7.3流形学习118
7.3.1局部线性嵌入119
7.3.2拉普拉斯特征映射119
7.3.3局部保持投影122
7.3.4等距映射123
7.4应用124
参考文献124
第8章线性判别分析125
8.1用投影进行分类125
8.2投影矩阵125
8.2.1一维的情况125
8.2.2推广到高维127
8.3实验程序128
8.4源代码分析131
8.4.1主要数据结构131
8.4.2计算投影矩阵132
8.4.3向量投影135
8.4.4向量重构136
8.5应用136
参考文献137
第9章人工神经网络138
9.1多层前馈型神经网络138
9.1.1神经元138
9.1.2网络结构139
9.1.3正向传播算法140
9.2反向传播算法141
9.2.1一个简单的例子141
9.2.2完整的算法145
9.3实验程序149
9.4理论解释152
9.4.1数学性质152
9.4.2与神经系统的关系153
9.5面临的问题153
9.5.1梯度消失153
9.5.2退化154
9.5.3局部极小值154
9.5.4鞍点154
9.6实现细节问题154
9.6.1输入值与输出值154
9.6.2网络规模155
9.6.3激活函数155
9.6.4损失函数156
9.6.5权重初始化156
9.6.6正则化156
9.6.7学习率的设定156
9.6.8动量项156
9.7源代码分析157
9.7.1主要数据结构157
9.7.2激活函数160
9.7.3权重初始化163
9.7.4训练函数164
9.7.5预测函数177
9.8应用179
参考文献180
第10章支持向量机182
10.1线性分类器182
10.1.1线性分类器概述182
10.1.2分类间隔182
10.2线性可分的问题183
10.2.1原问题183
10.2.2对偶问题184
10.3线性不可分的问题187
10.3.1原问题187
10.3.2对偶问题187
10.4核映射与核函数190
10.5SMO算法193
10.5.1求解子问题193
10.5.2优化变量的选择196
10.6多分类问题197
10.7实验程序198
10.8源代码分析200
10.8.1求解算法201
10.8.2主要数据结构204
10.8.3求解器211
10.9应用222
参考文献223
第11章线性模型225
11.1logistic回归225
11.2正则化logistic回归228
11.2.1对数似然函数228
11.2.2L2正则化原问题229
11.2.3L2正则化对偶问题232
11.2.4L1正则化原问题233
11.2.5实验程序234
11.3线性支持向量机236
11.3.1L2正则化L1loss SVC原问题236
11.3.2L2正则化L2loss SVC原问题237
11.3.3L2正则化SVC对偶问题237
11.3.4L1正则化L2loss SVC原问题238
11.3.5多类线性支持向量机238
11.3.6实验程序240
11.4源代码分析241
11.4.1求解的问题241
11.4.2主要数据结构241
11.4.3求解器249
11.5softmax回归262
11.6应用263
参考文献264
第12章随机森林266
12.1集成学习266
12.1.1随机抽样266
12.1.2Bagging算法267
12.2随机森林概述267
12.3训练算法267
12.4变量的重要性268
12.5实验程序269
12.6源代码分析271
12.6.1主要数据结构271
12.6.2训练算法273
12.6.3预测算法282
12.7应用282
参考文献283
第13章Boosting算法284
13.1AdaBoost算法简介284
13.2训练算法284
13.3训练误差分析286
13.4广义加法模型288
13.5各种AdaBoost算法290
13.5.1离散型AdaBoost290
13.5.2实数型AdaBoost292
13.5.3LogitBoost292
13.5.4Gentle型AdaBoost294
13.6实现细节问题294
13.6.1弱分类器的选择295
13.6.2弱分类器的数量295
13.6.3样本权重削减295
13.7实验程序295
13.8源代码分析297
13.8.1主要数据结构297
13.8.2弱分类器300
13.8.3强分类器306
13.9应用——目标检测318
13.9.1VJ框架的原理319
13.9.2模型训练321
参考文献322
第14章深度学习概论324
14.1机器学习面临的挑战324
14.1.1人工特征325
14.1.2机器学习算法326
14.2深度学习技术326
14.3进展与典型应用328
14.3.1计算机视觉329
14.3.2语音识别331
14.3.3自然语言处理331
14.3.4计算机图形学332
14.3.5推荐系统332
14.3.6深度强化学习333
14.4自动编码器333
14.4.1自动编码器简介333
14.4.2去噪自动编码器334
14.4.3稀疏自动编码器334
14.4.4收缩自动编码器335
14.4.5多层编码器335
14.5受限玻尔兹曼机335
14.5.1玻尔兹曼分布335
14.5.2受限玻尔兹曼机336
14.5.3训练算法338
14.5.4深度玻尔兹曼机339
14.5.5深度置信网339
参考文献339
第15章卷积神经网络347
15.1网络结构347
15.1.1卷积层348
15.1.2池化层351
15.1.3全连接层351
15.2训练算法352
15.2.1卷积层352
15.2.2池化层355
15.2.3随机梯度下降法356
15.2.4迁移学习357
15.3典型网络357
15.3.1LeNet5网络357
15.3.2AlexNet网络358
15.3.3VGG网络359
15.3.4GoogLeNet网络360
15.4理论分析361
15.4.1反卷积运算361
15.4.2卷积层可视化362
15.4.3理论解释364
15.5挑战与改进措施365
15.5.1卷积层365
15.5.2池化层365
15.5.3激活函数366
15.5.4损失函数366
15.5.5网络结构366
15.5.6批量归一化370
15.6实际例子371
15.6.1LeNet5网络371
15.6.2训练自己的模型373
15.7源代码分析374
15.7.1Caffe简介374
15.7.2数据层376
15.7.3卷积层376
15.7.4池化层378
15.7.5神经元层378
15.7.6内积层384
15.7.7损失层386
15.7.8网络的实现——Net类396
15.7.9求解器398
15.8应用——计算机视觉413
15.8.1人脸检测414
15.8.2通用目标检测416
15.8.3人脸关键点定位425
15.8.4人脸识别425
15.8.5图像分割428
15.8.6边缘检测429
15.8.7风格迁移432
15.8.8图像增强433
15.8.9三维视觉435
15.8.10目标跟踪436
15.9应用——计算机图形学437
15.9.1几何模型438
15.9.2物理模型439
15.9.3纹理合成440
15.9.4图像彩色化441
15.9.5HDR442
15.10应用——自然语言处理444
15.10.1文本分类444
15.10.2机器翻译444
参考文献444
第16章循环神经网络450
16.1网络结构450
16.1.1循环层450
16.1.2输出层451
16.1.3一个简单的例子452
16.1.4深层网络452
16.2网络的训练453
16.2.1一个简单的例子453
16.2.2完整的算法455
16.3挑战与改进措施457
16.3.1梯度消失457
16.3.2长短期记忆模型458
16.3.3门控循环单元459
16.3.4双向网络459
16.4序列预测问题460
16.4.1序列标注问题460
16.4.2连接主义时序分类461
16.4.3序列到序列学习465
16.5应用——语音识别467
16.5.1语音识别问题467
16.5.2隐马尔可夫模型468
16.5.3高斯混合模型474
16.5.4GMM-HMM框架475
16.5.5深度模型475
16.6应用——自然语言处理478
16.6.1中文分词479
16.6.2词性标注480
16.6.3命名实体识别480
16.6.4文本分类481
16.6.5自动摘要483
16.6.6机器翻译483
16.7应用——机器视觉485
16.7.1字符识别485
16.7.2目标跟踪486
16.7.3视频分析488
参考文献490
第17章生成对抗网络494
17.1随机数据生成494
17.2生成对抗网络简介495
17.2.1生成模型495
17.2.2判别模型496
17.3模型的训练496
17.3.1目标函数496
17.3.2训练算法497
17.3.3理论分析498
17.4应用与改进499
17.4.1改进方案500
17.4.2典型应用503
参考文献505
第18章聚类算法506
18.1问题定义506
18.2层次聚类507
18.3基于质心的算法507
18.4基于概率分布的算法508
18.5基于密度的算法512
18.5.1DBSCAN算法512
18.5.2OPTICS算法514
18.5.3Mean Shift算法516
18.6基于图的算法517
18.7算法评价指标518
18.7.1内部指标518
18.7.2外部指标518
18.8应用519
参考文献519
第19章半监督学习521
19.1问题假设521
19.1.1连续性假设521
19.1.2聚类假设521
19.1.3流形假设521
19.1.4低密度分割假设521
19.2启发式算法522
19.2.1自训练522
19.2.2协同训练522
19.3生成模型522
19.4低密度分割523
19.5基于图的算法523
19.6半监督深度学习524
参考文献525
第20章强化学习527
20.1强化学习简介527
20.1.1问题定义527
20.1.2马尔可夫决策过程528
20.2基于动态规划的算法532
20.2.1策略迭代算法532
20.2.2价值迭代算法534
20.3蒙特卡洛算法535
20.3.1算法简介535
20.3.2状态价值函数估计536
20.3.3动作价值函数估计537
20.3.4蒙特卡洛控制537
20.4时序差分学习538
20.4.1Sarsa算法538
20.4.2Q学习539
20.5深度强化学习540
20.5.1深度Q网络541
20.5.2策略梯度算法544
20.6应用547
参考文献547
第三部分工程实践问题
第21章工程实践问题概述551
21.1实现细节问题551
21.1.1训练样本551
21.1.2特征预处理552
21.1.3模型选择552
21.1.4过拟合问题552
21.2安全性问题553
21.2.1对抗样本553
21.2.2形成原因分析555
21.3实现成本问题556
21.3.1训练样本量556
21.3.2计算与存储成本556
21.4深度模型优化557
21.4.1剪枝与编码557
21.4.2二值化网络558
21.4.3卷积核分离562
参考文献563
附录A各种机器学习算法的总结565
附录B梯度下降法的演化关系(见第15章)569
附录C EM算法的推导(见第18章)570