為什麼要寫本書?
本書的前身為《機器學習與應用》,雷明著,清華大學出版社。在第一版的基礎上做了大幅度最佳化,並經過反覆校對,最終形成此書。由於之前是第一次寫書,缺乏經驗,導致了書的內容過多,裡面存在大量開源庫程式碼佔據篇幅。這一版改進了這些問題,且增加了不少新的內容,更為系統和全面,品質也得到了不小的提升。
作為公眾號文章的早期的主要作者,我之前寫了大量閱讀量深受大家喜愛的文章,如:
其他的不再一一列舉。這些文章有一個共同的特點:脈絡清晰,深入淺出,一針見血。它們將一些複雜的理論和演算法用很淺顯易懂的方式表達出來。這是我寫作的初衷,讀者真正需要的是能看懂,而不是看不懂!
由於時間倉促,且不是正規的出版物,這些文章的質量無法得到完全的保證。為了讓內容更為系統,準確,幫助大家學好機器學習與深度學習,我一直有寫一本機器學習教材的想法。但是,市面上已經有不少這方面的經典教材,國外的如《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。系統的闡述了具體應用。對主要演算法在機器視覺,語音識別,自然語言處理等領域的應用有詳細的闡述,幫助讀者理解演算法的使用,養成實際建模的能力。
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正則化L1loss SVC原問題156
11。2。2L2正則化L2loss SVC原問題156
11。2。3L2正則化SVC對偶問題157
11。2。4L1正則化L2loss 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。1LeNet5網路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
由於水平有限,時間倉促,書中難免會有錯誤。本書的勘誤可以在:
免費獲取
文中所提及的深受人民群眾喜愛的機器學習演算法地圖和深度學習演算法地圖可以在:
免費獲取
致謝
本書在寫作和最佳化過程中收到了大量讀者和同事、同行的反饋。這本書的誕生凝聚了清華大學出版社白立軍老師的大量心血,得到了出版社領導和老師的大力支援。數位熱心讀者為本書審稿。上海交通大學計算機系嚴駿馳教授為本書作序,哈佛大學數學中心教授、丘成桐先生的弟子顧險峰教授,前優酷首席科學家李卓桓師兄,筆者的好友劉彬先生,師弟歐陽鵬博士,張振博士為本書寫推薦。
在此一併表示感謝!