深度學習是機器學習的重要分支。本書系統地介紹了如何用Python和NumPy實現的算法一步一步地實現深度學習的基礎模型,而無須借助TensorFlow、PyTorch等深度學習框架,從而能幫助讀者更好地理解底層算法的脈絡,進而進行模型的定制、優化和改進。全書內容設計可幫助讀者零起點通關神經網絡,由簡到難地講述感知機模型、多分類神經網絡、深層全連接網絡、卷積神經網絡、批量歸范化方法、序列模型、循環神經網絡、長短時記憶網絡、雙向結構的BiGRU模型、序列模型等神經網絡模型的算法推導、實現及其實例,可直接動手調試和觀察整個訓練過程,進一步理解模型及其算法原理。
徐彬 重慶大學計算機科學系學士、BI挪威商學院碩士。曾任中國工商銀行軟件工程師、平安銀行應用架構專家、銀行間市場清算所創新衍生品及利率產品項目群負責人。研究方向包括信貸及清算風險管控、復雜項目群管理,機器學習在特定場景的應用。
第 1章基礎分類模型 1
1.1深度學習簡介 ............................ 2
1.2目標問題:空間中的二分類 .................... 2
1.3感知機模型 ............................. 3
1.3.1感知機函數 ......................... 3
1.3.2損失函數 .......................... 4
1.3.3感知機學習算法 ....................... 6
1.4算法實現 .............................. 8
1.4.1環境搭建 .......................... 8
1.4.2數據準備 .......................... 9
1.4.3實現感知機算法 ....................... 11
1.5小結 ................................. 13參考文獻 ................................. 13
第 2章第一個神經網絡 14
2.1目標問題:MNIST手寫數字識別 ................. 15
2.1.1數據集 ............................ 15
2.1.2圖像數據和圖向量 ..................... 16
2.2挑戰:從二分類到多分類 ..................... 16
2.3 Softmax方法 ............................ 19
2.4正確分類的獨熱編碼 ........................ 20
2.5損失函數——交叉熵 ........................ 21
2.6信息熵和交叉熵 ........................... 21
2.6.1信息熵 ............................ 21
2.6.2交叉熵 ............................ 22
2.7第一個神經網絡的學習算法 .................... 23
2.8反向傳播 .............................. 26
2.9抽象泄漏 .............................. 27
2.10算法實現 .............................. 28
2.10.1數據準備 .......................... 28
2.10.2實現第一個神經網絡 .................... 33
2.10.3實現 MINIST手寫數字識別 ................ 36
2.11小結 ................................. 37參考文獻 ................................. 38
第 3章多層全連接神經網絡 39
3.1第一個挑戰:異或問題 ....................... 40
3.2更深的神經網絡——隱藏層 .................... 40
3.3第二個挑戰:參數擬合的兩面性 .................. 42
3.4過擬合與正則化 ........................... 44
3.4.1欠擬合與過擬合 ....................... 44
3.4.2正則化 ............................ 44
3.4.3正則化的效果 ........................ 44
3.5第三個挑戰:非線性可分問題 ................... 45
3.6激活函數 .............................. 45
3.7算法和結構 ............................. 47
3.8算法實現 .............................. 50
3.8.1數據準備 .......................... 50
3.8.2實現多層全連接神經網絡 ................. 50
3.8.3在數據集上驗證模型 .................... 53
3.9小結 ................................. 54參考文獻 ................................. 54
第 4章卷積神經網絡(CNN) 55
4.1挑戰:參數量和訓練成本 ..................... 56
4.2卷積神經網絡的結構 ........................ 56
4.2.1卷積層 ............................ 57
4.2.2池化層 ............................ 62
4.2.3全連接層和 Softmax處理 ................. 63
4.3卷積神經網絡學習算法 ....................... 63
4.3.1全連接層 .......................... 63
4.3.2池化層反向傳播 ....................... 64
4.3.3卷積層反向傳播 ....................... 65
4.4算法實現 .............................. 68
4.4.1數據準備 .......................... 68
4.4.2卷積神經網絡模型的原始實現 ............... 69
4.5小結 ................................. 76參考文獻 ................................. 78
第 5章卷積神經網絡——算法提速和優化 79
5.1第一個挑戰:卷積神經網絡的運算效率 .............. 80
5.2提速改進 .............................. 80
5.2.1邊緣填充提速 ........................ 82
5.2.2池化層提速 ......................... 83
5.2.3卷積層處理 ......................... 85
5.3反向傳播算法實現 ......................... 88
5.3.1池化層反向傳播 ....................... 88
5.3.2卷積層反向傳播 ....................... 89
5.4第二個挑戰:梯度下降的幅度和方向 ............... 91
5.5遞減學習率參數 ........................... 92
5.6學習策略的優化方法 ........................ 92
5.6.1動量方法 .......................... 93
5.6.2 NAG方法 .......................... 93
5.6.3 Adagrad方法 ........................ 94
5.6.4 RMSprop方法 ....................... 95
5.6.5 AdaDelta方法 ....................... 96
5.6.6 Adam方法 ......................... 97
5.6.7各種優化方法的比較 .................... 98
目錄
5.7總體模型結構 ............................ 100
5.8使用 CNN實現 MNIST手寫數字識別驗證 ........... 101
5.9小結 ................................. 102參考文獻 ................................. 103
第 6章批量規范化(Batch Normalization) 104
6.1挑戰:深度神經網絡不易訓練 ................... 105
6.2批量規范化方法的初衷 ....................... 105
6.2.1數據集偏移 ......................... 106
6.2.2輸入分布偏移 ........................ 106
6.2.3內部偏移 .......................... 107
6.3批量規范化的算法 ......................... 107
6.3.1訓練時的前向計算 ..................... 107
6.3.2規范化與標準化變量 .................... 108
6.3.3推理預測時的前向計算 ................... 109
6.3.4全連接層和卷積層的批量規范化處理 ........... 110
6.4批量規范化的效果 ......................... 111
6.4.1梯度傳遞問題 ........................ 111
6.4.2飽和非線性激活問題 .................... 112
6.4.3正則化效果 ......................... 113
6.5批量規范化為何有效 ........................ 113
6.6批量規范化的反向傳播算法 .................... 114
6.7算法實現 .............................. 115
6.7.1訓練時的前向傳播 ..................... 116
6.7.2反向傳播 .......................... 117
6.7.3推理預測 .......................... 118
6.8調整學習率和總體結構 ....................... 119
6.8.1模型結構 .......................... 119
6.8.2卷積層批量規范化的實現 ................. 120
6.8.3引入批量規范化后的遞減學習率 .............. 121
6.9在 MNIST數據集上驗證結果 ................... 122
6.10小結 ................................. 123
參考文獻 ................................. 123
第 7章循環神經網絡(Vanilla RNN) 125
7.1第一個挑戰:序列特征的捕捉 ................... 126
7.2循環神經網絡的結構 ........................ 126
7.2.1單層 RNN.......................... 126
7.2.2雙向 RNN.......................... 128
7.2.3多層 RNN.......................... 129
7.3 RNN前向傳播算法 ......................... 130
7.4 RNN反向傳播算法 ......................... 131
7.4.1誤差的反向傳播 ....................... 131
7.4.2激活函數的導函數和參數梯度 ............... 132
7.5第二個挑戰:循環神經網絡的梯度傳遞問題 ........... 133
7.6梯度裁剪 .............................. 134
7.7算法實現 .............................. 135
7.8目標問題:序列數據分析 ..................... 139
7.8.1數據準備 .......................... 139
7.8.2模型搭建 .......................... 144
7.8.3驗證結果 .......................... 145
7.9小結 ................................. 147參考文獻 ................................. 147
第 8章長短時記憶網絡(LSTM)——指數分析 149
8.1目標問題:投資市場的指數分析 .................. 150
8.2挑戰:梯度彌散問題 ........................ 150
8.3長短時記憶網絡的結構 ....................... 150
8.4 LSTM前向傳播算法 ........................ 152
8.5 LSTM反向傳播算法 ........................ 153
8.5.1誤差反向傳播 ........................ 154
8.5.2激活函數的導函數和參數梯度 ............... 155
8.6算法實現 .............................. 156
8.6.1實現 LSTM單時間步的前向計算 ............. 156
8.6.2實現 LSTM多層多時間步的前向計算 .......... 157
8.6.3實現 LSTM單時間步的反向傳播 ............. 159
8.6.4實現 LSTM多層多時間步的反向傳播 .......... 160
8.7實現滬深 300指數分析 ....................... 161
8.7.1數據準備 .......................... 162
8.7.2模型構建 .......................... 166
8.7.3分析結果 .......................... 167
8.8小結 ................................. 168參考文獻 ................................. 169
第 9章雙向門控循環單元(BiGRU)——情感分析 170
9.1目標問題:情感分析 ........................ 171
9.2第一個挑戰:模型的運算效率 ................... 172
9.3 GRU模型的結構 .......................... 172
9.4 GRU前向傳播算法 ......................... 173
9.5 GRU前向傳播表達式的其他寫法 ................. 174
9.6 GRU反向傳播算法 ......................... 175
9.7 GRU算法實現 ........................... 177
9.7.1單時間步的前向計算 .................... 177
9.7.2實現單時間步的反向傳播 ................. 178
9.8用 GRU模型進行情感分析 .................... 179
9.8.1數據預處理 ......................... 180
9.8.2構建情感分析模型 ..................... 181
9.9首次驗證 .............................. 182
9.10第二個挑戰:序列模型的過擬合 .................. 183
9.11 Dropout正則化 ........................... 183
9.11.1 Dropout前向傳播算法 ................... 183
9.11.2 Dropout反向傳播算法 ................... 184
9.11.3 Dropout Rate的選擇 ................... 185
9.12再次驗證:GRU+Dropout..................... 186
9.13第三個挑戰:捕捉逆序信息 .................... 187
9.14雙向門控循環單元(BiGRU) ................... 187
9.15第三次驗證:BiGRU+Dropout .................. 188
9.16小結 ................................. 189
參考文獻 ................................. 189
附錄 A向量和矩陣運算 191
附錄 B導數和微分 194
附錄 C向量和矩陣導數 195
附錄 D概率論和數理統計 201
索引 205