內 容 簡 介
機器學習是當前解決很多人工智能問題的核心技術,深度學習的出現帶來了自2012年以來的人工智能復興。本書是機器學習和深度學習領域的入門與提高教材,系統、深入地講述機器學習與深度學習的主流方法與理論,并緊密結合工程實踐與應用。全書由21章組成,共分為三大部分。第1~3章為第一部分,介紹機器學習的基本原理、所需的數學知識(包括微積分、線性代數、概率論和*優化方法),以及機器學習中的核心概念。第4~20章為第二部分,是本書的主體,介紹各種常用的有監督學習算法、無監督學習算法、半監督學習算法和強化學習算法。對于每種算法,從原理與推導、工程實現和實際應用3個方面進行介紹,對于大多數算法,都配有實驗程序。第21章為第三部分,介紹機器學習和深度學習算法實際應用時面臨的問題,并給出典型的解決方案。此外,附錄A給出各種機器學習算法的總結,附錄B給出梯度下降法的演化關系,附錄C給出EM算法的推導。
本書理論推導與證明詳細、深入,結構清晰,詳細地講述主要算法的工程實現細節,配以著名開源庫的源代碼分析(包括libsvm、liblinear、OpenCV、Caffe等開源庫),讓讀者不僅知其然,還知其所以然,真正理解算法、學會使用算法。對于計算機、人工智能及相關專業的本科生和研究生,這是一本適合入門與系統學習的教材,對于從事人工智能和機器學習產品研發的工程技術人員,本書也具有很強的參考價值。
適讀人群 :計算機,人工智能等相關專業的本科生,研究生 從事人工智能研發的技術人員 對機器學習感興趣的愛好者 1. 內容全面深入。全書系統地講解機器學習算法與理論,主要算法的理論講解透徹、結構清晰,均有詳細的推導和證明過程。
2. 內容新。對于深度學習等重點算法,涵蓋和反映了截至2017年學術界與工業界的新成果,確保本書的內容能夠緊跟當前的學術和技術趨勢。
3. 理論與實踐相結合。對于所有重點算法,除深入講解算法的原理之外,還介紹了算法的工程實現細節,對各種算法的實際應用也進行了介紹。
4. 對機器學習所需的數學知識進行全面系統的介紹,確保讀者無須單獨再看其他數學教材也能順利學習。
自2012年以來,得益于深度學習技術的迅猛進步,人工智能無論是在學術界還是在產業界都迎來了蓬勃發展,各種新的技術與算法層出不窮,推動機器學習技術大規模走向應用。與之相對應的是優秀教材的缺乏,由于技術的快速進步,此前的經典書籍面臨內容老化的問題。本書的立意是幫助人工智能相關方向的在校學生與工程技術人員更好地理解和掌握這門技術,書的原型出自于筆者在zmodo公司的內部培訓講義,在同事們的鼓勵下,最終將其寫成這本書。
對于絕大多數從事學術研究與產品研發的讀者來說,理解算法的原理與掌握算法的實現及應用是同等重要的事情。計算機科學(尤其是人工智能)是偏實踐的學科,研究這些算法的最終目的是將其直接投入實際應用。因此,本書從理論與實踐兩個方面進行講解,讓讀者不僅能夠理解算法的原理,還能學會算法的實現與應用,做到理論與實踐的結合。
本書全面系統地講解目前主要的機器學習算法,包括有監督學習算法、無監督學習算法、半監督學習算法和強化學習算法4種類型,內容涵蓋當前主流的機器學習和深度學習算法。對于主要的算法,從理論講解、實驗程序、工程實現與源代碼分析、實際應用4部分進行講解。對于核心的推導和證明,筆者都詳細給出。
學習本書需要讀者具有數學(包括微積分、線性代數、概率論等本科數學知識)與編程(至少掌握一門編程語言)的基礎知識,部分算法和理論會用到離散數學、數據結構等課程的知識,但數量很少。因此,如果讀者沒有學過這兩門課,對于理解沒有大礙。
對于深度學習算法與理論,本書做了重點與深入的介紹。對于卷積神經網絡、循環神經網絡等應用最廣泛的方法,系統地介紹了它們的原理與實現,并分析了截至2017年的主要學術論文,包括基礎算法與應用,保證本書的內容能夠反映學術界與工程界的新成果。
本書提供一份非常精美的機器學習算法地圖,可從SIGAI公眾號或清華大學出版社(www.tup.com.cn)下載。
機器學習是范圍極廣、內容龐雜的一門學科,技術發展日新月異,由于筆者的水平與經驗有限,書中難免有錯誤與理解不到位的地方,敬請讀者指正!
雷明2018年10月
雷明 人工智能學習與實踐平臺SIGAI的創始人;2009年畢業于清華大學計算機系,獲碩士學位,研究方向為機器視覺與機器學習;畢業后曾就職于百度公司,任高級軟件工程師、項目經理。2012年加入zmodo(深圳市智美達科技股份有限公司),任CTO與平臺研發中心負責人;2018年2月創立SIGAI,其核心產品為云端實驗室與知識庫,為人工智能學習與實踐提供便捷的一站式服務;在機器學習與深度學習、機器視覺、自然語言處理方向有扎實的理論功底與豐富的學術和產品研發經驗,碩士期間曾發表論文數篇。
第一部分基本概念與數學知識
第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正則化L1-loss SVC原問題236
11.3.2L2正則化L2-loss SVC原問題237
11.3.3L2正則化SVC對偶問題237
11.3.4L1正則化L2-loss 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.1LeNet-5網絡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.1LeNet-5網絡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.4GMMHMM框架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
附錄CEM算法的推導(見第18章)570