1026 lines
23 KiB
Markdown
1026 lines
23 KiB
Markdown
# 深度学习完全指南:从理论基础到实践入门
|
||
|
||
> 作者:人工智能协会比赛部部长
|
||
|
||
---
|
||
|
||
## 第一章:引言
|
||
|
||
### 1.1 深度学习的定义
|
||
|
||
**深度学习(Deep Learning)** 是机器学习(Machine Learning)的一个重要分支,它基于**人工神经网络(Artificial Neural Network)** 技术,通过构建具有多个隐藏层的深层网络结构来自动学习数据的层次化特征表示。
|
||
|
||
与传统的机器学习相比,深度学习的核心优势在于:
|
||
|
||
- **自动特征提取**:无需人工设计特征,网络自动从数据中学习
|
||
- **端到端学习**:直接从原始数据到最终输出
|
||
- **强大的表达能力**:可处理高维、非线性的复杂数据
|
||
|
||
深度学习的本质是**函数逼近**:找到一个函数 F,使得 F(x) ≈ y,其中 x 是输入,y 是期望输出。
|
||
|
||
### 1.2 深度学习的发展历程
|
||
|
||
| 年份 | 里程碑事件 |
|
||
| :--- | :--------- |
|
||
| 1943 | McCulloch 和 Pitts 提出第一个神经元模型 |
|
||
| 1958 | Rosenblatt 提出感知机(Perceptron) |
|
||
| 1986 | Rumelhart 等人提出反向传播(BP)算法 |
|
||
| 2006 | Hinton 提出深度信念网络(DBN),"深度学习"概念正式诞生 |
|
||
| 2012 | AlexNet 在 ImageNet 竞赛中取得突破性成绩 |
|
||
| 2014 | GAN(生成对抗网络)问世 |
|
||
| 2017 | Transformer 架构提出 |
|
||
| 2020 | GPT-3 引发大语言模型热潮 |
|
||
|
||
### 1.3 为什么现在学习深度学习?
|
||
|
||
1. **数据爆发**:互联网时代产生了海量数据
|
||
2. **算力提升**:GPU、TPU 等硬件性能大幅增强
|
||
3. **算法进步**:新的网络结构和优化算法不断涌现
|
||
4. **开源生态**:TensorFlow、PyTorch 等框架降低了入门门槛
|
||
|
||
---
|
||
|
||
## 第二章:数学基础
|
||
|
||
### 2.1 线性代数
|
||
|
||
#### 2.1.1 向量与矩阵
|
||
|
||
**向量(Vector)** 是 n 维空间中的点:
|
||
x = [x₁, x₂, ..., xₙ]ᵀ
|
||
|
||
**矩阵(Matrix)** 是二维数据表:
|
||
A = [[a11, a12, ..., a1n],
|
||
[a21, a22, ..., a2n],
|
||
...,
|
||
[am1, am2, ..., amn]]
|
||
|
||
#### 2.1.2 矩阵运算
|
||
|
||
**矩阵乘法**:(AB)ij = sum(k=1 to n) aik * bkj
|
||
|
||
**Hadamard 积(元素对应相乘)**:(A ⊙ B)ij = aij · bij
|
||
|
||
**转置**:(AT)ij = aji
|
||
|
||
**逆矩阵**:A-1 满足 A-1 * A = I
|
||
|
||
#### 2.1.3 范数
|
||
|
||
**L1 范数**:|x|1 = sum(i=1 to n) |xi|
|
||
**L2 范数**:|x|2 = sqrt(sum(i=1 to n) xi^2)
|
||
|
||
#### 2.1.4 特征值与特征向量
|
||
|
||
对于方阵 A,如果存在非零向量 v 和标量 λ 满足:
|
||
|
||
`A × v = λ × v`
|
||
|
||
则称 λ 为**特征值**,v 为对应的**特征向量**。
|
||
|
||
**特征分解**:`A = V * Λ * V⁻¹`
|
||
|
||
其中 Λ 是特征值构成的对角矩阵。
|
||
|
||
#### 2.1.5 奇异值分解(SVD)
|
||
|
||
对于任意矩阵 `A ∈ R(m×n)`,可以分解为:
|
||
|
||
`A = U * Σ * Vᵀ`
|
||
|
||
- `U`:m×m 的正交矩阵(左奇异向量)
|
||
- `Σ`:m×n 的对角矩阵(奇异值)
|
||
- `V`:n×n 的正交矩阵(右奇异向量)
|
||
|
||
SVD 在降维、数据压缩中有重要应用。
|
||
|
||
### 2.2 概率论基础
|
||
|
||
#### 2.2.1 概率基本概念
|
||
|
||
**样本空间(S)**:所有可能结果的集合
|
||
**事件(A)**:样本空间的子集
|
||
**概率(P)**:P(A) 表示事件 A 发生的可能性
|
||
|
||
**公理**:
|
||
|
||
1. `0 ≤ P(A) ≤ 1`
|
||
2. `P(S) = 1`
|
||
3. 对于互斥事件:`P(A ∪ B) = P(A) + P(B)`
|
||
|
||
#### 2.2.2 条件概率
|
||
|
||
P(A|B) = P(A ∩ B) / P(B)
|
||
|
||
**贝叶斯定理**:
|
||
P(A|B) = P(B|A) * P(A) / P(B)
|
||
|
||
#### 2.2.3 期望与方差
|
||
|
||
**期望(均值)**:E[X] = sum(i) xi * P(X=xi)
|
||
**方差**:Var(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2
|
||
**标准差**:σ = sqrt(Var(X))
|
||
|
||
#### 2.2.4 常见分布
|
||
|
||
| 分布 | 概率质量函数 | 参数 |
|
||
| :--- | :---------- | :--- |
|
||
| 伯努利 | P(X=1)=p, P(X=0)=1-p | p |
|
||
| 二项式 | C(n,k) × p^k × (1-p)^(n-k) | n, p |
|
||
| 正态 | (1/(σ√(2π))) × e^(-(x-μ)²/(2σ²)) | μ, σ² |
|
||
| 泊松 | (λ^k × e^(-λ)) / k! | λ |
|
||
|
||
### 2.3 微积分基础
|
||
|
||
#### 2.3.1 导数
|
||
|
||
**定义**:f'(x) = lim(Δx→0) (f(x+Δx) - f(x)) / Δx
|
||
|
||
**几何意义**:函数在某点的切线斜率
|
||
|
||
**求导法则**:
|
||
|
||
- `(u + v)' = u' + v'`
|
||
- `(u * v)' = u'v + uv'`
|
||
- `(u/v)' = (u'v - uv') / v²`
|
||
- `(u(v))' = u'(v) * v'`
|
||
|
||
#### 2.3.2 偏导数
|
||
|
||
对于多元函数 f(x1, x2, ..., xn),对 xi 的偏导数:
|
||
∂f/∂xi = lim(Δxi→0) (f(x1, ..., xi+Δxi, ..., xn) - f(x1, ..., xi, ..., xn)) / Δxi
|
||
|
||
#### 2.3.3 梯度
|
||
|
||
梯度是偏导数构成的向量:
|
||
∇f = [∂f/∂x₁, ∂f/∂x₂, ..., ∂f/∂xₙ]ᵀ
|
||
|
||
**梯度方向**是函数值增长最快的方向。
|
||
|
||
#### 2.3.4 链式法则
|
||
|
||
如果 y = f(g(x)),则:
|
||
dy/dx = dy/dg * dg/dx
|
||
|
||
---
|
||
|
||
## 第三章:机器学习基础
|
||
|
||
### 3.1 机器学习概述
|
||
|
||
**机器学习** 是研究如何让计算机从数据中学习规律的技术。
|
||
|
||
**核心问题**:给定训练数据 D = {(x1, y1), (x2, y2), ..., (xn, yn)},学习一个函数 f,使得 f(xi) ≈ yi。
|
||
|
||
### 3.2 机器学习类型
|
||
|
||
#### 3.2.1 监督学习
|
||
|
||
给定带标签的数据,学习输入到输出的映射。
|
||
|
||
**分类**:输出是离散值(如垃圾邮件判断)
|
||
**回归**:输出是连续值(如房价预测)
|
||
|
||
#### 3.2.2 无监督学习
|
||
|
||
给定无标签的数据,学习数据内在结构。
|
||
|
||
**聚类**:将相似样本归为一类(如客户分群)
|
||
**降维**:减少特征维度(如PCA)
|
||
|
||
#### 3.2.3 强化学习
|
||
|
||
通过与环境交互,学习最优策略(如围棋AI)。
|
||
|
||
### 3.3 泛化与过拟合
|
||
|
||
**泛化(Generalization)**:模型在新数据上的表现能力
|
||
**过拟合(Overfitting)**:模型在训练数据上表现好,但在测试数据上差
|
||
**欠拟合(Underfitting)**:模型在训练数据上表现就差
|
||
|
||
**解决过拟合的方法**:
|
||
|
||
1. 增加训练数据
|
||
2. 正则化(Regularization)
|
||
3. Dropout
|
||
4. 早停(Early Stopping)
|
||
5. 简化模型复杂度
|
||
|
||
### 3.4 评估指标
|
||
|
||
#### 3.4.1 分类指标
|
||
|
||
**准确率(Accuracy)**:(TP + TN) / (TP + TN + FP + FN)
|
||
**精确率(Precision)**:TP / (TP + FP)
|
||
**召回率(Recall)**:TP / (TP + FN)
|
||
**F1 分数**:2 × Precision × Recall / (Precision + Recall)
|
||
|
||
**混淆矩阵**:
|
||
|
||
| | 预测正 | 预测负 |
|
||
| :----- | :----- | :----- |
|
||
| 实际正 | TP | FN |
|
||
| 实际负 | FP | TN |
|
||
|
||
#### 3.4.2 回归指标
|
||
|
||
**均方误差(MSE)**:(1/n) × sum(i=1 to n) (yi - ŷi)^2
|
||
**均方根误差(RMSE)**:sqrt(MSE)
|
||
**平均绝对误差(MAE)**:(1/n) × sum(i=1 to n) |yi - ŷi|
|
||
**R² 决定系数**:1 - sum((yi - ŷi)^2) / sum((yi - ȳ)^2)
|
||
|
||
### 3.5 批归一化(Batch Normalization)
|
||
|
||
#### 3.5.1 解决的问题
|
||
|
||
深度神经网络的训练面临**Internal Covariate Shift**问题:
|
||
|
||
- 层间输入分布随训练变化
|
||
- 需要较低的学习率和仔细的参数初始化
|
||
- 训练深层网络困难
|
||
|
||
#### 3.5.2 核心思想
|
||
|
||
对每一层的输出进行**归一化**,使其均值为 0,方差为 1。
|
||
|
||
**公式**:
|
||
|
||
1. 计算小批量均值:μ_B = (1/m) × Σ x_i
|
||
|
||
2. 计算小批量方差:σ²_B = (1/m) × Σ (x_i - μ_B)²
|
||
|
||
3. 归一化:x̂_i = (x_i - μ_B) / √(σ²_B + ε)
|
||
|
||
4. 缩放和平移:y_i = γ × x̂_i + β
|
||
|
||
其中 γ 和 β 是可学习的参数。
|
||
|
||
#### 3.5.3 优势
|
||
|
||
- **加速收敛**:可以使用更大的学习率
|
||
- **减少依赖**:对参数初始化不那么敏感
|
||
- **正则化效果**:轻微的正则化作用
|
||
- **允许使用饱和激活函数**:如 Sigmoid
|
||
|
||
#### 3.5.4 PyTorch 实现
|
||
|
||
```python
|
||
import torch.nn as nn
|
||
|
||
class ConvBlock(nn.Module):
|
||
def __init__(self, in_channels, out_channels):
|
||
super().__init__()
|
||
# 卷积层
|
||
self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1)
|
||
# 批归一化层:稳定数据分布
|
||
self.bn = nn.BatchNorm2d(out_channels)
|
||
# ReLU 激活
|
||
self.relu = nn.ReLU()
|
||
|
||
def forward(self, x):
|
||
# 先卷积,再归一化,最后激活
|
||
x = self.conv(x)
|
||
x = self.bn(x) # BatchNorm 加速训练
|
||
x = self.relu(x)
|
||
return x
|
||
```
|
||
|
||
---
|
||
|
||
## 第四章:神经网络基础
|
||
|
||
### 4.1 神经元模型
|
||
|
||
#### 4.1.1 生物神经元
|
||
|
||
人脑中的神经元由细胞体、树突、轴突组成:
|
||
|
||
- 树突:接收信号
|
||
- 细胞体:处理信号
|
||
- 轴突:输出信号
|
||
|
||
当输入信号超过阈值时,神经元会产生动作电位(兴奋)。
|
||
|
||
#### 4.1.2 人工神经元(M-P模型)
|
||
|
||
1943年,McCulloch 和 Pitts 提出:
|
||
|
||
`y = f(Σ wi × xi + b)`
|
||
|
||
其中:
|
||
|
||
- xi:输入
|
||
- wi:权重
|
||
- b:偏置
|
||
- f:激活函数
|
||
- y:输出
|
||
|
||
### 4.2 感知机
|
||
|
||
#### 4.2.1 单层感知机
|
||
|
||
Rosenblatt 1958年提出:
|
||
y = f(wT * x + b)
|
||
|
||
**感知机无法解决异或(XOR)问题**!
|
||
|
||
#### 4.2.2 多层感知机(MLP)
|
||
|
||
增加隐藏层后,可以解决非线性问题:
|
||
输入层 → 隐藏层 → 输出层
|
||
|
||
### 4.3 全连接网络
|
||
|
||
#### 4.3.1 网络结构
|
||
|
||
**全连接层(Dense Layer)**:y = W * x + b
|
||
|
||
**前向传播**:
|
||
a(l) = f(W(l) * a(l-1) + b(l))
|
||
|
||
#### 4.3.2 激活函数
|
||
|
||
**Sigmoid**:σ(x) = 1 / (1 + e^(-x))
|
||
**Tanh**:tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
|
||
**ReLU(线性整流单元)**:f(x) = max(0, x)
|
||
**Leaky ReLU**:f(x) = max(0.01x, x)
|
||
**Softmax**(用于多分类):softmax(x)i = e^(xi) / sum(j) e^(xj)
|
||
|
||
### 4.4 反向传播算法
|
||
|
||
#### 4.4.1 核心思想
|
||
|
||
反向传播(Backpropagation,BP)是利用链式法则,从后向前计算梯度,更新网络参数。
|
||
|
||
#### 4.4.2 梯度下降
|
||
|
||
参数更新公式:w = w - η × ∂L/∂w
|
||
|
||
其中 η 是学习率。
|
||
|
||
#### 4.4.3 BP算法步骤
|
||
|
||
1. **前向传播**:计算每层输出
|
||
2. **计算输出层误差**:δ(L) = (∂L/∂z(L)) ⊙ f'(z(L))
|
||
3. **反向传播误差**:δ(l) = (W(l+1))T * δ(l+1) ⊙ f'(z(l))
|
||
4. **计算梯度**:∂L/∂W(l) = δ(l) * a(l-1)
|
||
5. **更新参数**
|
||
|
||
### 4.5 损失函数
|
||
|
||
#### 4.5.1 均方误差(MSE)
|
||
|
||
回归任务:`L_MSE = (1/n) × Σ (yi - ŷi)²`
|
||
|
||
#### 4.5.2 交叉熵损失
|
||
|
||
分类任务:`L_CE = -Σ yi × log(ŷi)`
|
||
|
||
**二元交叉熵**:
|
||
|
||
`L_BCE = -[y × log(ŷ) + (1-y) × log(1-ŷ)]`
|
||
|
||
### 4.6 正则化技术
|
||
|
||
正则化是防止过拟合、提高模型泛化能力的关键技术。
|
||
|
||
#### 4.6.1 L1 正则化(Lasso)
|
||
|
||
在损失函数中添加参数绝对值之和:
|
||
|
||
**L1 损失**:`L_total = L_original + λ × Σ|w_i|`
|
||
|
||
**特点**:
|
||
|
||
- 产生稀疏权重矩阵(特征选择)
|
||
- 可用于降维和特征选择
|
||
- 不易受到异常值影响
|
||
|
||
#### 4.6.2 L2 正则化( Ridge / Weight Decay)
|
||
|
||
在损失函数中添加参数平方之和:
|
||
|
||
**L2 损失**:`L_total = L_original + λ × Σ(w_i)²`
|
||
|
||
**特点**:
|
||
|
||
- 权重衰减,防止权重过大
|
||
- 所有特征都被考虑,但权重较小
|
||
- 广泛使用,计算简单
|
||
|
||
#### 4.6.3 Dropout
|
||
|
||
训练时随机"丢弃"部分神经元:
|
||
|
||
```python
|
||
import torch.nn as nn
|
||
|
||
class DropoutNet(nn.Module):
|
||
def __init__(self):
|
||
super().__init__()
|
||
self.fc1 = nn.Linear(784, 256)
|
||
# Dropout 层:训练时随机断开 50% 的神经元
|
||
self.dropout1 = nn.Dropout(p=0.5)
|
||
self.fc2 = nn.Linear(256, 10)
|
||
self.dropout2 = nn.Dropout(p=0.5)
|
||
|
||
def forward(self, x):
|
||
# 全连接 + Dropout
|
||
x = torch.relu(self.fc1(x))
|
||
x = self.dropout1(x) # 随机丢弃,防止过拟合
|
||
x = torch.relu(self.fc2(x))
|
||
x = self.dropout2(x)
|
||
return x
|
||
```
|
||
|
||
**原理**:
|
||
|
||
- 每次训练随机忽略部分神经元
|
||
- 迫使网络学习更鲁棒的特征
|
||
- 相当于训练多个网络的集成
|
||
|
||
#### 4.6.4 Early Stopping(早停)
|
||
|
||
当验证集性能不再提升时停止训练:
|
||
|
||
1. 将数据分为训练集、验证集
|
||
2. 记录验证集最优准确率
|
||
3. 如果连续 N 轮未提升,则停止
|
||
4. 使用最优模型参数
|
||
|
||
#### 4.6.5 数据增强
|
||
|
||
通过对训练数据进行变换增加样本多样性:
|
||
|
||
**图像数据增强**:
|
||
- 随机翻转、旋转、裁剪
|
||
- 颜色抖动
|
||
- Mixup / CutMix
|
||
|
||
---
|
||
|
||
## 第五章:卷积神经网络
|
||
|
||
### 5.1 卷积运算
|
||
|
||
#### 5.1.1 什么是卷积?
|
||
|
||
**卷积**是一种数学运算:
|
||
|
||
`(f * g)(t) = ∫ f(τ) * g(t - τ) dτ`
|
||
|
||
在离散情况下:
|
||
|
||
`(f * g)[n] = Σ f[m] * g[n - m]`
|
||
|
||
#### 5.1.2 二维卷积
|
||
|
||
对于图像 I 和卷积核 K:
|
||
|
||
`(I * K)[i, j] = Σₘ Σₙ I[m, n] * K[i-m, j-n]`
|
||
|
||
**卷积核**也称为**滤波器(Filter)**或**卷积核(Kernel)**。
|
||
|
||
### 5.2 卷积层
|
||
|
||
#### 5.2.1 工作原理
|
||
|
||
1. 卷积核在输入图像上滑动
|
||
2. 每位置进行内积运算
|
||
3. 生成特征图(Feature Map)
|
||
|
||
#### 5.2.2 参数
|
||
|
||
- **卷积核大小**:如 3×3, 5×5
|
||
- **步长(Stride)**:卷积核移动的步长
|
||
- **填充(Padding)**:边缘填充方式
|
||
|
||
**输出尺寸计算**:
|
||
|
||
`O = floor((I - K + 2P) / S) + 1`
|
||
|
||
其中 I 是输入尺寸,K 是卷积核尺寸,P 是填充,S 是步长。
|
||
|
||
### 5.3 经典卷积网络
|
||
|
||
#### 5.3.1 LeNet-5(1998)
|
||
|
||
结构:输入 → Conv → Pool → Conv → Pool → FC → FC → 输出
|
||
|
||
**贡献**:首次提出卷积神经网络概念
|
||
|
||
#### 5.3.2 AlexNet(2012)
|
||
|
||
结构:Conv(11) → Pool → Conv(5) → Pool → Conv(3) × 3 → Pool → FC → FC → Softmax
|
||
|
||
**创新**:
|
||
- ReLU 激活函数
|
||
- Dropout 正则化
|
||
- 数据增强
|
||
- GPU 并行训练
|
||
|
||
**意义**:掀开深度学习复兴的序幕
|
||
|
||
#### 5.3.3 VGG(2014)
|
||
|
||
**特点**:全部使用 3×3 卷积核
|
||
|
||
**VGG-16**:13 层卷积 + 3 层全连接
|
||
|
||
**优点**:结构简单,迁移性好
|
||
|
||
#### 5.3.4 ResNet(2015)
|
||
|
||
**创新**:残差连接(Shortcut Connection)
|
||
|
||
y = F(x, W) + x
|
||
|
||
**作用**:解决深层网络训练困难的问题
|
||
|
||
**残差块**:
|
||
|
||
- 主分支:卷积 → BN → ReLU → 卷积 → BN
|
||
- shortcut:恒等映射
|
||
|
||
ResNet 使网络深度可以超过 100 层。
|
||
|
||
### 5.4 池化层
|
||
|
||
#### 5.4.1 最大池化(Max Pooling)
|
||
|
||
取区域内的最大值
|
||
|
||
#### 5.4.2 平均池化(Average Pooling)
|
||
|
||
取区域内平均值
|
||
|
||
#### 5.4.3 全局池化(Global Pooling)
|
||
|
||
对整个特征图进行池化,常用于替代全连接层。
|
||
|
||
### 5.5 经典任务
|
||
|
||
#### 5.5.1 图像分类
|
||
|
||
输入图像 → CNN → Softmax → 类别概率
|
||
|
||
常用数据集:
|
||
|
||
- MNIST(手写数字,10类)
|
||
- CIFAR-10(自然图像,10类)
|
||
- ImageNet(1000类,140万张图)
|
||
|
||
#### 5.5.2 目标检测
|
||
|
||
**两阶段检测**:R-CNN → Fast R-CNN → Faster R-CNN
|
||
**单阶段检测**:YOLO 系列、SSD
|
||
|
||
#### 5.5.3 语义分割
|
||
|
||
**全卷积网络(FCN)**:
|
||
- 编码器:卷积 + 池化(提取特征)
|
||
- 解码器:上采样(恢复分辨率)
|
||
|
||
**U-Net**:编码器-解码器结构,常用于医学图像。
|
||
|
||
---
|
||
|
||
## 第六章:循环神经网络
|
||
|
||
### 6.1 序列数据
|
||
|
||
序列数据的特点:
|
||
|
||
- 数据之间有时序关系
|
||
- 长度可变
|
||
- 上下文相关
|
||
|
||
**应用场景**:自然语言处理、语音识别、时间序列预测
|
||
|
||
### 6.2 循环神经网络
|
||
|
||
#### 6.2.1 网络结构
|
||
|
||
ht = f(W * ht-1 + U * xt + b)
|
||
|
||
**特点**:隐藏状态 ht 包含历史信息,参数在所有时间步共享
|
||
|
||
#### 6.2.2 BPTT(Backpropagation Through Time)
|
||
|
||
沿时间反向传播梯度
|
||
|
||
**问题**:梯度消失 / 梯度爆炸
|
||
|
||
### 6.3 改进 RNN
|
||
|
||
#### 6.3.1 LSTM(长短期记忆网络)
|
||
|
||
**门控机制**:
|
||
|
||
- **遗忘门**:决定丢弃什么信息
|
||
- **输入门**:决定存储什么信息
|
||
- **输出门**:决定输出什么信息
|
||
|
||
**细胞状态**:长期记忆载体
|
||
|
||
#### 6.3.2 GRU(门控循环单元)
|
||
|
||
**结构更简单**:
|
||
- 更新门:决定保留多少过去信息
|
||
- 重置门:决定忽略多少过去信息
|
||
|
||
### 6.4 序列到序列模型
|
||
|
||
#### 6.4.1 Seq2Seq
|
||
|
||
编码器(处理输入)→ 解码器(生成输出)
|
||
|
||
**应用**:机器翻译、对话系统
|
||
|
||
#### 6.4.2 注意力机制
|
||
|
||
**核心**:让解码器关注输入的相关部分
|
||
|
||
ci = sum(j) αij * hj
|
||
|
||
其中 αij 是注意力权重。
|
||
|
||
---
|
||
|
||
## 第七章:Transformer
|
||
|
||
### 7.1 Transformer 架构
|
||
|
||
#### 7.1.1 整体结构
|
||
|
||
编码器(Encoder)→ 解码器(Decoder)
|
||
|
||
#### 7.1.2 自注意力机制
|
||
|
||
**核心公式**:
|
||
Attention(Q, K, V) = softmax(QK^T / sqrt(dk)) * V
|
||
|
||
- Q(Query):查询
|
||
- K(Key):键
|
||
- V(Value):值
|
||
|
||
**多头注意力**:使用多个注意力头捕捉不同类型的关系。
|
||
|
||
### 7.2 位置编码
|
||
|
||
由于自注意力不包含位置信息,需要添加位置编码:
|
||
|
||
PE(pos, 2i) = sin(pos / 10000^(2i/dmodel))
|
||
PE(pos, 2i+1) = cos(pos / 10000^(2i/dmodel))
|
||
|
||
### 7.3 Feed Forward Network
|
||
|
||
每个位置的表示经过两次线性变换:
|
||
|
||
`FFN(x) = ReLU(xW₁ + b₁) * W₂ + b₂`
|
||
|
||
### 7.4 Transformer 家族
|
||
|
||
#### 7.4.1 GPT系列(Generative Pre-trained Transformer)
|
||
|
||
**GPT-1(2018)**:
|
||
|
||
- 无监督预训练 + 有监督微调
|
||
- 首次证明预训练 + 微调范式有效
|
||
|
||
**GPT-2(2019)**:
|
||
|
||
- 15亿参数
|
||
- 提出 Zero-Shot 能力
|
||
- 展示了大规模语言模型的潜力
|
||
|
||
**GPT-3(2020)**:
|
||
|
||
- 1750亿参数
|
||
- Few-Shot Learning
|
||
- 通用语言能力大幅提升
|
||
|
||
**GPT-4(2023)**:
|
||
|
||
- 多模态支持(图像 + 文本)
|
||
- 更强的推理能力
|
||
- ChatGPT 的基础模型
|
||
|
||
#### 7.4.2 BERT(Bidirectional Encoder Representations)
|
||
|
||
**核心创新**:双向编码器,同时利用左右上下文
|
||
|
||
**预训练任务**:
|
||
|
||
- **MLM(掩码语言模型)**:预测被遮盖的词
|
||
- **NSP(下一句预测)**:判断句子关系
|
||
|
||
**应用场景**:
|
||
|
||
- 文本分类、命名实体识别
|
||
- 问答系统、信息检索
|
||
|
||
#### 7.4.3 ViT(Vision Transformer)
|
||
|
||
**核心思想**:将图像分成固定大小的 patches,作为"token"输入 Transformer
|
||
|
||
**处理流程**:
|
||
|
||
1. 图像分割:224×224 → 16×16 patches(共 196 个)
|
||
2. 线性嵌入 + 位置编码
|
||
3. 加入 CLS token 用于分类
|
||
4. 输入标准 Transformer 编码器
|
||
|
||
**优势**:
|
||
|
||
- 在大规模数据上效果优异
|
||
- 参数量可控,扩展性好
|
||
|
||
#### 7.4.4 ChatGPT 与 LLaMA
|
||
|
||
**ChatGPT(2022)**:
|
||
|
||
- 基于 GPT-3.5/4
|
||
- RLHF(人类反馈强化学习)微调
|
||
- 对话式交互范式
|
||
- 涌现出强大的推理能力
|
||
|
||
**LLaMA(2023)**:
|
||
|
||
- Meta 开源的大语言模型
|
||
- 多种规模(7B/13B/33B/65B)
|
||
- 推动开源 LLM 发展
|
||
|
||
#### 7.4.5 现代 Transformer 变体
|
||
|
||
| 模型 | 特点 | 应用 |
|
||
| :--- | :--- | :--- |
|
||
| **T5** | Text-to-Text 统一框架 | 翻译、摘要、问答 |
|
||
| **BART** | 去噪自编码器 | 文本生成、摘要 |
|
||
| **RoBERTa** | BERT 优化版 | 各项 NLP 任务 |
|
||
| **CLIP** | 图文对比学习 | 多模态理解 |
|
||
| **DALL-E** | 文生图 | 图像生成 |
|
||
|
||
---
|
||
|
||
## 第八章:优化算法
|
||
|
||
### 8.1 梯度下降变体
|
||
|
||
#### 8.1.1 批量梯度下降(BGD)
|
||
|
||
使用整个数据集计算梯度
|
||
**优点**:收敛平稳
|
||
**缺点**:计算量大
|
||
|
||
#### 8.1.2 随机梯度下降(SGD)
|
||
|
||
每次使用一个样本
|
||
**优点**:速度快,可能跳出局部最优
|
||
**缺点**:收敛震荡
|
||
|
||
#### 8.1.3 小批量梯度下降(MBGD)
|
||
|
||
每次使用一小批样本(batch)
|
||
**实践中最常用**
|
||
|
||
### 8.2 优化器
|
||
|
||
#### 8.2.1 SGD
|
||
|
||
w = w - η × g
|
||
|
||
#### 8.2.2 Momentum
|
||
|
||
加入动量项,减少震荡:
|
||
v = γv + η × g
|
||
w = w - v
|
||
|
||
#### 8.2.3 Nesterov
|
||
|
||
先看一步的方向,再更新
|
||
|
||
#### 8.2.4 Adagrad
|
||
|
||
自适应调整学习率(适合稀疏特征)
|
||
|
||
#### 8.2.5 RMSprop
|
||
|
||
使用指数移动平均
|
||
|
||
#### 8.2.6 Adam
|
||
|
||
结合动量和自适应学习率
|
||
|
||
**公式**:
|
||
|
||
```text
|
||
m = β₁ × m + (1-β₁) × g
|
||
v = β₂ × v + (1-β₂) × g²
|
||
m̂ = m / (1-β₁ᵗ)
|
||
v̂ = v / (1-β₂ᵗ)
|
||
w = w - η × m̂ / (√(v̂) + ε)
|
||
```
|
||
|
||
### 8.3 学习率调度
|
||
|
||
#### 8.3.1 固定学习率
|
||
|
||
#### 8.3.2 衰减策略
|
||
|
||
- 阶梯衰减
|
||
- 指数衰减
|
||
- 余弦退火
|
||
|
||
#### 8.3.3 Warmup
|
||
|
||
先增大学习率,再衰减
|
||
|
||
---
|
||
|
||
## 第九章:深度学习框架
|
||
|
||
### 9.1 PyTorch 2.x
|
||
|
||
#### 9.1.1 简介
|
||
|
||
PyTorch 是 Meta(原 Facebook)开发的深度学习框架,当前版本为 **PyTorch 2.x**,以**动态图**著称。
|
||
|
||
**核心特点**:
|
||
|
||
- **动态计算图**:灵活调试,动态修改网络结构
|
||
- **Pythonic 设计**:代码简洁易懂
|
||
- **易于调试**:可以直接使用 Python 调试工具
|
||
- **研究首选**:学术界广泛使用
|
||
- **torch.compile**:2.x 新增的编译优化,显著提升训练速度
|
||
|
||
#### 9.1.2 基础操作
|
||
|
||
```python
|
||
import torch
|
||
|
||
# 创建张量(PyTorch 2.x 推荐方式)
|
||
x = torch.tensor([1.0, 2.0, 3.0]) # 从数据创建
|
||
w = torch.randn(3, 5, requires_grad=True) # 需要梯度的参数
|
||
|
||
# 前向传播:矩阵乘法
|
||
y = torch.matmul(x, w)
|
||
|
||
# 反向传播:计算梯度
|
||
y.backward()
|
||
|
||
# 更新参数:手动梯度下降
|
||
w.data -= 0.01 * w.grad
|
||
```
|
||
|
||
#### 9.1.3 模型定义
|
||
|
||
```python
|
||
import torch.nn as nn
|
||
|
||
# 定义多层感知机模型
|
||
class MyModel(nn.Module):
|
||
def __init__(self):
|
||
super().__init__()
|
||
# 第一层全连接:输入784维,输出256维
|
||
self.fc1 = nn.Linear(784, 256)
|
||
# 第二层全连接:输入256维,输出10维(分类)
|
||
self.fc2 = nn.Linear(256, 10)
|
||
|
||
def forward(self, x):
|
||
# 第一层:线性变换 + ReLU 激活
|
||
x = torch.relu(self.fc1(x))
|
||
# 输出层:线性变换(通常配合 SoftmaxLoss 使用)
|
||
x = self.fc2(x)
|
||
return x
|
||
|
||
# 实例化模型
|
||
model = MyModel()
|
||
|
||
# 使用 torch.compile 加速(PyTorch 2.x 新特性)
|
||
model = torch.compile(model) # 编译优化,提升性能
|
||
```
|
||
|
||
#### 9.1.4 训练循环
|
||
|
||
```python
|
||
import torch.optim as optim
|
||
|
||
# 创建模型实例
|
||
model = MyModel()
|
||
|
||
# 选择优化器和损失函数
|
||
optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam 优化器
|
||
criterion = nn.CrossEntropyLoss() # 交叉熵损失(分类任务)
|
||
|
||
# 训练循环
|
||
for epoch in range(100):
|
||
for batch_x, batch_y in dataloader:
|
||
# 前向传播
|
||
outputs = model(batch_x)
|
||
loss = criterion(outputs, batch_y)
|
||
|
||
# 反向传播
|
||
optimizer.zero_grad() # 清零梯度
|
||
loss.backward() # 计算梯度
|
||
optimizer.step() # 更新参数
|
||
```
|
||
|
||
#### 9.1.5 GPU 加速
|
||
|
||
```python
|
||
# 检查 GPU 是否可用
|
||
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
||
|
||
# 将模型和数据移动到 GPU
|
||
model = model.to(device)
|
||
batch_x = batch_x.to(device)
|
||
batch_y = batch_y.to(device)
|
||
```
|
||
|
||
### 9.2 TensorFlow / Keras
|
||
|
||
Google 开发的框架,**TensorFlow 2.x** 默认启用动态图(Eager Execution)。
|
||
|
||
**特点**:
|
||
- Keras API 简化了模型构建
|
||
- TensorFlow Serving 便于部署
|
||
- TFLite 支持移动端/边缘设备
|
||
|
||
### 9.3 选择建议
|
||
|
||
| 场景 | 推荐框架 | 原因 |
|
||
| :--- | :------- | :--- |
|
||
| **学术研究** | PyTorch 2.x | 灵活、调试方便、论文复现首选 |
|
||
| **工业部署** | TensorFlow / ONNX | 生态完善、部署工具成熟 |
|
||
| **快速原型** | Keras | API 简洁、入门容易 |
|
||
| **边缘设备** | TensorFlow Lite | 轻量化、支持移动端 |
|
||
| **LLM / 生成式 AI** | PyTorch | 主流预训练模型首选 |
|
||
|
||
---
|
||
|
||
## 第十章:实践建议
|
||
|
||
### 10.1 入门学习路线
|
||
|
||
#### 阶段一:基础(2-4周)
|
||
|
||
1. Python 强化(尤其是 NumPy)
|
||
2. 吴恩达机器学习课程(可选)
|
||
3. 了解神经网络基本原理
|
||
|
||
#### 阶段二:框架入门(2-4周)
|
||
|
||
1. 安装 PyTorch
|
||
2. 学习基本操作
|
||
3. 完成 MNIST 分类
|
||
|
||
#### 阶段三:进阶(4-8周)
|
||
|
||
1. CNN / RNN / Transformer
|
||
2. 阅读经典论文
|
||
3. Kaggle 竞赛入门
|
||
|
||
#### 阶段四:实践(持续)
|
||
|
||
1. 复现论文
|
||
2. 参加竞赛
|
||
3. 找实习 / 课题
|
||
|
||
### 10.2 资源推荐
|
||
|
||
#### 在线课程
|
||
|
||
- 吴恩达机器学习(Andrew Ng)
|
||
- fast.ai
|
||
- 李宏毅机器学习
|
||
|
||
#### 书籍
|
||
|
||
- 《深度学习》(Ian Goodfellow)
|
||
- 《机器学习》(周志华)
|
||
- 《统计学习方法》(李航)
|
||
|
||
#### 论文
|
||
|
||
- AlexNet
|
||
- ResNet
|
||
- Attention is All You Need
|
||
- BERT
|
||
|
||
### 10.3 比赛建议
|
||
|
||
协会将组织以下类型比赛:
|
||
1. **图像分类**:CIFAR-10/100
|
||
2. **目标检测**:VOC / COCO
|
||
3. **NLP**:文本分类、机器翻译
|
||
4. **综合**:Kaggle 竞赛
|
||
|
||
---
|
||
|
||
## 结语
|
||
|
||
深度学习是人工智能时代的核心技术。希望这篇教程能帮助你入门,有任何问题欢迎随时交流!
|
||
|
||
> 人工智能协会 · 比赛部部长
|