深度學習精粹與PyTorch實踐 Inside Deep Learning: Math, Algorithms, Models

[美] 愛德華·拉夫(Edward Raff)著 郭濤 譯

  • 深度學習精粹與PyTorch實踐-preview-1
  • 深度學習精粹與PyTorch實踐-preview-2
  • 深度學習精粹與PyTorch實踐-preview-3
深度學習精粹與PyTorch實踐-preview-1

商品描述

"深度學習絕非不可窺探的黑箱!深入理解其模型和算法的實際運作機制,是駕馭並優化結果的關鍵。你無需成為數學專家或資深數據科學家,同樣能夠掌握深度學習系統內部的工作原理。本書旨在通過深入淺出的方式,為你揭示這些原理,讓你在理解和解釋自己的工作時更加自信與從容。 《深度學習精粹與PyTorch實踐》以淺顯易懂的方式揭示了深度學習算法的內部運作機制,即使是機器學習初學者也能輕松理解。本書通過平實的語言解析、詳盡的代碼註釋,以及數十個基於PyTorch框架的實戰示例,逐步引導你探索深度學習的核心概念與實用工具。本書避免了復雜的數學公式堆砌,而是採用直觀易懂的方式闡述每種神經網絡類型的運作邏輯。更令人興奮的是,書中提供的所有解決方案均可在現有的GPU硬件上順暢運行! 主要內容 ● 選擇正確的深度學習組件 ● 訓練和評估深度學習模型 ● 微調深度學習模型以實現性能**化瞭解深度學習術語"

目錄大綱

目 錄

第1章 學習的機制     3

1.1 Colab入門     7

1.2 張量      7

1.3 自動微分     15

1.3.1 使用導數將損失降至最低    17

1.3.2 使用自動微分計算導數    18

1.3.3 知識整合:使用導數最小化函數   19

1.4 優化參數     21

1.5 加載數據集對象   23

1.6 練習      26

1.7 小結      27

第2章 全連接網絡     29

2.1 優化神經網絡    30

2.1.1 訓練神經網絡的符號    30

2.1.2 建立線性回歸模型  32

2.1.3 訓練循環    32

2.1.4 定義數據集   34

2.1.5 定義模型    36

2.1.6 定義損失函數   37

2.1.7 知識整合:在數據上訓練線性回歸模型  38

2.2 構建第一個神經網絡   40

2.2.1 全連接網絡的符號  40

2.2.2 PyTorch中的全連接網絡    41

2.2.3  增加非線性   43

2.3 分類問題     46

2.3.1 分類簡單問題   46

2.3.2 分類損失函數   48

2.3.3 訓練分類網絡   51

2.4 更好地訓練代碼   53

2.4.1 自定義指標   53

2.4.2 訓練和測試階段  54

2.4.3 保存檢查點   55

2.4.4 知識整合:更好的模型訓練函數    56

2.5 批量訓練     61

2.6 練習      64

2.7 小結      65

第3章 捲積神經網絡     67

3.1 空間結構先驗信念   68

3.2 什麽是捲積    74

3.2.1 一維捲積    75

3.2.2 二維捲積    76

3.2.3 填充    77

3.2.4  權重共享   78

3.3 捲積如何有益於圖像處理  79

3.4 付諸實踐:我們的第一個CNN      82

3.4.1 使用多個過濾器生成捲積層     83

3.4.2 每層使用多個過濾器  84

3.4.3 通過展平將捲積層與線性層混合    84

3.4.4 第一個CNN的PyTorch代碼     86

3.5 添加池化以減少對象移動  88

3.6 數據增強     93

3.7 練習      97

3.8 小結      97

第4章 循環神經網絡    99

4.1 作為權重共享的循環神經網絡     100

4.1.1 全連接網絡的權重共享     101

4.1.2 隨時間共享權重  105

4.2 在PyTorch中實現RNN  107

4.2.1 一個簡單的序列分類問題     108

