理解深度學習的基本原理、核心算法和關鍵技術
深度學習的核心理論與技術
- 前言
- 一、深度學習核心理論
- 1. 神經網絡基礎
- 核心內容
- 練習
- 資源
- 2. 反向傳播與梯度下降
- 核心內容
- 練習
- 資源
- 3. 卷積神經網絡(CNN)
- 核心內容
- 練習
- 資源
- 4. 循環神經網絡(RNN)與 LSTM
- 核心內容
- 練習
- 資源
- 5. 優化算法與正則化
- 核心內容
- 練習
- 資源
- 二、實踐與驗證
- 1. 理論推導
- 2. 簡單代碼實現
- 3. 分析與總結
- 三、下一步
- 我是將軍,我一直都在!
前言
重點是幫助大家理解深度學習的基本原理、核心算法和關鍵技術
- 深度學習的核心概念(如神經網絡、反向傳播、激活函數)。
- 常見深度學習模型的理論基礎(前饋神經網絡、卷積神經網絡、循環神經網絡)。
- 優化算法和正則化技術,后續模型實現。
后續會使用主流框架(如 TensorFlow、PyTorch)構建神經網絡
一、深度學習核心理論
1. 神經網絡基礎
核心內容
-
神經網絡結構:
-
神經網絡由輸入層、隱藏層和輸出層組成,每層包含多個神經元。
-
神經元計算:輸入加權求和后通過激活函數輸出。
# 簡單神經元計算示例 import numpy as np inputs = np.array([1.0, 2.0, 3.0]) weights = np.array([0.2, 0.8, -0.5]) bias = 2.0 output = np.dot(inputs, weights) + bias # 線性組合 print(output) # 輸出加權和
-
-
激活函數:
-
Sigmoid:將輸出映射到 [0, 1],常用于二分類。
-
ReLU(Rectified Linear Unit):加速收斂,緩解梯度消失。
-
Tanh:將輸出映射到 [-1, 1],適合隱藏層。
-
-
損失函數:
-
回歸任務:均方誤差(MSE)。
-
分類任務:交叉熵損失。
-
練習
- 手動計算一個簡單神經元的輸出(給定輸入、權重和偏置)。
- 推導 Sigmoid 和 ReLU 的導數,理解其在反向傳播中的作用。
資源
- 書籍:
- 《Deep Learning》(Ian Goodfellow 等人):第 6 章,詳細講解神經網絡基礎。
O’Reilly 鏈接
- 《Deep Learning》(Ian Goodfellow 等人):第 6 章,詳細講解神經網絡基礎。
- 視頻:
- 3Blue1Brown 的神經網絡系列(YouTube,直觀講解):
Neural Networks - DeepLearning.AI 的《Neural Networks and Deep Learning》(Coursera):
Coursera 鏈接
- 3Blue1Brown 的神經網絡系列(YouTube,直觀講解):
2. 反向傳播與梯度下降
核心內容
-
反向傳播(Backpropagation):
- 通過鏈式法則計算損失函數對權重和偏置的梯度。
- 步驟:
- 前向傳播:計算輸出和損失。
- 反向傳播:計算梯度,更新權重。
-
梯度下降:
-
優化目標:最小化損失函數。
-
更新規則:
(其中 (\eta) 為學習率)
-
變體:
- 批量梯度下降:使用全數據集。
- 隨機梯度下降(SGD):每次使用一個樣本。
- 小批量梯度下降:折中方案,常用。
-
-
問題與解決:
- 梯度消失/爆炸:通過 ReLU、梯度裁剪緩解。
- 學習率選擇:過大導致震蕩,過小收斂慢。
練習
- 手動推導一個兩層神經網絡的反向傳播過程(包含一個隱藏層)。
- 使用 NumPy 實現簡單的前向和反向傳播(單層神經網絡)。
資源
- 教程:
- CS231n(斯坦福大學):神經網絡與反向傳播筆記。
CS231n Notes - StatQuest 的反向傳播講解(YouTube):
Backpropagation
- CS231n(斯坦福大學):神經網絡與反向傳播筆記。
- 書籍:
- 《Deep Learning》第 6.5 節:詳細推導反向傳播。
3. 卷積神經網絡(CNN)
核心內容
- 用途:處理圖像、視頻等網格數據,擅長特征提取。
- 核心組件:
-
卷積層:通過卷積核提取局部特征(如邊緣、紋理)。
-
池化層:下采樣(如最大池化),減少計算量。
-
全連接層:整合特征進行分類。
-
- 關鍵概念:
- 卷積核、步幅(stride)、填充(padding)。
- 參數共享:減少參數量,提高泛化能力。
練習
- 手動計算一個 3x3 圖像與 2x2 卷積核的卷積操作。
- 分析 CNN 在圖像分類中的優勢,寫 200 字總結。
資源
- 視頻:
- CS231n 的 CNN 模塊(YouTube):
CNN Lecture - DeepLearning.AI 的《Convolutional Neural Networks》(Coursera):
Coursera 鏈接
- CS231n 的 CNN 模塊(YouTube):
- 書籍:
- 《Deep Learning》第 9 章:CNN 理論與應用。
4. 循環神經網絡(RNN)與 LSTM
核心內容
-
用途:處理序列數據(如時間序列、文本)。
-
RNN 原理:
-
循環結構,共享權重處理序列。
-
問題:梯度消失,難以學習長期依賴。
-
-
LSTM(長短期記憶網絡):
- 引入記憶單元和門機制(輸入門、遺忘門、輸出門)。
- 解決長期依賴問題,適合長序列。
-
應用:文本生成、機器翻譯、語音識別。
練習
- 推導 RNN 的前向傳播公式,分析梯度消失的原因。
- 比較 RNN 和 LSTM 的優缺點,寫 300 字總結。
資源
- 教程:
- CS231n 的 RNN 筆記:
CS231n RNN - Colah 的 LSTM 博客(經典講解):
Understanding LSTM
- CS231n 的 RNN 筆記:
- 視頻:
- StatQuest 的 RNN 和 LSTM 講解(YouTube):
RNN
LSTM
- StatQuest 的 RNN 和 LSTM 講解(YouTube):
5. 優化算法與正則化
核心內容
- 優化算法:
-
Adam:結合動量法和 RMSProp,適應性強。
-
RMSProp:自適應調整學習率。
-
動量法:加速梯度下降收斂。
-
- 正則化技術:
-
L1/L2 正則化:防止過擬合,增加權重懲罰。
-
Dropout:隨機丟棄神經元,增強泛化。
-
批歸一化(Batch Normalization):標準化每層輸入,加速訓練。
-
練習
- 推導 Adam 優化器的更新公式,比較其與 SGD 的差異。
- 實現 Dropout 的簡單代碼(隨機將部分輸入置零)。
資源
- 書籍:
- 《Deep Learning》第 7-8 章:優化算法和正則化。
- 教程:
- CS231n 的優化筆記:
CS231n Optimization - DeepLearning.AI 的《Improving Deep Neural Networks》(Coursera):
Coursera 鏈接
- CS231n 的優化筆記:
二、實踐與驗證
1. 理論推導
- 任務:
- 推導一個三層神經網絡(輸入層、隱藏層、輸出層)的反向傳播公式。
- 計算卷積操作的輸出尺寸(給定輸入尺寸、卷積核大小、步幅和填充)。
- 目標:加深對數學原理的理解。
2. 簡單代碼實現
-
任務:
-
使用 NumPy 實現一個單層神經網絡,包括前向傳播和反向傳播。
import numpy as np X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) # 輸入 y = np.array([[0], [1], [1], [0]]) # XOR 問題標簽 weights = np.random.randn(2, 1) bias = np.random.randn(1) learning_rate = 0.1 for _ in range(1000):# 前向傳播z = np.dot(X, weights) + biasy_pred = 1 / (1 + np.exp(-z)) # Sigmoid# 損失loss = np.mean((y_pred - y) ** 2)# 反向傳播grad_y_pred = y_pred - ygrad_z = grad_y_pred * y_pred * (1 - y_pred)grad_weights = np.dot(X.T, grad_z)grad_bias = np.sum(grad_z)# 更新參數weights -= learning_rate * grad_weightsbias -= learning_rate * grad_bias print(y_pred) # 驗證輸出
-
-
目標:通過代碼加深對理論的理解。
3. 分析與總結
- 任務:
- 閱讀一篇關于 CNN 或 LSTM 的經典論文(如 LeNet、LSTM 原論文),寫 300 字總結。
- 比較不同激活函數(如 Sigmoid、ReLU、Tanh)對模型性能的影響。
import numpy as np# 數據:XOR 問題
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])# 初始化參數
np.random.seed(0)
weights = np.random.randn(2, 1)
bias = np.random.randn(1)
learning_rate = 0.1# 訓練
for epoch in range(1000):# 前向傳播z = np.dot(X, weights) + biasy_pred = 1 / (1 + np.exp(-z)) # Sigmoid# 損失loss = np.mean((y_pred - y) ** 2)# 反向傳播grad_y_pred = y_pred - ygrad_z = grad_y_pred * y_pred * (1 - y_pred)grad_weights = np.dot(X.T, grad_z)grad_bias = np.sum(grad_z)# 更新參數weights -= learning_rate * grad_weightsbias -= learning_rate * grad_biasif epoch % 100 == 0:print(f"Epoch {epoch}, Loss: {loss}")# 預測
print("Predictions:")
print(y_pred)
三、下一步
完成深度學習核心理論后,大家可以進入 主流框架(如 TensorFlow、PyTorch) 的學習,實踐 CNN 和 RNN 的實現。將軍會深入講解某個主題(如 LSTM 的門機制)或幫助大家推導公式、調試代碼。