
圖書簡介
實用性是本書的第一個基本出發點,書中介紹了近年來在工業界被廣泛應 用的機器學習算法,這些算法經受了時間的考驗,不但效果好而且使用友善。此 外作者也十分注意理論的深度和完整性,組織各章節的内容時力求由淺入深、推 理完整、先後連貫、自成體系,先講統計學、矩陣、優化方法這些基礎知識,再 由簡到繁地介紹線性模型、機率圖模型、文本向量化算法、樹模型和神經網絡, 神經網絡主要指的是各種深層網絡。跟絕大多數機器學習類的圖書不同,本書 還會介紹算法周邊的一些工程架構及實作原理,比如如何實時地收集訓練樣本 和監控算法名額、參數伺服器的架構設計、做 AB 測試的注意事項等等,了解 這些知識對算法工程師是大有裨益的。
本書充分照顧機器學習初學者的知識水準,理論體系完整、公式推導清晰, 大學畢業的理工科學生都能看懂。另外由于本書跟工業實踐結合得很緊密,所 以也非常适合于從事算法相關工作的工程師。
前言
我曾經在位元組跳動工作過一段時間,那是一家企業文化讓我感到很舒适的公司,我說的舒适指的是平等和開放,公司很有野心,員工也都十分優秀,每年校招總能吸引一大批優秀的畢業生前來面試。在面試算法崗的同學裡有很大一部分人面臨這樣的困境:他們很勤奮,也上過資料挖掘、機器學習的相關課程,但是對算法的思想、特點把握得不準,也看不到各個算法之間的通性和聯系,有些同學直接問我有什麼書可以推薦。我深深地感到對于那些有一定機器學習基礎而經驗尚不豐富的同學來說,一本從實際應用出發、深挖算法原理的圖書是多麼地重要。不久之後我就開始了本書的編寫,沒想到這一寫就是一年半的時間,在整理知識的過程中我也得到了進一步的提升,希望在今後的日子裡也能和讀者一起進步。
這本書更是寫給進入職場的算法工程師的,我确定這裡需要一個“更”字。直到今天我一直都是一線碼農,我寫的都是實際工作中效果好、見效快的算法,如果你是一名算法工程師,在讀本書的過程中相信會引起更多的共鳴。我剛參加工作那幾年買了不少機器學習方面的書,現在想想當初是多麼地焦慮,如果那時我擁有一本《實用算法寶典》會是多麼地開心。是以現在寫書時心裡一直有個美好的願望,希望我能寫出一本工業界的算法寶典,幫廣大讀者省去四處求索的時間。當然算法工程師還有另一個重要的學習途徑------看論文,論文是關于算法的第一手資料,裡面有原作者創作的心路曆程。但是看論文對讀者的知識技能要求比較高,因為寫論文的人一般都會對算法的優點大書特書,而對劣勢輕描淡寫,道行淺的人難以辨識其中的水份有多少。相比之下寫書的人會比較客觀,他會把不同的算法放在一起對比,而且被寫進書裡面的算法都經過了時間的考驗,是以讀書對于初級選手來說是一種更友好的學習方式。
在難易程度上,我對本書的定位是深入淺出。“深入淺出”這個詞已經被大家用濫了,看到這個詞讀者心目中想到的可能隻有“淺出”,預設忽略了“深入”。而我一直在提醒自己寫書一定要深入,不能為了簡單易懂而故意避諱冗長的公式推導,深入才是對讀者的負責。對于每一位想成為算法工程師的同學而言,你們都選擇了一條注定艱辛的道路,不要幻想着通過輕輕松松看完一本書就能夠領會各大主流算法的精髓。然而如果寫書隻顧着深入,那就成了作者一個人的自嗨,同樣是對讀者的不負責。為了幫助讀者加速了解、減少疑惑,我會盡量從實際應用出發,多舉一些工程實踐中的例子,詳細列出公式的推導過程,給出核心算法的代碼實作,道破不同算法的内在聯系。
目錄
第1章 概述 1
1.1 機器學習基本流程 .......................... 1
1.2 業界常用算法............................. 2
1.3 建構機器學習系統 .......................... 3
第2章 統計學 5
2.1 機率分布 ............................... 5
2.1.1 期望與方差 .......................... 5
2.1.2 機率密度函數......................... 8
2.1.3 累積分布函數......................... 10
2.2 極大似然估計與貝葉斯估計 ..................... 10
2.2.1 極大似然估計......................... 11
2.2.2 貝葉斯參數估計........................ 13
2.2.3 共轭先驗與平滑的關系.................... 14
2.3 置信區間 ............................... 15
2.3.1 t分布............................. 15
2.3.2 區間估計 ........................... 16
2.3.3 Wilson置信區間 ....................... 18
2.4 相關性................................. 19
2.4.1 數值變量的相關性 ...................... 19
2.4.2 分類變量的相關性 ...................... 21
2.4.3 順序變量的相關性 ...................... 26
2.4.4 分布之間的距離........................ 26
第3章 矩陣 29
3.1 矩陣的實體意義............................ 29
3.1.1 矩陣是什麼 .......................... 29
3.1.2 矩陣的行列式......................... 30
3.1.3 矩陣的逆 ........................... 30
3.1.4 特征值和特征向量 ...................... 31
3.2 矩陣的數值穩定性 .......................... 32
3.2.1 矩陣數值穩定性的度量.................... 32
3.2.2 基于列主元的gaussjordan消元法 ............. 32
3.2.3 嶺回歸............................. 36
3.3 矩陣分解 ............................... 37
3.3.1 特征值分解與奇異值分解 .................. 37
3.3.2 高維稀疏矩陣的特征值分解 ................. 39
3.3.3 基于矩陣分解的推薦算法 .................. 43
3.4 矩陣程式設計實踐............................. 44
3.4.1 numpy數組運算 ....................... 44
3.4.2 稀疏矩陣的壓縮方法..................... 48
3.4.3 用MapReduce實作矩陣乘法 ................ 50
第4章 優化方法 51
4.1 無限制優化方法............................ 51
4.1.1 梯度下降法 .......................... 51
4.1.2 拟牛頓法 ........................... 53
4.2 帶限制優化方法............................ 55
4.3 線上學習方法............................. 58
4.3.1 SGD.............................. 58 4.3.2
FTRL............................. 59
4.4 深度學習中的優化方法........................ 66
4.4.1 動量法............................. 66
4.4.2 AdaGrad ........................... 67
4.4.3 RMSprop ........................... 67
4.4.4 Adadelta ........................... 67
4.4.5 Adam ............................. 68
4.5 EM算法................................ 68
4.5.1 Jensen不等式 ........................ 69
4.5.2 EM算法 ........................... 69
4.5.3 高斯混合模型......................... 73
第5章 線性模型 75
5.1 廣義線性模型............................. 75
5.1.1 指數族分布 .......................... 75
5.1.2 廣義線性模型......................... 76
5.2 LR................................... 79
5.3 FM................................... 80
5.3.1 特征組合 ........................... 80
5.3.2 分解機制 ........................... 81
5.3.3 FM造新特征的思路 ..................... 83
5.4 FFM.................................. 84
5.5 算法實驗對比............................. 91
第6章 機率圖模型 93
6.1 隐馬爾可夫模型............................ 94
6.1.1 模型介紹 ........................... 94
6.1.2 模型訓練 ........................... 97
6.1.3 模型預測 ........................... 98
6.2 條件随機場 .............................. 99
6.2.1 CRF模型及特征函數 .................... 99
6.2.2 向前變量和向後變量.....................103
6.2.3 模型訓練 ...........................105
6.2.4 模型預測 ...........................107
6.2.5 CRF與HMM的對比....................107
第7章 文本向量化 109
7.1 詞向量.................................109
7.1.1 word2vec ...........................109
7.1.2 fastText............................113
7.1.3 GloVe.............................114
7.1.4 算法實驗對比.........................116
7.2 文檔向量 ...............................118
7.2.1 ParagraphVector.......................118
7.2.2 LDA..............................120
第8章 樹模型 125
8.1 決策樹.................................125
8.1.1 分類樹.............................125
8.1.2 回歸樹.............................129
8.1.3 剪枝..............................132
8.2 随機森林 ...............................133
8.3 AdaBoost ...............................134
8.4 XGBoost ...............................136
8.5 LightGBM...............................140
8.5.1 GOSS.............................141
8.5.2 互斥特征捆綁.........................141
8.5.3 Leaf-Wise生長政策 .....................142
8.5.4 DART.............................143
8.6 算法實驗對比.............................144
第9章 神經網絡 149
9.1 神經網絡概述.............................149
9.1.1 網絡模型 ...........................149
9.1.2 反向傳播 ...........................152
9.1.3 損失函數 ...........................153
9.1.4 過拟合問題 ..........................153
9.1.5 梯度消失 ...........................155
9.1.6 參數初始化 ..........................156
9.2 卷積神經網絡.............................157
9.2.1 卷積..............................157
9.2.2 池化..............................159
9.2.3 CNN網絡結構 ........................160
9.2.4 textCNN ...........................161
9.3 循環神經網絡.............................162
9.3.1 RNN通用架構........................162
9.3.2 RNN的學習問題.......................164
9.3.3 GRU..............................167
9.3.4 LSTM.............................168
9.3.5 seq2seq ............................171
9.4 注意力機制 ..............................173
第 10 章 Keras 程式設計 177
10.1快速上手 ...............................177
10.2 Keras 層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
10.2.1 Keras 内置層 . . . . . . . . . . . . . . . . . . . . . . . . . 179
10.2.2自定義層 ...........................186
10.3調試技巧 ...............................190
10.3.1檢視中間層的輸出 ......................190
10.3.2回調函數 ...........................191
10.4CNN和RNN的實作 ........................194
第 11 章 推薦系統實戰 201
11.1問題模組化 ...............................201
11.2資料預處理 ..............................204
11.2.1 歸一化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
11.2.2特征哈希 ...........................206
11.3模型探索 ...............................207
11.3.1 基于共現的模型 . . . . . . . . . . . . . . . . . . . . . . . . 207
11.3.2 圖模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
11.3.3 DeepFM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
11.3.4 DCN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
11.4推薦服務 ...............................219
11.4.1 RPC 簡介 . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
11.4.2 gRPC 的使用 . . . . . . . . . . . . . . . . . . . . . . . . . 220
11.4.3 服務發現與負載均衡 . . . . . . . . . . . . . . . . . . . . . 224
第 12 章 收集訓練資料 227
12.1日志的設計 ..............................227
12.2日志的傳輸 ..............................229
12.3日志的合并 ..............................236
12.4樣本的存儲 ..............................246
第 13 章 分布式訓練 249
13.1參數伺服器 ..............................249
13.2基于PS的優化算法 .........................255
13.3線上學習 ...............................257
第14章 A/B測試 259
14.1試驗分組 ...............................259
14.2名額監控 ...............................264
14.2.1 名額的計算 . . . . . . . . . . . . . . . . . . . . . . . . . . 264
14.2.2名額的上報與存儲 ......................265
14.2.3名額的展現與監控 ......................267
14.3 試驗結果分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270