4.2.2 嵌入層    112

4.2.3 使用最後一個時間步長進行預測    114

4.3 通過打包減短訓練時間  119

4.3.1 填充和打包   120

4.3.2 可打包嵌入層   122

4.3.3 訓練批量RNN   122

4.3.4 同時打包和解包輸入     124

4.4 更為復雜的RNN   125

4.4.1 多層    126

4.4.2 雙向RNN    127

4.5 練習     129

4.6 小結     130

第5章 現代訓練技術    131

5.1 梯度下降分兩部分進行  132

5.1.1 添加學習率調度器  133

5.1.2 添加優化器   134

5.1.3 實現優化器和調度器    135

5.2 學習率調度器    139

5.2.1 指數衰減:平滑不穩定訓練    140

5.2.2 步長下降調整:更平滑    143

5.2.3 餘弦退火:準確率更高但穩定性較差  144

5.2.4 驗證平臺:基於數據的調整    147

5.2.5 比較調度器   151

5.3 更好地利用梯度   152

5.3.1 SGD與動量:適應梯度一致性   153

5.3.2 Adam:增加動量變化    159

5.3.3 梯度修剪:避免梯度爆炸    162

5.4 使用Optuna進行超參數優化     164

5.4.1 Optuna    164

5.4.2 使用PyTorch的Optuna    167

5.4.3 使用Optuna修剪試驗    171

5.5 練習     173

5.6 小結     174

第6章 通用設計構建塊   175

6.1 更好的激活函數   179

6.1.1 梯度消失   179

6.1.2 校正線性單位(ReLU):避免梯度消失   181

6.1.3 使用LeakyReLU激活訓練    184

6.2 歸一化層:神奇地促進收斂     186

6.2.1 歸一化層用於何處  187

6.2.2 批量歸一化   188

6.2.3 使用批量歸一化進行訓練    190

6.2.4 層歸一化   192

6.2.5 使用層歸一化進行訓練    192

6.2.6 使用哪個歸一化層  195

6.2.7 層歸一化的特點  195

6.3 跳躍連接:網絡設計模式  198

6.3.1 實施全連接的跳躍  200

6.3.2 實現捲積跳躍   203

6.4 1×1捲積:在通道中共享和重塑信息     206

6.5 殘差連接     208

6.5.1 殘差塊    208

6.5.2 實現殘差塊   210

6.5.3 殘差瓶頸   210

6.5.4 實現殘差瓶頸   212

6.6 長短期記憶網絡RNN  214

6.6.1 RNN:快速回顧  214

6.6.2 LSTM和門控機制  215

6.6.3 LSTM訓練   217

6.7 練習     220

6.8 小結     220

第Ⅱ部分 構建高級網絡

第7章 自動編碼和自監督   225

7.1 自動編碼的工作原理  227

7.1.1 主成分分析是自動編碼器的瓶頸   228

7.1.2 實現PCA   229

7.1.3 使用PyTorch實現PCA    232

7.1.4 可視化PCA結果  233

7.1.5 簡單的非線性PCA  235

7.2 設計自動編碼神經網絡  238

7.2.1 實現自動編碼器  239

7.2.2 可視化自動編碼器結果    240

7.3 更大的自動編碼器   242

7.4 自動編碼器去噪   247

7.5 時間序列和序列的自回歸模型     252

7.5.1 實現char-RNN自回歸文本模型   254

7.5.2 自回歸模型是生成模型    261

7.5.3 隨著溫度調整採樣  263

7.5.4 更快地採樣   266

7.6 練習     268

7.7 小結     269

第8章 目標檢測    271

8.1 圖像分割     272

8.1.1 核檢測:加載數據  273

8.1.2 在PyTorch中表示圖像分割問題   275

8.1.3 建立第一個圖像分割網絡    277

8.2 用於擴展圖像大小的轉置捲積     279

8.3 U-Net:查看精細和粗糙的細節     284

8.4 帶邊界框的目標檢測  289

