第1章 編程和數學基礎
1.1 Python快速入門
1.1.1 Python安裝
- Python解釋器的安裝
- jupyter notebook編程環境
- Anaconda安裝工具
1.1.2 對象、print()函數、類型轉換、註釋、變量、input()函數
1. 對象
2. 打印函數print()
3. 類型轉換
4. 註釋
5. 變量
6. input()函數
- 1.1.3 運算
[下標運算符[]](#下標運算符)
字符串的格式化
1.1.4 控制語句
- 1. if 語句
- 2. while語句
- 3. for語句
1.1.5 Python常用容器類型
- 1. list(列表)
- 索引
- 切片
- for 遍歷所有元素
- 2. tuple(元組)
- 3. set(集合)
- 4. dict(字典)
1.1.6 函數
math數學包 - 全局變量和局部變量 - Anonymous/Lambda Function(匿名/lambda函數) - 嵌套函數、閉包 - yield和生成器
1.1.7 類和對象
1.1.8 Matplotlib入門
- subplot()
- Axes objects
- mplot3d
- 顯示圖像
1.2 張量庫numpy
1.2.1 什麼是張量?
- 1 向量
- 向量的範數
- 2 矩陣
- 3 三維張量
1.2.2 創建ndarray對象
- 1. array()
- 2. 多維數組類型ndarray
- 3. asarray()
- 4. ndarray的tolist()方法
- 5. astype()和reshape()
- 6. arange()和linspace()
- 7. full()、empty()、zeros()、ones()、eye()
- 8. 創建隨機值張量的常用函數
9. 添加、重複與鋪設、合併與分裂、邊緣填充、添加軸與交換軸 - 重複repeat() - 鋪設tile() - 合併concatenate() - 疊加stack() - column_stack()、hstack()、vstack() - 分裂split() - 邊緣填充 - 添加軸 - 交換軸
1.2.3 ndarry數組的索引和切片
1.2.4 張量的計算
- 1. 逐元素計算
- Hadamard乘積
- 2. 累積計算
- 3. 點積
- 4 廣播Broadcasting
1.3 微積分
1.3.1 函數
1.3.2 四則和復合運算
- 四則運算
- 複合
1.3.3 極限、導數
- 1. 數列的極限
- 2. 函數的極限與連續性
- 3. 函數的導數
1.3.4 導數的四則運算和鍊式求導法則
1.3.5 計算圖、正向計算、反向傳播求導
1.3.6 多變量函數的偏導數與梯度
1.3.7 向量值函數的導數與Jacobian矩陣
1.3.8 積分
1.4 概率基礎
1.4.1 概率
1.4.2 條件概率、聯合概率、全概率公式、貝葉斯公式
1.4.3 隨機變量
1.4.4 離散型隨機變量的概率分佈列
1.4.5 連續性隨機變量的概率密度
1.4.6 隨機變量的分佈函數
1.4.7 期望、方差、協方差、協變矩陣
- 1. 均值和期望
- 2. 方差、標準差
- 3. 協方差、協變矩陣
第2章 梯度下降法
2.1 函數極值的必要條件
2.2 梯度下降法(gradient descent)
2.3 梯度下降法的參數優化策略
- 2.3.1 Momentum動量法
- 2.3.2 Adagrad法
- 2.3.3 Adadelta法
- 2.3.4 RMSprop法
- 2.3.5 Adam法
2.4 梯度驗證
- 2.4.1 比較數值梯度和分析梯度
2.4.2 通用的數值梯度
- 2.5 分離梯度下降算法與參數優化策略
- 2.5.1 參數優化器
- 2.5.2 接受參數優化器的梯度下降法
第3章 線性回歸、邏輯回歸和softmax回歸
3.1 線性回歸
- 3.1.1 餐車利潤問題
3.1.2 機器學習與人工智能
- 1. 機器學習
- 2. 機器學習與人工智能的關係
- 3. 機器學習的分類
3.1.3 什麼是線性回歸?
- 3.1.4 正規方程求解線性回歸問題
3.1.5 梯度下降法求解線性回歸問題
3.1.6 調試學習率
3.1.7 梯度驗證
3.1.8 預測
3.1.9 多特徵的線性回歸
- 1. 多特徵線性回歸
- 2. 擬合平面
- 3. 溫度與壓強問題
3.1.10 數據的規範化
3.2 模型的評估
- 3.2.1 欠擬合和過擬合
- 3.2.2 驗證集、測試集
- 3.2.3 學習曲線
- 3.2.4 預測大壩出水量
3.2.5 偏差和方差(Bias-Variance)
3.3 正則化(Regularization) - 增加正則項的損失函數變為
3.5 邏輯回歸
3.5.1 邏輯回歸
3.5.2 邏輯回歸的numpy實現
- 1. 生成數據
- 2. 梯度下降法的代碼實現
- 3. 計算損失函數值
- 4. 決策曲線
- 5. 預測的準確性
- 6. Scikit-Learn庫的邏輯回歸
3.5.3 實戰:鳶尾花分類的numpy實現
3.6 softmax回歸
3.6.1 spiral數據集
3.6.2 softmax函數
3.6.3 softmax回歸
- 多樣本形式
3.6.4 多分類交叉熵損失
3.6.5 通過加權和計算交叉熵損失
3.6.6 softmax回歸的梯度計算
- 1. 交叉熵損失關於加權和的梯度
- 2. 交叉熵損失關於權值參數的梯度
3.6.7 softmax回歸的梯度下降法的實現
2.6.8 spiral數據集的softmax回歸
3.7 批梯度下降法和隨機梯度下降法
3.7.1 MNIST 手寫數字集
3.7.2 用部分訓練樣本訓練邏輯回歸
3.7.3 批梯度下降法及實現
- Fasion MNIST訓練集的softmax回歸
3.7.4 隨機梯度下降法
- 總結
第4章 神經網絡
4.1 神經網絡(Neural Network)
4.1.1 感知機和神經元
- 1. 感知機
- 2. 神經元
4.1.2 激活函數
- 1. 階躍函數sign(x)
- 2. tanh函數
- 4. ReLU函數
4.1.3 神經網絡和深度學習
4.1.4 多個樣本的正向計算
4.1.5 輸出
4.1.6 損失函數
- 1. 均方差損失
- 2. 二分類交叉熵損失
- 3. 多分類交叉熵損失
4.1.7 基於數值梯度的神經網絡訓練
4.1.8 深度學習
4.2 反向求導
4.2.1正向計算和反向求導
4.2.2 計算圖
4.2.3 損失函數關於輸出的梯度
- 1. 二分類交叉熵損失函數關於輸出的梯度
- 2. 均方差損失函數關於輸出的梯度
- 3. 多分類的交叉熵損失函數關於輸出的梯度
4.2.4 2層神經網絡的反向傳播求導
- 1. 單樣本的反向求導
- 2. 反向求導的多樣本向量化表示
- 3. 列向量形式的梯度計算公式
4.2.5 2層神經網絡的python實現
4.2.6 任意層神經網絡的反向傳播求導
4.3 實現一個簡單的深度學習框架
4.3.1 神經網絡的訓練過程
4.3.2 網絡層的代碼實現
4.3.3 網絡層的梯度檢驗
4.3.4 神經網絡類
4.3.5 神經網絡的梯度檢驗
4.3.6 基於深度學習框架的MNIST數據手寫數字識別
4.3.7 改進的通用神經網絡框架:分離加權和與激活函數
- 梯度驗證
4.3.8 獨立的參數優化器
4.3.9 fashion-mnist的分類訓練
- 4.3. 9 讀寫模型參數
第5章 改進神經網絡性能的基本技巧
5.1 數據處理
5.1.1 數據增強
5.1.2 規範化
5.1.3 特徵工程
- 1. 數據降維與主元分析法
2 白化(Whitening)
5.2 參數調試
- 5.2.1 權重初始化
- 5.2.2 優化參數
5.3 批規範化
- 5.3.1 什麼是批規範化?
- 5.3.2 批規範化的反向求導
- 5.3.3 批規範化的代碼實現
5.4 正則化Regularization
- 5.4.1 權重正則化
- 5.4.2 Dropout
- 5.4.3 早停法(Early stopping)
第6章 卷積神經網絡CNN
6.1 卷積
6.1.1 什麼是卷積?
- 跨度
6.1.2 一維信號的捲積
6.1.3 二維卷積
跨度
6.1.4 多輸入通道和多輸出通道
6.1.5 池化
6.2 卷積神經網絡
6.2.1 全連接神經元和卷積神經元
6.2.2 卷積層和卷積神經網絡
6.2.3 卷積層和池化層的反向求導及代碼實現
卷積層的反向求導
- 池化層的反向求導
6.2.4 卷積神經網絡的實現
6.3 卷積的矩陣乘法
- 6.3.1 1D樣本卷積的矩陣乘法
- 6.3.2 2D樣本卷積的矩陣乘法
- 6.3.3 1D卷積反向求導的矩陣乘法
- 6.3.4 2D卷積反向求導的矩陣乘法
6.4 基於坐標索引的快速卷積
- 梯度檢驗
- 與非加速卷積的時間比較
6.5 典型的捲積神經網絡結構
- 6.5.1 LeNet-5
- 6.5.2 AlexNet
- 6.5.3 VGG
- 6.5.4 深度神經網絡的梯度爆炸和消失問題
- 6.5.5 殘差網絡(Residual Networks (ResNets))
- 6.5.6 谷歌 Inception 網絡
- 6.5.7 Network in Network (NiN)
第7章 循環神經網絡RNN
7.1 序列問題和模型
7.1.1 股票價格預測問題
7.1.2 概率序列模型、語言模型
- 1. 概率序列模型
- 2. 語言模型
7.1.3 自回歸模型
7.1.4 生成自回歸數據
7.1.5 時間窗方法
7.1.6 時間窗採樣
7.1.7 時間窗方法建模和訓練
7.1.8 長期預測和短期預測
7.1.9 股票價格預測
7.1.10 k-gram 語言模型
7.2 循環神經網絡
- 7.2.1 無記憶功能的非循環神經網絡
- 7.2.2 具有記憶功能的循環神經網絡
7.3 穿過時間的反向傳播(Backpropagation through time)
7.4 單層循環神經網絡的實現
- 7.4.1 初始化模型參數
- 7.4.2 正向計算
- 7.4.3 損失函數
- 7.4.4 反向求導
- 7.4.5 梯度驗證
- 7.4.6 梯度下降訓練
7.4.7 序列數據的採樣
7.4.8 序列數據的RNN訓練和預測
- 序列數據的訓練
- 預測
- 股票數據的訓練和預測
7.5 RNN語言模型和文本生成
7.5.1 字符表
7.5.2 字符序列樣本的採樣
7.5.3 RNN模型的訓練和預測
- 預測
7.6 RNN網絡的梯度爆炸和梯度消失
7.7 長短期記憶網絡(LSTM)
7.7.1 LSTM的神經元:元胞(cell)
7.7.2 LSTM的反向求導
7.7.3 LSTM的代碼實現
- 梯度檢驗
- 文本生成
- 預測
7.7.4 LSTM的變種
7.8 門控循環單元(GRU)
- 7.8.1 GRU的工作原理
- 7.8.2 GRU的代碼實現
7.9 循環神經網絡的類表示與實現
- 7.9.1 用類實現循環神經網絡
- 7.9.2 循環神經網絡單元的類實現
- 7.10 多層、雙向循環神經網絡
7.10.1 多層循環神經網絡
7.10.2 多層循環神經網絡的訓練和預測
7.10.3 雙向循環神經網絡
7.11 序列到序列(seq2seq)模型
機器翻譯
7.11.1 Seq2Seq模型的實現
7.11.2 字符級機器翻譯的Seq2Seq
- 1. 字符單詞表
- 2. 讀取訓練樣本、構建字符單詞表
- 3. 訓練字符級的Seq2Seq模型
7.11.3 基於Word2Vec的Seq2Seq機器翻譯
- 1. 單詞向量化 Word2Vec的skip-gram方法
7.11.4 基於詞嵌入層的Seq2Seq模型
- 1. 詞嵌入層
- 2. 採用詞嵌入層的Seq2Seq模型
7.11.5 注意力機制
第8章 生成模型
8.1 生成模型
8.2 自動編碼器
- 8.2.1 自動編碼器
- 8.2.2 稀疏編碼器
- 8.2.3 自動編碼器的實現
8.3 變分自動編碼器
- 8.3.1 什麼是變分自動編碼器?
8.3.2 損失函數
8.3.3 參數重採樣
8.3.4 反向求導
8.3.5 變分自動編碼器的實現
8.4 生成對抗網絡
8.4.1 GAN原理
- 1. 鑑別器和生成器
- 2. 損失函數
- 3. 訓練過程
8.4.2 GAN 訓練過程的代碼實現
8.5 GAN建模實例
8.5.1 一組實數的GAN建模
- 1. 真實數據:一組實數
- 2. 定義鑑別器和生成器函數
- 3. 真實數據迭代器、噪聲數據迭代器
- 4. 中間結果繪製函數
- 5. 訓練GAN
8.5.2 二維坐標點的GAN建模
- 1. 真實數據:橢圓曲線上採樣的坐標點
- 2. 真實數據迭代器、噪聲迭代器
- 3. 定義GAN模型的生成器和鑑別器
- 4. 訓練GAN模型
8.5.3 MNIST數據集的GAN建模
- 1. 讀取訓練數據
- 2. 定義數據迭代器
- 3. 定義生成器和鑑別器及其優化器
4. 訓練模型
8.5.4 GAN訓練技巧
8.6 GAN損失函數及其概率解釋
- 8.6.1 GAN的損失函數的全局最優解
- 8.6.2 Kullback–Leibler散度和Jensen–Shannon散度
- 8.6.3 GAN的最大似然解釋
8.7 改進的損失函數:Wasserstein GAN(WGAN)
- 8.7.1 Wasserstein GAN的原理
- 8.7.2 WGAN的代碼實現
8.8 深度卷積對抗網絡 DCGAN
- 8.8.1 1D向量的轉置卷積
- 8.8.2 2D轉置卷積
- 8.8.3 卷積對抗網絡DCGAN的實現
- 參考文獻