本書旨在向讀者交付有關深度學習的交互式學習體驗。書中不僅闡述深度學習的算法原理,還演示它們的實現(xiàn)和運行。與傳統(tǒng)圖書不同,本書的每一節(jié)都是一個可以下載并運行的 Jupyter記事本,它將文字、公式、圖像、代碼和運行結果結合在了一起。此外,讀者還可以訪問并參與書中內容的討論。
全書的內容分為3個部分:第一部分介紹深度學習的背景,提供預備知識,并包括深度學習基礎的概念和技術;第二部分描述深度學習計算的重要組成部分,還解釋近年來令深度學習在多個領域大獲成功的卷積神經(jīng)網(wǎng)絡和循環(huán)神經(jīng)網(wǎng)絡;第三部分評價優(yōu)化算法,檢驗影響深度學習計算性能的重要因素,并分別列舉深度學習在計算機視覺和自然語言處理中的重要應用。
本書同時覆蓋深度學習的方法和實踐,主要面向在校大學生、技術人員和研究人員。閱讀本書需要讀者了解基本的Python編程或附錄中描述的線性代數(shù)、微分和概率基礎。
對本書的贊譽
前言
如何使用本書
資源與支持
主要符號表
第1章深度學習簡介1
1.1起源2
1.2發(fā)展4
1.3成功案例6
1.4特點7
小結8
練習8
第2章預備知識9
2.1獲取和運行本書的代碼9
2.1.1獲取代碼并安裝運行環(huán)境9
2.1.2更新代碼和運行環(huán)境11
2.1.3使用GPU版的MXNet11
小結12
練習12
2.2數(shù)據(jù)操作12
2.2.1創(chuàng)建NDArray12
2.2.2運算14
2.2.3廣播機制16
2.2.4索引17
2.2.5運算的內存開銷17
2.2.6NDArray和NumPy相互變換18
小結19
練習19
2.3自動求梯度19
2.3.1簡單例子19
2.3.2訓練模式和預測模式20
2.3.3對Python控制流求梯度20
小結21
練習21
2.4查閱文檔21
2.4.1查找模塊里的所有函數(shù)和類21
2.4.2查找特定函數(shù)和類的使用22
2.4.3在MXNet網(wǎng)站上查閱23
小結24
練習24
第3章深度學習基礎25
3.1線性回歸25
3.1.1線性回歸的基本要素25
3.1.2線性回歸的表示方法28
小結30
練習30
3.2線性回歸的從零開始實現(xiàn)30
3.2.1生成數(shù)據(jù)集30
3.2.2讀取數(shù)據(jù)集32
3.2.3初始化模型參數(shù)32
3.2.4定義模型33
3.2.5定義損失函數(shù)33
3.2.6定義優(yōu)化算法33
3.2.7訓練模型33
小結34
練習34
3.3線性回歸的簡潔實現(xiàn)35
3.3.1生成數(shù)據(jù)集35
3.3.2讀取數(shù)據(jù)集35
3.3.3定義模型36
3.3.4初始化模型參數(shù)36
3.3.5定義損失函數(shù)37
3.3.6定義優(yōu)化算法37
3.3.7訓練模型37
小結38
練習38
3.4softmax回歸38
3.4.1分類問題38
3.4.2softmax回歸模型39
3.4.3單樣本分類的矢量計算表達式40
3.4.4小批量樣本分類的矢量計算表達式40
3.4.5交叉熵損失函數(shù)41
3.4.6模型預測及評價42
小結42
練習42
3.5圖像分類數(shù)據(jù)集(Fashion-MNIST)42
3.5.1獲取數(shù)據(jù)集42
3.5.2讀取小批量44
小結45
練習45
3.6softmax回歸的從零開始實現(xiàn)45
3.6.1讀取數(shù)據(jù)集45
3.6.2初始化模型參數(shù)45
3.6.3實現(xiàn)softmax運算46
3.6.4定義模型46
3.6.5定義損失函數(shù)47
3.6.6計算分類準確率47
3.6.7訓練模型48
3.6.8預測48
小結49
練習49
3.7softmax回歸的簡潔實現(xiàn)49
3.7.1讀取數(shù)據(jù)集49
3.7.2定義和初始化模型50
3.7.3softmax和交叉熵損失函數(shù)50
3.7.4定義優(yōu)化算法50
3.7.5訓練模型50
小結50
練習50
3.8多層感知機51
3.8.1隱藏層51
3.8.2激活函數(shù)52
3.8.3多層感知機55
小結55
練習55
3.9多層感知機的從零開始實現(xiàn)56
3.9.1讀取數(shù)據(jù)集56
3.9.2定義模型參數(shù)56
3.9.3定義激活函數(shù)56
3.9.4定義模型56
3.9.5定義損失函數(shù)57
3.9.6訓練模型57
小結57
練習57
3.10多層感知機的簡潔實現(xiàn)57
3.10.1定義模型58
3.10.2訓練模型58
小結58
練習58
3.11模型選擇、欠擬合和過擬合58
3.11.1訓練誤差和泛化誤差59
3.11.2模型選擇59
3.11.3欠擬合和過擬合60
3.11.4多項式函數(shù)擬合實驗61
小結65
練習65
3.12權重衰減65
3.12.1方法65
3.12.2高維線性回歸實驗66
3.12.3從零開始實現(xiàn)66
3.12.4簡潔實現(xiàn)68
小結70
練習70
3.13丟棄法70
3.13.1方法70
3.13.2從零開始實現(xiàn)71
3.13.3簡潔實現(xiàn)73
小結74
練習74
3.14正向傳播、反向傳播和計算圖74
3.14.1正向傳播74
3.14.2正向傳播的計算圖75
3.14.3反向傳播75
3.14.4訓練深度學習模型76
小結77
練習77
3.15數(shù)值穩(wěn)定性和模型初始化77
3.15.1衰減和爆炸77
3.15.2隨機初始化模型參數(shù)78
小結78
練習79
3.16實戰(zhàn)Kaggle比賽:房價預測79
3.16.1Kaggle比賽79
3.16.2讀取數(shù)據(jù)集80
3.16.3預處理數(shù)據(jù)集81
3.16.4訓練模型82
3.16.5k折交叉驗證82
3.16.6模型選擇83
3.16.7預測并在Kaggle提交結果84
小結85
練習85
第4章深度學習計算86
4.1模型構造86
4.1.1繼承Block類來構造模型86
4.1.2Sequential類繼承自Block類87
4.1.3構造復雜的模型88
小結89
練習90
4.2模型參數(shù)的訪問、初始化和共享90
4.2.1訪問模型參數(shù)90
4.2.2初始化模型參數(shù)92
4.2.3自定義初始化方法93
4.2.4共享模型參數(shù)94
小結94
練習94
4.3模型參數(shù)的延后初始化95
4.3.1延后初始化95
4.3.2避免延后初始化96
小結96
練習97
4.4自定義層97
4.4.1不含模型參數(shù)的自定義層97
4.4.2含模型參數(shù)的自定義層98
小結99
練習99
4.5讀取和存儲99
4.5.1讀寫NDArray99
4.5.2讀寫Gluon模型的參數(shù)100
小結101
練習101
4.6GPU計算101
4.6.1計算設備102
4.6.2NDArray的GPU計算102
4.6.3Gluon的GPU計算104
小結105
練習105
第5章卷積神經(jīng)網(wǎng)絡106
5.1二維卷積層106
5.1.1二維互相關運算106
5.1.2二維卷積層107
5.1.3圖像中物體邊緣檢測108
5.1.4通過數(shù)據(jù)學習核數(shù)組109
5.1.5互相關運算和卷積運算109
5.1.6特征圖和感受野110
小結110
練習110
5.2填充和步幅111
5.2.1填充111
5.2.2步幅112
小結113
練習113
5.3多輸入通道和多輸出通道114
5.3.1多輸入通道114
5.3.2多輸出通道115
5.3.31x1卷積層116
小結117
練習117
5.4池化層117
5.4.1二維最大池化層和平均池化層117
5.4.2填充和步幅119
5.4.3多通道120
小結120
練習121
5.5卷積神經(jīng)網(wǎng)絡(LeNet)121
5.5.1LeNet模型121
5.5.2訓練模型122
小結124
練習124
5.6深度卷積神經(jīng)網(wǎng)絡(AlexNet)124
5.6.1學習特征表示125
5.6.2AlexNet126
5.6.3讀取數(shù)據(jù)集127
5.6.4訓練模型128
小結128
練習129
5.7使用重復元素的網(wǎng)絡(VGG)129
5.7.1VGG塊129
5.7.2VGG網(wǎng)絡129
5.7.3訓練模型130
小結131
練習131
5.8網(wǎng)絡中的網(wǎng)絡(NiN)131
5.8.1NiN塊131
5.8.2NiN模型132
5.8.3訓練模型133
小結134
練習134
5.9含并行連結的網(wǎng)絡(GoogLeNet)134
5.9.1Inception塊134
5.9.2GoogLeNet模型135
5.9.3訓練模型137
小結137
練習137
5.10批量歸一化138
5.10.1批量歸一化層138
5.10.2從零開始實現(xiàn)139
5.10.3使用批量歸一化層的LeNet140
5.10.4簡潔實現(xiàn)141
小結142
練習142
5.11殘差網(wǎng)絡(ResNet)143
5.11.1殘差塊143
5.11.2ResNet模型145
5.11.3訓練模型146
小結146
練習146
5.12稠密連接網(wǎng)絡(DenseNet)147
5.12.1稠密塊147
5.12.2過渡層148
5.12.3DenseNet模型148
5.12.4訓練模型149
小結149
練習149
第6章循環(huán)神經(jīng)網(wǎng)絡150
6.1語言模型150
6.1.1語言模型的計算151
6.1.2n元語法151
小結152
練習152
6.2循環(huán)神經(jīng)網(wǎng)絡152
6.2.1不含隱藏狀態(tài)的神經(jīng)網(wǎng)絡152
6.2.2含隱藏狀態(tài)的循環(huán)神經(jīng)網(wǎng)絡152
6.2.3應用:基于字符級循環(huán)神經(jīng)網(wǎng)絡的語言模型154
小結155
練習155
6.3語言模型數(shù)據(jù)集(歌詞)155
6.3.1讀取數(shù)據(jù)集155
6.3.2建立字符索引156
6.3.3時序數(shù)據(jù)的采樣156
小結158
練習159
6.4循環(huán)神經(jīng)網(wǎng)絡的從零開始實現(xiàn)159
6.4.1one-hot向量159
6.4.2初始化模型參數(shù)160
6.4.3定義模型160
6.4.4定義預測函數(shù)161
6.4.5裁剪梯度161
6.4.6困惑度162
6.4.7定義模型訓練函數(shù)162
6.4.8訓練模型并創(chuàng)作歌詞163
小結164
練習164
6.5循環(huán)神經(jīng)網(wǎng)絡的簡潔實現(xiàn)165
6.5.1定義模型165
6.5.2訓練模型166
小結168
練習168
6.6通過時間反向傳播168
6.6.1定義模型168
6.6.2模型計算圖169
6.6.3方法169
小結170
練習170
6.7門控循環(huán)單元(GRU)170
6.7.1門控循環(huán)單元171
6.7.2讀取數(shù)據(jù)集173
6.7.3從零開始實現(xiàn)173
6.7.4簡潔實現(xiàn)175
小結176
練習176
6.8長短期記憶(LSTM)176
6.8.1長短期記憶176
6.8.2讀取數(shù)據(jù)集179
6.8.3從零開始實現(xiàn)179
6.8.4簡潔實現(xiàn)181
小結181
練習182
6.9深度循環(huán)神經(jīng)網(wǎng)絡182
小結183
練習183
6.10雙向循環(huán)神經(jīng)網(wǎng)絡183
小結184
練習184
第7章優(yōu)化算法185
7.1優(yōu)化與深度學習185
7.1.1優(yōu)化與深度學習的關系185
7.1.2優(yōu)化在深度學習中的挑戰(zhàn)186
小結188
練習189
7.2梯度下降和隨機梯度下降189
7.2.1一維梯度下降189
7.2.2學習率190
7.2.3多維梯度下降191
7.2.4隨機梯度下降193
小結194
練習194
7.3小批量隨機梯度下降194
7.3.1讀取數(shù)據(jù)集195
7.3.2從零開始實現(xiàn)196
7.3.3簡潔實現(xiàn)198
小結199
練習199
7.4動量法200
7.4.1梯度下降的問題200
7.4.2動量法201
7.4.3從零開始實現(xiàn)203
7.4.4簡潔實現(xiàn)205
小結205
練習205
7.5AdaGrad算法206
7.5.1算法206
7.5.2特點206
7.5.3從零開始實現(xiàn)208
7.5.4簡潔實現(xiàn)209
小結209
練習209
7.6RMSProp算法209
7.6.1算法210
7.6.2從零開始實現(xiàn)211
7.6.3簡潔實現(xiàn)212
小結212
練習212
7.7AdaDelta算法212
7.7.1算法212
7.7.2從零開始實現(xiàn)213
7.7.3簡潔實現(xiàn)214
小結214
練習214
7.8Adam算法215
7.8.1算法215
7.8.2從零開始實現(xiàn)216
7.8.3簡潔實現(xiàn)216
小結217
練習217
第8章計算性能218
8.1命令式和符號式混合編程218
8.1.1混合式編程取兩者之長220
8.1.2使用HybridSequential類構造模型220
8.1.3使用HybridBlock類構造模型222
小結224
練習224
8.2異步計算224
8.2.1MXNet中的異步計算224
8.2.2用同步函數(shù)讓前端等待計算結果226
8.2.3使用異步計算提升計算性能226
8.2.4異步計算對內存的影響227
小結229
練習229
8.3自動并行計算229
8.3.1CPU和GPU的并行計算230
8.3.2計算和通信的并行計算231
小結231
練習231
8.4多GPU計算232
8.4.1數(shù)據(jù)并行232
8.4.2定義模型233
8.4.3多GPU之間同步數(shù)據(jù)234
8.4.4單個小批量上的多GPU訓練236
8.4.5定義訓練函數(shù)236
8.4.6多GPU訓練實驗237
小結237
練習237
8.5多GPU計算的簡潔實現(xiàn)237
8.5.1多GPU上初始化模型參數(shù)238
8.5.2多GPU訓練模型239
小結241
練習241
第9章計算機視覺242
9.1圖像增廣242
9.1.1常用的圖像增廣方法243
9.1.2使用圖像增廣訓練模型246
小結250
練習250
9.2微調250
熱狗識別251
小結255
練習255
9.3目標檢測和邊界框255
邊界框256
小結257
練習257
9.4錨框257
9.4.1生成多個錨框257
9.4.2交并比259
9.4.3標注訓練集的錨框260
9.4.4輸出預測邊界框263
小結265
練習265
9.5多尺度目標檢測265
小結268
練習268
9.6目標檢測數(shù)據(jù)集(皮卡丘)268
9.6.1獲取數(shù)據(jù)集269
9.6.2讀取數(shù)據(jù)集269
9.6.3圖示數(shù)據(jù)270
小結270
練習271
9.7單發(fā)多框檢測(SSD)271
9.7.1定義模型271
9.7.2訓練模型275
9.7.3預測目標277
小結278
練習278
9.8區(qū)域卷積神經(jīng)網(wǎng)絡(R-CNN)系列280
9.8.1R-CNN280
9.8.2Fast R-CNN281
9.8.3Faster R-CNN283
9.8.4Mask R-CNN284
小結285
練習285
9.9語義分割和數(shù)據(jù)集285
9.9.1圖像分割和實例分割285
9.9.2Pascal VOC2012語義分割數(shù)據(jù)集286
小結290
練習290
9.10全卷積網(wǎng)絡(FCN)290
9.10.1轉置卷積層291
9.10.2構造模型 292
9.10.3初始化轉置卷積層294
9.10.4讀取數(shù)據(jù)集295
9.10.5訓練模型296
9.10.6預測像素類別296
小結297
練習297
9.11樣式遷移298
9.11.1方法 298
9.11.2讀取內容圖像和樣式圖像 299
9.11.3預處理和后處理圖像 300
9.11.4抽取特征 301
9.11.5定義損失函數(shù) 302
9.11.6創(chuàng)建和初始化合成圖像 303
9.11.7訓練模型 304
小結306
練習306
9.12實戰(zhàn)Kaggle比賽:圖像分類(CIFAR-10)306
9.12.1獲取和整理數(shù)據(jù)集 307
9.12.2圖像增廣 310
9.12.3讀取數(shù)據(jù)集 310
9.12.4定義模型 311
9.12.5定義訓練函數(shù) 312
9.12.6訓練模型 312
9.12.7對測試集分類并在Kaggle
提交結果313
小結313
練習313
9.13實戰(zhàn)Kaggle比賽:狗的品種識別(ImageNetDogs)314
小結320
練習320
第10章自然語言處理321
10.1詞嵌入(word2vec)321
小結325
練習325
10.2近似訓練325
小結327
練習328
10.3word2vec的實現(xiàn)328
小結336
練習336
10.4子詞嵌入(fastText)336
小結337
練習337
10.5全局向量的詞嵌入(GloVe)337
小結340
練習340
10.6求近義詞和類比詞340
小結343
練習343
10.7文本情感分類:使用循環(huán)神經(jīng)網(wǎng)絡343
小結347
練習347
10.8文本情感分類:使用卷積神經(jīng)網(wǎng)絡(textCNN)347
小結353
練習353
10.9編碼器-解碼器(seq2seq)353
小結355
練習355
10.10束搜索355
小結358
練習358
10.11注意力機制358
小結361
練習361
10.12機器翻譯361
小結369
練習369
附錄A數(shù)學基礎370
附錄B使用Jupyter記事本376
附錄C使用AWS運行代碼381
附錄DGPU購買指南388
附錄E如何為本書做貢獻391
附錄Fd2lzh包索引395
附錄G中英文術語對照表397
參考文獻402
索引407