8.4.1 Faster R-CNN   290

8.4.2 在PyTorch中實現Faster R-CNN   295

8.4.3 抑制重疊框   303

8.5 使用預訓練的Faster R-CNN     305

8.6 練習     307

8.7 小結     308

第9章 生成對抗網絡    309

9.1 理解生成對抗網絡   310

9.1.1 損失計算   312

9.1.2 GAN博弈   314

9.1.3 實現第一個GAN  316

9.2 模式崩潰     324

9.3 Wasserstein GAN:緩解模式崩潰     327

9.3.1 WGAN判別器損失  327

9.3.2 WGAN生成器損失  328

9.3.3 實現WGAN   329

9.4 捲積GAN    334

9.4.1 設計捲積生成器  334

9.4.2 設計捲積判別器  336

9.5 條件GAN    339

9.5.1 實現條件GAN   340

9.5.2 訓練條件GAN   341

9.5.3 使用條件GAN控制生成    342

9.6 GAN潛在空間概覽   343

9.6.1 從Hub獲取模型  343

9.6.2 對GAN輸出進行插值    344

9.6.3 標記潛在維度   346

9.7 深度學習中的倫理問題  349

9.8 練習     350

9.9 小結     351

第10章 註意力機制     353

10.1 註意力機制學習相對輸入重要性     354

10.1.1 訓練基線模型  355

10.1.2 註意力機制  357

10.1.3 實現簡單的註意力機制    359

10.2 添加上下文    363

10.2.1 點分數   365

10.2.2 總分數   366

10.2.3 附加註意力  367

10.2.4 計算註意力權重    369

10.3 知識整合:一種有上下文的完整註意力機制  371

10.4 練習     375

10.5 小結     376

第11章 序列到序列     377

11.1 序列到序列作為一種去噪自動編碼器    378

11.2 機器翻譯和數據加載器     380

11.3 序列到序列的輸入  385

11.3.1 自回歸法   386

11.3.2 教師強製法  386

11.3.3 教師強製法與自回歸法的比較  387

11.4 序列到序列註意力  387

11.4.1 實現序列到序列  389

11.4.2 訓練和評估  394

11.5 練習     400

11.6 小結     400

第12章 RNN的網絡設計替代方案      401

12.1 TorchText:處理文本問題的工具    402

12.1.1 安裝TorchText  402

12.1.2 在TorchText中加載數據集  402

12.1.3 定義基線模型  405

12.2 隨時間平均嵌入   406

12.3 隨時間池化和一維CNN     413

12.4 位置嵌入為任何模型添加序列信息    417

12.4.1 實現位置編碼模塊    421

12.4.2 定義位置編碼模型    422

12.5 Transformer:大數據的大模型     425

12.5.1 多頭註意力  425

12.5.2 transformer模塊  430

12.6 練習     433

12.7 小結     434

第13章 遷移學習     435

13.1 遷移模型參數   436

13.2 遷移學習和使用CNN進行訓練     440

13.2.1 調整預訓練網絡  442

13.2.2 預處理預訓練的ResNet   446

13.2.3 熱啟動訓練  447

13.2.4 使用凍結權重進行訓練    449

13.3 用較少的標簽學習  451

13.4 文本預訓練    454

13.4.1 帶有Hugging Face庫的transformer  455

13.4.2 無梯度的凍結權重    457

13.5 練習     459

13.6 小結      460

第14章 高級構件     461

14.1 池化問題    462

14.1.1 鋸齒損害了平移不變性   464

14.1.2 通過模糊實現抗鋸齒   469

14.1.3 應用抗鋸齒池化  473

14.2 改進後的殘差塊   476

14.2.1 有效深度   477

14.2.2 實現ReZero  478

14.3 混合訓練減少過擬合  481

14.3.1 選擇混合率  483

14.3.2 實現MixUp  484

14.4 練習     489

14.5  小結     489

附錄A 設置Colab     491