深度学习基础与卷积神经网络
一、神经网络基础
1.1 神经元与感知机
输入层 隐藏层 输出层
x₁ ────┐
├ w₁ ──┐
x₂ ────┤ │ Σ (─σ─) → y
├ w₂ ──┘
x₃ ────┘
y = σ(w₁x₁ + w₂x₂ + w₃x₃ + b)
1.2 激活函数
| 函数 | 公式 | 范围 | 优点 | 缺点 |
|---|---|---|---|---|
| Sigmoid | σ(x)=1/(1+e^{-x}) | (0,1) | 平滑 | 梯度消失/非0中心 |
| Tanh | tanh(x)=2σ(2x)-1 | (-1,1) | 0中心 | 梯度消失 |
| ReLU ⭐ | max(0,x) | [0,∞) | 稀疏/不饱和 | Dying ReLU |
| Leaky ReLU | max(0.01x,x) | (-∞,∞) | 缓解Dying | 参数选择 |
| ELU | x (x>0), α(e^x-1) (x≤0) | (-α,∞) | 连续 | 较慢 |
| GELU ⭐ | x Φ(x) | 近似(-∞,∞) | ViT/LLM标准 | 较复杂 |
| Swish/SiLU | x σ(x) | 近似(-∞,∞) | Google提出 | 同GELU |
| Softmax | e{x_i}/Σe{x_j} | (0,1), 和为1 | 多分类输出 | - |
1.3 损失函数
| 损失 | 公式 | 用途 |
|---|---|---|
| MSE | ½ | |
| Cross Entropy | -Σy·log(ŷ) | 多类分类 |
| Binary CE | -y·log(ŷ) - (1-y)·log(1-ŷ) | 二分类 |
| Hinge | max(0, 1-y·ŷ) | SVM式分类 |
| Contrastive | y·D² + (1-y)·max(0, m-D)² | 孪生网络 |
| Triplet | max(0, d(a,p) - d(a,n) + m) | Face Recognition |
1.4 优化器演进
SGD(1950s)
├── Momentum (1986) ──→ NAG (Nesterov, 1983)
├── AdaGrad (2011) ────→ RMSProp (2012)
└── Adam (2014) ───────→ AdamW (2017) ──→ Lion (2023)
# PyTorch 优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
optimizer = torch.optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
学习率调度:
- Step Decay: 每N个epoch × 0.1
- Cosine Annealing: 余弦退火(常用于ViT)
- Linear Warmup + Cosine: 先升温再退火
- OneCycleLR: 一周训练策略
1.5 正则化
| 方法 | 原理 | 公式/实现 |
|---|---|---|
| L1正则 | 参数稀疏 | Loss + λ |
| L2正则 | 权重衰减 | Loss + λ |
| Dropout | 随机丢弃神经元 | 训练时随机z→0 |
| DropPath | 随机丢弃残差路径 | 类似Dropout |
| Label Smoothing | 软标签 | y = (1-ε)·y + ε/K |
| Batch Norm | 归一化+缩放移位 | γ(x-μ)/σ + β |
| Data Augmentation | 数据增强 | 随机变换 |
| Early Stopping | 验证集不提升就停 | 验证损失平台期 |
| Weight Decay | 权重向0衰减 | 等效L2 |
二、反向传播(Backpropagation)
2.1 链式法则核心
Loss = CrossEntropy(Softmax(FC(ReLU(Conv(Input))))
∂Loss
传播方向: Loss ← CE ← Softmax ← FC ← ReLU ← Conv ← Input → ∂w
∂L/∂w_i = ∂L/∂z_j · ∂z_j/∂w_i (链式法则逐层计算)
↓ ↓ ↓
损失信号 激活梯度 输入特征
2.2 计算图
┌──→ Relu ──→ Weight ──→ Softmax ──→ Loss
Input ─┤
└──→ ... (分支/跳连)
三、卷积神经网络(CNN)核心 ⭐
3.1 卷积层
卷积操作: (I * K)(x,y) = ΣΣ I(x+i, y+j)·K(i,j)
参数:
| 参数 | 含义 | 常见值 |
|---|---|---|
| Kernel Size | 卷积核大小 | 3×3, 5×7, 7×7 |
| Stride | 步长 | 1, 2 |
| Padding | 填充方式 | same, valid |
| Dilation | 空洞 | 1, 2, 4 |
| Groups | 分组 | 1, depthwise |
nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1)
输出尺寸: out = (in + 2p - k) / s + 1
3.2 池化层
| 类型 | 操作 | 效果 |
|---|---|---|
| Max Pooling | 取窗口最大值 | 平移不变性,提取显著特征 |
| Average Pooling | 取窗口平均值 | 平滑,降低方差 |
| Global Avg Pooling | 全图平均 | 替代FC层防过拟合 |
| Adaptive Pooling | 输出固定尺寸 | 灵活输入 |
3.3 经典CNN架构演进
LeNet-5 (1998)
│
AlexNet (2012) ←── ImageNet竞赛转折点
│
├── VGG (2014) ──── 更深的架构,3×3堆叠
├── Inception-v1 (2014) ── 并行多分支
│
├── ResNet (2015) ⭐ ──── 残差连接,(层数飙升)
│ ├── ResNeXt (2016) ──── 分组卷积
│ └── DenseNet (2016) ──── 密集连接
│
├── SENet (2017) ──── 通道注意力
├── MobileNets (2017) ──── 深度可分离卷积
│ ├── ShuffleNet (2018)
│ └── EfficientNet (2019) ──── NAS搜索 + 复合缩放
│
├── ResNeSt (2020) ──── 分组注意力
├── ConvNeXt (2022) ⭐ ── 现代CNN(媲美ViT)
└── ConvNeXt V2 (2023) ── 全卷积掩码自编码器
3.4 关键架构详解
AlexNet (2012) - 里程碑
Input(224×224×3)
↓ Conv 11×11, 96, s4 → Pool → Norm
↓ Conv 5×5, 256 → Pool → Norm
↓ Conv 3×3, 384 → Conv 3×3, 384 → Conv 3×3, 256 → Pool
↓ FC 4096 → Dropout → FC 4096 → Dropout → FC 1000 → Softmax
创新: ReLU, GPU双卡并行, Dropout, 数据增强, LRN
VGG (2014)
特点: 全部3×3卷积 + 2×2池化,简洁优雅
VGG-16: 13 Conv + 3 FC = 16层 (138M参数)
VGG-19: 16 Conv + 3 FC = 19层 (144M参数)
ResNet (2015) ⭐ - 革命性
核心: 残差块 F(x) + x 解决梯度消失
x
│
┌─┴──┐
│ Conv 3×3
│ ReLU
│ Conv 3×3
└─┬──┘
│ (+) ← x(恒等映射)
ReLU
变体:
| 架构 | 层数 | Top-1 Error |
|---|---|---|
| ResNet-18 | 18 | 30.24% |
| ResNet-34 | 34 | 26.75% |
| ResNet-50 | 50 | 24.56% |
| ResNet-101 | 101 | 23.39% |
| ResNet-152 | 152 | 23.05% |
| Wide ResNet | 50 (2×) | 21.50% |
| ResNeXt-101 | 101 (32×4d) | 21.17% |
import torchvision.models as models
resnet = models.resnet50(pretrained=True)
EfficientNet (2019) - NAS最优
复合缩放: 同时调整 depth × width × resolution
| 模型 | Params | Top-1 |
|---|---|---|
| EfficientNet-B0 | 5.3M | 77.3% |
| EfficientNet-B7 | 66M | 84.4% |
ConvNeXt (2022) - CNN复兴
设计原则 (从Swin Transformer学到的):
- 7×7大卷积核
- GELU激活
- LayerNorm替代BatchNorm
- 膨胀比率增大
- 反向瓶颈结构 (DW Conv → Dense → Dense)
四、训练技巧与超参数
4.1 权重初始化
| 方法 | 适用 | 公式 |
|---|---|---|
| Xavier/Glorot | tanh/Sigmoid | Var(w) = 2/(n_in + n_out) |
| He/Kaiming ⭐ | ReLU/PReLU | Var(w) = 2/n_in |
| LeCun | tanh | Var(w) = 1/n_in |
| Orthogonal | RNN | 正交矩阵初始化 |
def weights_init(m):
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
if m.bias is not None:
nn.init.constant_(m.bias, 0)
4.2 数据增强(CV专属)
| 增强 | 效果 | 库 |
|---|---|---|
| 随机翻转 | 平移不变性 | RandomHorizontalFlip |
| 随机旋转 | 旋转不变性 | RandomRotation |
| 随机裁剪 | 尺度/平移不变 | RandomResizedCrop |
| 颜色抖动 | 光照/颜色不变 | ColorJitter |
| 灰度化 | 颜色不变性 | RandomGrayscale |
| Cutout | 遮挡鲁棒 | 随机块=0 |
| Mixup | 插值融合 | λ·x₁ + (1-λ)·x₂ |
| CutMix | 区域替换 | 矩形替换 |
| AutoAugment | RL搜索最优增强 | TensorFlow |
| RandAugment | 随机选择增强 | PyTorch |
| AugMix | 混合多种增强 | 鲁棒性 |
from torchvision import transforms
train_transform = transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(0.4, 0.4, 0.4, 0.1),
transforms.RandomGrayscale(p=0.2),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
📺 推荐视频
| 内容 | 链接 |
|---|---|
| CS231n Lecture 1-8 | https://www.youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv |
| 3Blue1Brown 神经网络系列 | https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi |
| PyTorch CNN入门教程 | https://www.youtube.com/playlist?list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz |
| Andrej Karpathy “Neural Networks: Zero to Hero” | https://www.youtube.com/@AndrejKarpathy |
📚 推荐书籍
- Deep Learning (花书) - Goodfellow et al. ⭐
- 动手学深度学习 - Zhang et al. (d2l.ai) ⭐ 免费
- Deep Learning for Computer Vision - Rajalingappaa Shanmugamani
- Understanding Deep Learning - Simon J.D. Prince (2023)
🔗 视频链接速查
- CS231n 2017 B站翻译版: https://www.bilibili.com/video/BV1nJ411J7Fv
- CS231n 2025 B站: https://www.bilibili.com/video/BV1b1agz5ERC
- 李沐《动手学深度学习》B站: 搜索 “李沐 动手学深度学习”
- PyTorch官方教程: https://pytorch.org/tutorials/
建议先掌握经典CNN架构(ResNet/VGG),再学习ViT和现代架构
附录:深层补充
1. 反向传播的向量化推导
1.1 从单个神经元到全连接层
单个神经元: z = w T x + b z = w^T x + b z=wTx+b, a = σ ( z ) a = \sigma(z) a=σ(z)
∂
L
∂
w
=
∂
L
∂
a
⋅
σ
′
(
z
)
⋅
x
\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \sigma'(z) \cdot x
∂w∂L=∂a∂L⋅σ′(z)⋅x
∂
L
∂
x
=
∂
L
∂
a
⋅
σ
′
(
z
)
⋅
w
\frac{\partial L}{\partial x} = \frac{\partial L}{\partial a} \cdot \sigma'(z) \cdot w
∂x∂L=∂a∂L⋅σ′(z)⋅w(误差前传)
全连接层(矩阵形式):
z
=
W
a
(
l
−
1
)
+
b
,
a
(
l
)
=
f
(
z
)
z = W a^{(l-1)} + b, \quad a^{(l)} = f(z)
z=Wa(l−1)+b,a(l)=f(z)
∂ L ∂ W ⏟ m × n = δ ( l ) ⏟ m × 1 ⋅ a ( l − 1 ) T ⏟ 1 × n \underbrace{\frac{\partial L}{\partial W}}_{m \times n} = \underbrace{\delta^{(l)}}_{m \times 1} \cdot \underbrace{a^{(l-1)T}}_{1 \times n} m×n ∂W∂L=m×1 δ(l)⋅1×n a(l−1)T
δ ( l − 1 ) ⏟ n × 1 = W T ⏟ n × m ⋅ δ ( l ) ⏟ m × 1 ⊙ f ′ ( z ( l − 1 ) ) ⏟ n × 1 \underbrace{\delta^{(l-1)}}_{n \times 1} = \underbrace{W^T}_{n \times m} \cdot \underbrace{\delta^{(l)}}_{m \times 1} \odot \underbrace{f'(z^{(l-1)})}_{n \times 1} n×1 δ(l−1)=n×m WT⋅m×1 δ(l)⊙n×1 f′(z(l−1))
其中 δ ( l ) = ∂ L ∂ z ( l ) \delta^{(l)} = \frac{\partial L}{\partial z^{(l)}} δ(l)=∂z(l)∂L 是层 l l l 的误差信号。
1.2 计算图中的梯度传递通用规则
| 操作 | 前向 | 反向梯度 |
|---|---|---|
| 加法 c = a + b c = a + b c=a+b | c c c | ∂ L / ∂ a = ∂ L / ∂ c \partial L/\partial a = \partial L/\partial c ∂L/∂a=∂L/∂c, 同 b b b |
| 乘法 c = a ⋅ b c = a \cdot b c=a⋅b | c c c | ∂ L / ∂ a = b ⋅ ∂ L / ∂ c \partial L/\partial a = b \cdot \partial L/\partial c ∂L/∂a=b⋅∂L/∂c |
| 矩阵乘 C = A B C = AB C=AB | C C C | ∂ L / ∂ A = ( ∂ L / ∂ C ) B T \partial L/\partial A = (\partial L/\partial C) B^T ∂L/∂A=(∂L/∂C)BT |
| ReLU a = max ( 0 , z ) a = \max(0, z) a=max(0,z) | a a a | ∂ L / ∂ z = 1 [ z > 0 ] ⊙ ∂ L / ∂ a \partial L/\partial z = \mathbb{1}[z > 0] \odot \partial L/\partial a ∂L/∂z=1[z>0]⊙∂L/∂a |
| 分支 b = f ( a ) , c = g ( a ) b = f(a), c=g(a) b=f(a),c=g(a) | b , c b,c b,c | ∂ L / ∂ a = ∂ L / ∂ b + ∂ L / ∂ c \partial L/\partial a = \partial L/\partial b + \partial L/\partial c ∂L/∂a=∂L/∂b+∂L/∂c |
1.3 CNN的反向传播
卷积层 Z = X ∗ W Z = X * W Z=X∗W:
- 对权重的梯度: ∂ L ∂ W = X ∗ ∂ L ∂ Z \frac{\partial L}{\partial W} = X * \frac{\partial L}{\partial Z} ∂W∂L=X∗∂Z∂L(输入与误差信号的卷积)
- 对输入的梯度: ∂ L ∂ X = ∂ L ∂ Z ∗ W rot \frac{\partial L}{\partial X} = \frac{\partial L}{\partial Z} * W^{\text{rot}} ∂X∂L=∂Z∂L∗Wrot(误差信号与翻转核的卷积)
2. CNN各层的数学定义
2.1 卷积层
互相关运算(实际实现):
Y
(
i
,
j
,
k
)
=
∑
c
=
0
C
i
n
−
1
∑
u
=
0
K
h
−
1
∑
v
=
0
K
w
−
1
X
(
i
+
u
,
j
+
v
,
c
)
⋅
W
k
(
u
,
v
,
c
)
+
b
k
Y(i,j,k) = \sum_{c=0}^{C_{in}-1} \sum_{u=0}^{K_h-1} \sum_{v=0}^{K_w-1} X(i+u, j+v, c) \cdot W_k(u,v,c) + b_k
Y(i,j,k)=c=0∑Cin−1u=0∑Kh−1v=0∑Kw−1X(i+u,j+v,c)⋅Wk(u,v,c)+bk
输出尺寸: H o u t = ⌊ ( H i n + 2 p − K h ) / s ⌋ + 1 H_{out} = \lfloor (H_{in} + 2p - K_h) / s \rfloor + 1 Hout=⌊(Hin+2p−Kh)/s⌋+1
参数量: K h × K w × C i n × C o u t + C o u t K_h \times K_w \times C_{in} \times C_{out} + C_{out} Kh×Kw×Cin×Cout+Cout(权重+偏置)
计算量(FLOPs): K h × K w × C i n × C o u t × H o u t × W o u t × 2 K_h \times K_w \times C_{in} \times C_{out} \times H_{out} \times W_{out} \times 2 Kh×Kw×Cin×Cout×Hout×Wout×2(乘加算2次FLOP)
2.2 池化层的反向传播
最大池化(Max Pooling):前向时记录最大值位置(switch变量),反向时梯度传到最大值位置,其他位置为0。
∂ L ∂ x i j = { ∂ L ∂ y m a x ( i , j ) = max pos 0 otherwise \frac{\partial L}{\partial x_{ij}} = \begin{cases} \frac{\partial L}{\partial y_{max}} & (i,j) = \text{max pos} \\ 0 & \text{otherwise} \end{cases} ∂xij∂L={∂ymax∂L0(i,j)=max posotherwise
平均池化(Average Pooling):梯度均匀分配到池化窗口中每个元素。
∂ L ∂ x i j = 1 K h × K w ⋅ ∂ L ∂ y \frac{\partial L}{\partial x_{ij}} = \frac{1}{K_h \times K_w} \cdot \frac{\partial L}{\partial y} ∂xij∂L=Kh×Kw1⋅∂y∂L
2.3 全连接层
y = W x + b y = Wx + b y=Wx+b
∂
L
∂
W
=
∂
L
∂
y
⋅
x
T
\frac{\partial L}{\partial W} = \frac{\partial L}{\partial y} \cdot x^T
∂W∂L=∂y∂L⋅xT
∂
L
∂
x
=
W
T
⋅
∂
L
∂
y
\frac{\partial L}{\partial x} = W^T \cdot \frac{\partial L}{\partial y}
∂x∂L=WT⋅∂y∂L
3. Batch Normalization的完整数学
3.1 训练时的batch统计
对于一个batch B = { x 1 , . . . , x m } B = \{x_1, ..., x_m\} B={x1,...,xm}:
Step 1: 计算batch均值和方差
μ
B
=
1
m
∑
i
=
1
m
x
i
,
σ
B
2
=
1
m
∑
i
=
1
m
(
x
i
−
μ
B
)
2
\mu_B = \frac{1}{m} \sum_{i=1}^m x_i, \quad \sigma_B^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_B)^2
μB=m1i=1∑mxi,σB2=m1i=1∑m(xi−μB)2
Step 2: 标准化
x
^
i
=
x
i
−
μ
B
σ
B
2
+
ϵ
\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}
x^i=σB2+ϵxi−μB
Step 3: 缩放平移
y
i
=
γ
x
^
i
+
β
y_i = \gamma \hat{x}_i + \beta
yi=γx^i+β
其中 γ , β \gamma, \beta γ,β 是可学习参数,恢复表达能力。
3.2 推理时的移动平均
训练时维护全局移动平均:
μ
running
=
(
1
−
α
)
⋅
μ
running
+
α
⋅
μ
B
\mu_{\text{running}} = (1 - \alpha) \cdot \mu_{\text{running}} + \alpha \cdot \mu_B
μrunning=(1−α)⋅μrunning+α⋅μB
σ
running
2
=
(
1
−
α
)
⋅
σ
running
2
+
α
⋅
σ
B
2
\sigma_{\text{running}}^2 = (1 - \alpha) \cdot \sigma_{\text{running}}^2 + \alpha \cdot \sigma_B^2
σrunning2=(1−α)⋅σrunning2+α⋅σB2
推理时固定使用
μ
running
\mu_{\text{running}}
μrunning 和
σ
running
\sigma_{\text{running}}
σrunning:
y
=
γ
⋅
x
−
μ
running
σ
running
2
+
ϵ
+
β
y = \gamma \cdot \frac{x - \mu_{\text{running}}}{\sqrt{\sigma_{\text{running}}^2 + \epsilon}} + \beta
y=γ⋅σrunning2+ϵx−μrunning+β
PyTorch默认 α = 0.1 \alpha = 0.1 α=0.1(momentum参数)。
3.3 BN的反向传播推导
定义 ∂ L ∂ y i \frac{\partial L}{\partial y_i} ∂yi∂L 已知。需要计算 ∂ L ∂ x i \frac{\partial L}{\partial x_i} ∂xi∂L, ∂ L ∂ γ \frac{\partial L}{\partial \gamma} ∂γ∂L, ∂ L ∂ β \frac{\partial L}{\partial \beta} ∂β∂L。
对 β \beta β 梯度: ∂ L ∂ β = ∑ i ∂ L ∂ y i \frac{\partial L}{\partial \beta} = \sum_i \frac{\partial L}{\partial y_i} ∂β∂L=∑i∂yi∂L
对 γ \gamma γ 梯度: ∂ L ∂ γ = ∑ i ∂ L ∂ y i ⋅ x ^ i \frac{\partial L}{\partial \gamma} = \sum_i \frac{\partial L}{\partial y_i} \cdot \hat{x}_i ∂γ∂L=∑i∂yi∂L⋅x^i
对
x
i
x_i
xi 梯度(通过链式法则经过
μ
B
,
σ
B
2
,
x
^
i
\mu_B, \sigma_B^2, \hat{x}_i
μB,σB2,x^i):
∂
L
∂
x
i
=
1
m
⋅
σ
B
2
+
ϵ
[
m
⋅
∂
L
∂
x
^
i
−
∑
j
∂
L
∂
x
^
j
−
x
^
i
∑
j
∂
L
∂
x
^
j
⋅
x
^
j
]
\frac{\partial L}{\partial x_i} = \frac{1}{m \cdot \sqrt{\sigma_B^2 + \epsilon}} \left[ m \cdot \frac{\partial L}{\partial \hat{x}_i} - \sum_j \frac{\partial L}{\partial \hat{x}_j} - \hat{x}_i \sum_j \frac{\partial L}{\partial \hat{x}_j} \cdot \hat{x}_j \right]
∂xi∂L=m⋅σB2+ϵ1[m⋅∂x^i∂L−j∑∂x^j∂L−x^ij∑∂x^j∂L⋅x^j]
其中 ∂ L ∂ x ^ i = γ ⋅ ∂ L ∂ y i \frac{\partial L}{\partial \hat{x}_i} = \gamma \cdot \frac{\partial L}{\partial y_i} ∂x^i∂L=γ⋅∂yi∂L。
3.4 BN为什么有效
原始论文观点:BN缓解内部协变量偏移(Internal Covariate Shift)。
后续研究的新观点(Santurkar et al., 2018):
- BN的主要作用不是缓解ICS,而是让损失景观更平滑(Lipschitz常数更小)
- 平滑的损失表面使梯度下降更稳定,允许更大学习率
4. 优化器演化详情
4.1 数学更新公式对比
| 优化器 | 更新公式 | 核心思想 |
|---|---|---|
| SGD | θ t + 1 = θ t − η g t \theta_{t+1} = \theta_t - \eta g_t θt+1=θt−ηgt | 基础梯度下降 |
| Momentum | v t + 1 = γ v t + η g t v_{t+1} = \gamma v_t + \eta g_t vt+1=γvt+ηgt, θ t + 1 = θ t − v t + 1 \theta_{t+1} = \theta_t - v_{t+1} θt+1=θt−vt+1 | 累积梯度动量,加速收敛 |
| NAG | v t + 1 = γ v t + η ∇ f ( θ t − γ v t ) v_{t+1} = \gamma v_t + \eta \nabla f(\theta_t - \gamma v_t) vt+1=γvt+η∇f(θt−γvt), θ t + 1 = θ t − v t + 1 \theta_{t+1} = \theta_t - v_{t+1} θt+1=θt−vt+1 | 前瞻梯度,更精准 |
| AdaGrad | G t = G t − 1 + g t 2 G_t = G_{t-1} + g_t^2 Gt=Gt−1+gt2, θ t + 1 = θ t − η G t + ϵ g t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} g_t θt+1=θt−Gt+ϵηgt | 自适应学习率,稀疏导特征更新大 |
| RMSProp | E [ g 2 ] t = β E [ g 2 ] t − 1 + ( 1 − β ) g t 2 E[g^2]_t = \beta E[g^2]_{t-1} + (1-\beta)g_t^2 E[g2]t=βE[g2]t−1+(1−β)gt2, θ t + 1 = θ t − η E [ g 2 ] t + ϵ g t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t θt+1=θt−E[g2]t+ϵηgt | 解决AdaGrad学习率单调衰减问题 |
| Adam | m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t mt=β1mt−1+(1−β1)gt, v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 vt=β2vt−1+(1−β2)gt2, 偏置校正后更新 | 动量+自适应LR |
| AdamW | 在Adam基础上将权重衰减从梯度中分离: θ t + 1 = θ t − η ( m ^ t / ( v ^ t + ϵ ) + λ θ t ) \theta_{t+1} = \theta_t - \eta(\hat{m}_t/(\sqrt{\hat{v}_t}+\epsilon) + \lambda \theta_t) θt+1=θt−η(m^t/(v^t+ϵ)+λθt) | 解耦权重衰减 |
4.2 AdamW vs Adam
Adam的权重衰减(不正确的实现):
θ
t
+
1
=
θ
t
−
η
(
m
^
t
v
^
t
+
ϵ
+
λ
θ
t
)
\theta_{t+1} = \theta_t - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_t \right)
θt+1=θt−η(v^t+ϵm^t+λθt)
其中
λ
θ
t
\lambda \theta_t
λθt 作用在自适应学习率分母外面。
AdamW的正确解耦(Loshchilov & Hutter, 2017):
θ
t
+
1
=
θ
t
−
η
(
m
^
t
v
^
t
+
ϵ
+
η
λ
θ
t
)
\theta_{t+1} = \theta_t - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \eta \lambda \theta_t \right)
θt+1=θt−η(v^t+ϵm^t+ηλθt)
效果:AdamW在各种任务上泛化性显著优于Adam。
5. 初始化方法详解
5.1 Xavier/Glorot初始化
目标:前向传播中每层输出的方差保持不变,反向传播中每层梯度方差保持不变。
假设:激活函数近似线性(tanh区域),输入/权重独立同分布,均值为0。
Var ( y i ) = n ⋅ Var ( w i j ) ⋅ Var ( x j ) \text{Var}(y_i) = n \cdot \text{Var}(w_{ij}) \cdot \text{Var}(x_j) Var(yi)=n⋅Var(wij)⋅Var(xj)
令
Var
(
y
)
=
Var
(
x
)
\text{Var}(y) = \text{Var}(x)
Var(y)=Var(x):
n
⋅
Var
(
w
)
=
1
⇒
Var
(
w
)
=
1
n
in
n \cdot \text{Var}(w) = 1 \Rightarrow \text{Var}(w) = \frac{1}{n_{\text{in}}}
n⋅Var(w)=1⇒Var(w)=nin1
反向传播同样要求 Var ( w ) = 1 n out \text{Var}(w) = \frac{1}{n_{\text{out}}} Var(w)=nout1。取调和平均:
Var ( w ) = 2 n in + n out \text{Var}(w) = \frac{2}{n_{\text{in}} + n_{\text{out}}} Var(w)=nin+nout2
实现: w ∼ U [ − 6 n in + n out , 6 n in + n out ] w \sim \mathcal{U}\left[-\sqrt{\frac{6}{n_{\text{in}}+n_{\text{out}}}}, \; \sqrt{\frac{6}{n_{\text{in}}+n_{\text{out}}}}\right] w∼U[−nin+nout6,nin+nout6]
适用:tanh, sigmoid
不适用:ReLU(因为ReLU非对称、非近似线性)
5.2 Kaiming He初始化
针对ReLU的初始化(He et al., 2015)。
ReLU特性: E [ x i 2 ] = 1 2 Var ( x ) \mathbb{E}[x_i^2] = \frac{1}{2} \text{Var}(x) E[xi2]=21Var(x)(负半轴输出为0)。
经过ReLU后的方差:
Var
(
y
)
=
n
2
⋅
Var
(
w
)
⋅
Var
(
x
)
\text{Var}(y) = \frac{n}{2} \cdot \text{Var}(w) \cdot \text{Var}(x)
Var(y)=2n⋅Var(w)⋅Var(x)
令
Var
(
y
)
=
Var
(
x
)
\text{Var}(y) = \text{Var}(x)
Var(y)=Var(x):
Var
(
w
)
=
2
n
in
\text{Var}(w) = \frac{2}{n_{\text{in}}}
Var(w)=nin2
实现: w ∼ N ( 0 , 2 / n in ) w \sim \mathcal{N}(0, \sqrt{2/n_{\text{in}}}) w∼N(0,2/nin) 或 U [ − 6 / n in , 6 / n in ] \mathcal{U}[-\sqrt{6/n_{\text{in}}}, \sqrt{6/n_{\text{in}}}] U[−6/nin,6/nin]
为什么初始化如此关键:
- 初始化过大 → 梯度爆炸 → 训练不稳定
- 初始化过小 → 梯度消失 → 深层网络无法学习
- 好初始化让网络在训练初期就处于有利的优化位置
- 对深层网络(>50层)尤其重要
6. 正则化技术细节
6.1 L1/L2正则化的贝叶斯解释
L2正则化(权重衰减):高斯先验下的MAP估计
P ( w ∣ D ) ∝ P ( D ∣ w ) ⋅ P ( w ) P(w|D) \propto P(D|w) \cdot P(w) P(w∣D)∝P(D∣w)⋅P(w)
取高斯先验 P ( w ) = ∏ j 1 2 π σ 0 2 exp ( − w j 2 2 σ 0 2 ) P(w) = \prod_j \frac{1}{\sqrt{2\pi\sigma_0^2}} \exp\left(-\frac{w_j^2}{2\sigma_0^2}\right) P(w)=∏j2πσ021exp(−2σ02wj2)
取负对数:
−
log
P
(
w
∣
D
)
=
−
log
P
(
D
∣
w
)
+
1
2
σ
0
2
∑
j
w
j
2
+
const
-\log P(w|D) = -\log P(D|w) + \frac{1}{2\sigma_0^2} \sum_j w_j^2 + \text{const}
−logP(w∣D)=−logP(D∣w)+2σ021j∑wj2+const
这就是MSE + L2惩罚。 λ = 1 / 2 σ 0 2 \lambda = 1/2\sigma_0^2 λ=1/2σ02 控制先验的强度。
L1正则化(Lasso):Laplace先验下的MAP估计
P ( w ) = ∏ j 1 2 b exp ( − ∣ w j ∣ b ) P(w) = \prod_j \frac{1}{2b} \exp\left(-\frac{|w_j|}{b}\right) P(w)=j∏2b1exp(−b∣wj∣)
取负对数得L1惩罚: 1 b ∑ j ∣ w j ∣ \frac{1}{b} \sum_j |w_j| b1∑j∣wj∣。Laplace分布在0处有尖峰,诱导稀疏解。
6.2 Dropout的数学原理
训练时:每个神经元以概率
p
p
p 保留(1-p 丢弃 = 输出设为0):
r
j
(
l
)
∼
Bernoulli
(
p
)
,
y
~
(
l
)
=
r
(
l
)
⊙
y
(
l
)
r_j^{(l)} \sim \text{Bernoulli}(p), \quad \tilde{y}^{(l)} = r^{(l)} \odot y^{(l)}
rj(l)∼Bernoulli(p),y~(l)=r(l)⊙y(l)
推理时:全部神经元激活,但输出乘以
p
p
p 保持期望一致:
y
test
=
p
⋅
W
test
y_{\text{test}} = p \cdot W_{\text{test}}
ytest=p⋅Wtest
或者在训练时将输出除以
p
p
p(Inverted Dropout,更常用):
y
~
(
l
)
=
r
(
l
)
p
⊙
y
(
l
)
\tilde{y}^{(l)} = \frac{r^{(l)}}{p} \odot y^{(l)}
y~(l)=pr(l)⊙y(l)
这样推理时无需任何缩放操作。
为什么Dropout有效:
- 集成学习:每次迭代训练不同的子网络,推理时是这些子网络的集合
- 防止共适应:神经元不能过度依赖其他特定神经元的存在
- 正则化效果:相当于在权重上施加L2正则(但各维度的正则化强度不同)
6.3 Label Smoothing的公式推导
标准交叉熵: L C E = − ∑ k = 1 K q ( k ) log p ( k ) \mathcal{L}_{CE} = -\sum_{k=1}^K q(k) \log p(k) LCE=−∑k=1Kq(k)logp(k),其中 q ( k ) = 1 [ k = y ] q(k) = \mathbb{1}[k = y] q(k)=1[k=y] 是one-hot标签。
Label Smoothing(Szegedy et al., 2016):
q
′
(
k
)
=
(
1
−
ϵ
)
⋅
1
[
k
=
y
]
+
ϵ
K
q'(k) = (1 - \epsilon) \cdot \mathbb{1}[k = y] + \frac{\epsilon}{K}
q′(k)=(1−ϵ)⋅1[k=y]+Kϵ
其中 ϵ \epsilon ϵ 是平滑参数(通常0.1), K K K 是类别数。
等价形式:
L
L
S
=
(
1
−
ϵ
)
⋅
L
C
E
+
ϵ
⋅
L
K
L
(
u
∥
p
)
\mathcal{L}_{LS} = (1-\epsilon) \cdot \mathcal{L}_{CE} + \epsilon \cdot \mathcal{L}_{KL}(u\|p)
LLS=(1−ϵ)⋅LCE+ϵ⋅LKL(u∥p)
其中 u ( k ) = 1 / K u(k) = 1/K u(k)=1/K 是均匀分布, L K L \mathcal{L}_{KL} LKL 是KL散度。
效果:
- 防止模型对训练标签过于自信(over-confidence)
- 提高泛化能力
- 对噪声标签更鲁棒
- 提高模型的校准度(calibration——模型输出的概率与实际准确率更匹配)
更多推荐


所有评论(0)