內容簡介 本書是深度學習真正意義上的入門書,深入淺出地剖析了深度學習的原理和相關技術。書中使用Python3,儘量不依賴外部庫或工具,從基本的數學知識出發,帶領讀者從零創建一個經典的深度學習網路,使讀者在此過程中逐步理解深度學習。書中不僅介紹了深度學習和神經網路的概念、特征等基礎知識,對誤差反向傳播 ...
內容簡介
本書是深度學習真正意義上的入門書,深入淺出地剖析了深度學習的原理和相關技術。書中使用Python3,儘量不依賴外部庫或工具,從基本的數學知識出發,帶領讀者從零創建一個經典的深度學習網路,使讀者在此過程中逐步理解深度學習。書中不僅介紹了深度學習和神經網路的概念、特征等基礎知識,對誤差反向傳播法、捲積神經網路等也有深入講解,此外還介紹了深度學習相關的實用技巧,自動駕駛、圖像生成、強化學習等方面的應用,以及為什麼加深層可以提高識別精度等“為什麼”的問題。
目錄
譯者序 xiii前言 xv
第1章 Python入門 1
1.1 Python是什麼 1
1.2 Python的安裝 2
1.2.1 Python版本 2
1.2.2 使用的外部庫 2
1.2.3 Anaconda發行版 3
1.3 Python解釋器 4
1.3.1 算術計算 4
1.3.2 數據類型 5
1.3.3 變數 5
1.3.4 列表 6
1.3.5 字典 7
1.3.6 布爾型 7
1.3.7 if 語句 8
1.3.8 for 語句 8
1.3.9 函數 9
1.4 Python腳本文件 9
1.4.1 保存為文件 9
1.4.2 類 10
1.5 NumPy 11
1.5.1 導入NumPy 11
1.5.2 生成NumPy數組 12
1.5.3 NumPy 的算術運算 12
1.5.4 NumPy的N維數組 13
1.5.5 廣播 14
1.5.6 訪問元素 15
1.6 Matplotlib 16
1.6.1 繪製簡單圖形 16
1.6.2 pyplot 的功能 17
1.6.3 顯示圖像 18
1.7 小結 19
第2章 感知機 21
2.1 感知機是什麼 21
2.2 簡單邏輯電路 23
2.2.1 與門 23
2.2.2 與非門和或門 23
2.3 感知機的實現 25
2.3.1 簡單的實現 25
2.3.2 導入權重和偏置 26
2.3.3 使用權重和偏置的實現 26
2.4 感知機的局限性 28
2.4.1 異或門 28
2.4.2 線性和非線性 30
2.5 多層感知機 31
2.5.1 已有門電路的組合 31
2.5.2 異或門的實現 33
2.6 從與非門到電腦 35
2.7 小結 36
第3章 神經網路 37
3.1 從感知機到神經網路 37
3.1.1 神經網路的例子 37
3.1.2 複習感知機 38
3.1.3 激活函數登場 40
3.2 激活函數 42
3.2.1 sigmoid 函數 42
3.2.2 階躍函數的實現 43
3.2.3 階躍函數的圖形 44
3.2.4 sigmoid 函數的實現 45
3.2.5 sigmoid 函數和階躍函數的比較 46
3.2.6 非線性函數 48
3.2.7 ReLU函數 49
3.3 多維數組的運算 50
3.3.1 多維數組 50
3.3.2 矩陣乘法 51
3.3.3 神經網路的內積 55
3.4 3 層神經網路的實現 56
3.4.1 符號確認 57
3.4.2 各層間信號傳遞的實現 58
3.4.3 代碼實現小結 62
3.5 輸出層的設計 63
3.5.1 恆等函數和softmax 函數 64
3.5.2 實現softmax 函數時的註意事項 66
3.5.3 softmax 函數的特征 67
3.5.4 輸出層的神經元數量 68
3.6 手寫數字識別 69
3.6.1 MNIST數據集 70
3.6.2 神經網路的推理處理 73
3.6.3 批處理 75
3.7 小結 79
第4章 神經網路的學習 81
4.1 從數據中學習 81
4.1.1 數據驅動 82
4.1.2 訓練數據和測試數據 84
4.2 損失函數 85
4.2.1 均方誤差 85
4.2.2 交叉熵誤差 87
4.2.3 mini-batch 學習 88
4.2.4 mini-batch 版交叉熵誤差的實現 91
4.2.5 為何要設定損失函數 92
4.3 數值微分 94
4.3.1 導數 94
4.3.2 數值微分的例子 96
4.3.3 偏導數 98
4.4 梯度 100
4.4.1 梯度法 102
4.4.2 神經網路的梯度 106
4.5 學習演算法的實現 109
4.5.1 2 層神經網路的類 110
4.5.2 mini-batch 的實現 114
4.5.3 基於測試數據的評價 116
4.6 小結 118
第5章 誤差反向傳播法 121
5.1 計算圖 121
5.1.1 用計算圖求解 122
5.1.2 局部計算 124
5.1.3 為何用計算圖解題 125
5.2 鏈式法則 126
5.2.1 計算圖的反向傳播 127
5.2.2 什麼是鏈式法則 127
5.2.3 鏈式法則和計算圖 129
5.3 反向傳播 130
5.3.1 加法節點的反向傳播 130
5.3.2 乘法節點的反向傳播 132
5.3.3 蘋果的例子 133
5.4 簡單層的實現 135
5.4.1 乘法層的實現 135
5.4.2 加法層的實現 137
5.5 激活函數層的實現 139
5.5.1 ReLU層 139
5.5.2 Sigmoid 層 141
5.6 AffineSoftmax層的實現 144
5.6.1 Affine層 144
5.6.2 批版本的Affine層 148
5.6.3 Softmax-with-Loss 層 150
5.7 誤差反向傳播法的實現 154
5.7.1 神經網路學習的全貌圖 154
5.7.2 對應誤差反向傳播法的神經網路的實現 155
5.7.3 誤差反向傳播法的梯度確認 158
5.7.4 使用誤差反向傳播法的學習 159
5.8 小結 161
第6章 與學習相關的技巧 163
6.1 參數的更新 163
6.1.1 探險家的故事 164
6.1.2 SGD 164
6.1.3 SGD的缺點 166
6.1.4 Momentum 168
6.1.5 AdaGrad 170
6.1.6 Adam 172
6.1.7 使用哪種更新方法呢 174
6.1.8 基於MNIST數據集的更新方法的比較 175
6.2 權重的初始值 176
6.2.1 可以將權重初始值設為0 嗎 176
6.2.2 隱藏層的激活值的分佈 177
6.2.3 ReLU的權重初始值 181
6.2.4 基於MNIST數據集的權重初始值的比較 183
6.3 Batch Normalization 184
6.3.1 Batch Normalization 的演算法 184
6.3.2 Batch Normalization 的評估 186
6.4 正則化 188
6.4.1 過擬合 189
6.4.2 權值衰減 191
6.4.3 Dropout 192
6.5 超參數的驗證 195
6.5.1 驗證數據 195
6.5.2 超參數的最優化 196
6.5.3 超參數最優化的實現 198
6.6 小結 200
第7章 捲積神經網路 201
7.1 整體結構 201
7.2 捲積層 202
7.2.1 全連接層存在的問題 203
7.2.2 捲積運算 203
7.2.3 填充 206
7.2.4 步幅 207
7.2.5 3 維數據的捲積運算 209
7.2.6 結合方塊思考 211
7.2.7 批處理 213
7.3 池化層 214
7.4 捲積層和池化層的實現 216
7.4.1 4 維數組 216
7.4.2 基於im2col 的展開 217
7.4.3 捲積層的實現 219
7.4.4 池化層的實現 222
7.5 CNN的實現 224
7.6 CNN的可視化 228
7.6.1 第1 層權重的可視化 228
7.6.2 基於分層結構的信息提取 230
7.7 具有代表性的CNN 231
7.7.1 LeNet 231
7.7.2 AlexNet 232
7.8 小結 233
第8章 深度學習 235
8.1 加深網路 235
8.1.1 向更深的網路出發 235
8.1.2 進一步提高識別精度 238
8.1.3 加深層的動機 240
8.2 深度學習的小歷史 242
8.2.1 ImageNet 243
8.2.2 VGG 244
8.2.3 GoogLeNet 245
8.2.4 ResNet 246
8.3 深度學習的高速化 248
8.3.1 需要努力解決的問題 248
8.3.2 基於GPU的高速化 249
8.3.3 分散式學習 250
8.3.4 運算精度的位數縮減 252
8.4 深度學習的應用案例 253
8.4.1 物體檢測 253
8.4.2 圖像分割 255
8.4.3 圖像標題的生成 256
8.5 深度學習的未來 258
8.5.1 圖像風格變換 258
8.5.2 圖像的生成 259
8.5.3 自動駕駛 261
8.5.4 Deep Q-Network(強化學習) 262
8.6 小結 264
附錄A Softmax-with-Loss 層的計算圖 267
A.1 正向傳播 268
A.2 反向傳播 270
A.3 小結 277
參考文獻 279