動手學深度學習pytorch
參考地址:https://zh.d2l.ai/
文章目錄
- 動手學深度學習pytorch
- 1-第01章-引言
- 1. 機器學習/深度學習基礎
- 1.1 什么是機器學習?
- 1.2 深度學習與機器學習的關系?
- 2. 數據(Data)
- 2.1 什么是樣本、特征、標簽?
- 2.2 如何理解“Garbage in, garbage out”?
- 3. 模型(Model)
- 3.1 什么是模型?
- 3.2 深度學習模型與傳統模型的區別?
- 4. 目標函數(Objective Function)
- 4.1 什么是目標函數/損失函數?
- 4.2 回歸與分類常用損失?
- 5. 優化算法(Optimization Algorithm)
- 5.1 什么是梯度下降?
- 5.2 如何在 PyTorch 中使用 SGD?
- 6. 監督學習(Supervised Learning)
- 6.1 什么是監督學習?
- 6.2 監督學習的三大步驟?
- 7. 回歸(Regression)
- 7.1 什么是回歸問題?
- 7.2 如何定義一個簡單的線性回歸模型?
- 8. 分類(Classification)
- 8.1 什么是分類問題?
- 8.2 如何輸出類別概率?
- 9. 過擬合與欠擬合
- 9.1 什么是過擬合?
- 9.2 如何緩解過擬合?
- 10. 無監督學習(Unsupervised Learning)
- 10.1 什么是無監督學習?
- 10.2 聚類示例?
- 11. 強化學習(Reinforcement Learning)
- 11.1 什么是強化學習?
- 11.2 強化學習四元組?
- 12. 端到端訓練(End-to-End Training)
- 12.1 什么是端到端訓練?
- 12.2 與傳統流水線對比?
- 13. 表示學習(Representation Learning)
- 13.1 什么是表示學習?
- 13.2 示例:CNN 學到的層級特征
- 14. 數據增強(Data Augmentation)
- 14.1 什么是數據增強?
- 14.2 在 PyTorch 中做圖像增強?
- 15. 生成對抗網絡(GAN)
- 15.1 什么是 GAN?
- 15.2 基本訓練循環?
- 16. 注意力機制(Attention)
- 16.1 什么是注意力機制?
- 16.2 縮放點積注意力?
- 17. 遷移學習(Transfer Learning)
- 17.1 什么是遷移學習?
- 17.2 在 PyTorch 中加載預訓練模型?
- 18. GPU 加速
- 18.1 為什么要用 GPU?
- 18.2 把張量移到 GPU?
- 19. 自動微分(Autograd)
- 19.1 什么是自動微分?
- 19.2 計算并訪問梯度?
- 20. 深度學習框架
- 20.1 常見框架有哪些?
- 20.2 為什么選擇 PyTorch?
1-第01章-引言
1. 機器學習/深度學習基礎
1.1 什么是機器學習?
機器學習是一類讓計算機系統通過數據或經驗自動提升特定任務性能的技術集合,通常不需要人工顯式編寫規則。
1.2 深度學習與機器學習的關系?
# 偽代碼:關系示意
MachineLearning
└── DeepLearning # 使用多層神經網絡進行表示學習
2. 數據(Data)
2.1 什么是樣本、特征、標簽?
- 樣本(sample/example):數據集中的一條記錄
- 特征(features/covariates):描述樣本的屬性向量
- 標簽(label/target):需要預測的真實結果
2.2 如何理解“Garbage in, garbage out”?
# 示意:低質量數據導致低質量模型
data_quality == 'garbage' ? model_performance == 'garbage'
3. 模型(Model)
3.1 什么是模型?
模型是由大量可學習參數(parameters)構成的函數族,通過調整參數將輸入映射到期望輸出。
3.2 深度學習模型與傳統模型的區別?
# 傳統流程
手工特征提取 → 淺層模型(如 SVM、決策樹)# 深度學習流程
原始數據 → 多層神經網絡(自動特征提取 + 預測)
4. 目標函數(Objective Function)
4.1 什么是目標函數/損失函數?
目標函數(又稱損失函數或成本函數)量化模型預測與真實標簽之間的差距,訓練過程即最小化該函數。
4.2 回歸與分類常用損失?
# 回歸
loss = (y_pred - y_true) ** 2 # MSE# 二分類
loss = BCEWithLogitsLoss(y_pred, y_true)
5. 優化算法(Optimization Algorithm)
5.1 什么是梯度下降?
梯度下降是一種迭代優化算法,沿負梯度方向更新參數以最小化損失函數。
5.2 如何在 PyTorch 中使用 SGD?
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
6. 監督學習(Supervised Learning)
6.1 什么是監督學習?
監督學習使用帶標簽的數據集訓練模型,使其能對新的輸入樣本預測正確的輸出標簽。
6.2 監督學習的三大步驟?
# 1. 構建帶標簽的訓練集
train_ds = TensorDataset(X_train, y_train)# 2. 選擇并訓練模型
model = MyModel()
train(model, train_ds)# 3. 在測試集上預測
y_pred = model(X_test)
7. 回歸(Regression)
7.1 什么是回歸問題?
回歸問題的輸出是連續數值,目標是讓預測值盡可能接近真實值。
7.2 如何定義一個簡單的線性回歸模型?
class LinearRegression(nn.Module):def __init__(self, in_features):super().__init__()self.linear = nn.Linear(in_features, 1)def forward(self, x):return self.linear(x)
8. 分類(Classification)
8.1 什么是分類問題?
分類問題的輸出是離散類別,模型需為每個類別輸出概率或硬標簽。
8.2 如何輸出類別概率?
probs = torch.softmax(logits, dim=1) # 每行之和為1
9. 過擬合與欠擬合
9.1 什么是過擬合?
模型在訓練集上表現極好,但在未見過的測試集上表現顯著下降。
9.2 如何緩解過擬合?
# 常用技巧
model = nn.Sequential(nn.Dropout(0.5), # 隨機失活nn.Linear(512, 10)
)
10. 無監督學習(Unsupervised Learning)
10.1 什么是無監督學習?
無監督學習僅使用無標簽數據,目標是發現數據內部結構或分布規律。
10.2 聚類示例?
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3).fit(X)
labels = kmeans.labels_
11. 強化學習(Reinforcement Learning)
11.1 什么是強化學習?
智能體通過與環境交互(觀察-動作-獎勵循環)學習策略,以最大化長期累積獎勵。
11.2 強化學習四元組?
(state, action, reward, next_state)
12. 端到端訓練(End-to-End Training)
12.1 什么是端到端訓練?
從原始輸入到最終輸出的整個過程由一個統一模型完成,所有模塊聯合優化。
12.2 與傳統流水線對比?
# 傳統
raw_image → 手工特征提取 → 分類器 → 結果# 端到端
raw_image ─────── CNN ───────→ 結果
13. 表示學習(Representation Learning)
13.1 什么是表示學習?
模型自動學習數據的多層抽象表示,使后續任務更簡單有效。
13.2 示例:CNN 學到的層級特征
Layer-1: 邊緣/紋理
Layer-3: 形狀/部件
Layer-5: 物體概念
14. 數據增強(Data Augmentation)
14.1 什么是數據增強?
通過對訓練樣本進行隨機變換(旋轉、裁剪、加噪聲等)生成更多有效樣本,提高模型泛化能力。
14.2 在 PyTorch 中做圖像增強?
transform = T.Compose([T.RandomHorizontalFlip(),T.RandomRotation(10),T.ToTensor()
])
15. 生成對抗網絡(GAN)
15.1 什么是 GAN?
由生成器(Generator)和判別器(Discriminator)組成,通過對抗訓練使生成器學會產生逼真數據。
15.2 基本訓練循環?
# 1. 訓練判別器
loss_D = criterion(D(real), 1) + criterion(D(fake.detach()), 0)# 2. 訓練生成器
loss_G = criterion(D(fake), 1)
16. 注意力機制(Attention)
16.1 什么是注意力機制?
允許模型在處理序列時動態聚焦于最相關的部分,提高長程依賴建模能力。
16.2 縮放點積注意力?
scores = Q @ K.transpose(-2, -1) / sqrt(d_k)
attn = softmax(scores) @ V
17. 遷移學習(Transfer Learning)
17.1 什么是遷移學習?
利用在大規模數據集上預訓練的模型權重,只需微調即可適配新任務,顯著減少訓練數據與計算量。
17.2 在 PyTorch 中加載預訓練模型?
model = torchvision.models.resnet50(pretrained=True)
for p in model.parameters():p.requires_grad = False
model.fc = nn.Linear(model.fc.in_features, num_classes)
18. GPU 加速
18.1 為什么要用 GPU?
GPU 具有大量并行計算核心,能夠顯著加速深度學習中的矩陣運算。
18.2 把張量移到 GPU?
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = x.to(device)
model = model.to(device)
19. 自動微分(Autograd)
19.1 什么是自動微分?
PyTorch 通過 autograd
機制自動計算張量的梯度,無需手動推導反向傳播公式。
19.2 計算并訪問梯度?
loss.backward() # 反向傳播
print(layer.weight.grad) # 查看梯度
20. 深度學習框架
20.1 常見框架有哪些?
PyTorch、TensorFlow/Keras、JAX、MXNet、MindSpore 等。
20.2 為什么選擇 PyTorch?
動態圖、Pythonic 語法、調試友好、社區活躍。