Theme
Week 7:Optimization of CNNs 学习笔记
0. 本章核心目标:如何让 CNN “训得动、训得深、泛化好”
本章不是单纯讲 CNN 结构,而是在回答一个核心问题:
给定一个深层 CNN,如何保证它能够被有效优化,并且在新数据上表现良好?
可以把本章看成一棵“优化进化树”:
text
神经网络难训练
│
├── 激活函数问题:Sigmoid 饱和、梯度消失
│ ├── ReLU / Leaky ReLU / ELU / Maxout
│ └── Batch Normalization
│
├── 架构问题:CNN 越深越难优化
│ ├── AlexNet:CNN 打败传统视觉特征
│ ├── VGG:用小卷积核堆深度
│ └── ResNet:用残差连接解决 degradation problem
│
├── 优化器问题:SGD 慢、抖、被 saddle point 卡住、梯度噪声大
│ ├── Momentum
│ ├── AdaGrad
│ ├── RMSProp
│ └── Adam
│
├── 泛化问题:训练误差低不等于测试误差低
│ ├── Early Stopping
│ ├── Ensembles
│ ├── L1/L2/Elastic Net
│ ├── Dropout
│ └── Data Augmentation
│
└── 数据不足问题
└── Transfer Learning / Fine-tuning重要程度标注: ★★★★★ 必考核心:BatchNorm, ResNet, Momentum/AdaGrad/RMSProp/Adam, Dropout, Data Augmentation, Transfer Learning。 ★★★★☆ 高概率考:Sigmoid 饱和、VGG 小卷积核、degradation problem、SGD 三大问题。 ★★★☆☆ 理解即可:AlexNet/ZFNet/SENet 作为历史脉络,AutoAugment,ensemble。
1. 从单隐藏层网络到深层 CNN:为什么优化是核心问题
1.1 单隐藏层网络
课件先回顾单隐藏层网络:
其中:
- :输入向量,维度为 。
- :第一层权重矩阵,把 维输入映射到 个隐藏单元。
- :隐藏层偏置。
- :隐藏层表示。
- :逐元素激活函数。
- :输出层权重向量。
- :输出层偏置。
- :最终输出 scalar。
逻辑直觉: 线性变换 本身无法表示复杂非线性边界,必须引入 。XOR 例子说明了单层线性分类器无法处理非线性可分问题,而隐藏层通过组合多个线性边界可以表达 XOR 这种模式。
2. 激活函数演进:从 Sigmoid 到非饱和激活
2.1 Sigmoid
导数为:
符号解释:
- :神经元输入 pre-activation。
- :激活输出,范围为 。
- :反向传播时局部梯度。
Sigmoid 的问题:
当 时:
当 时:
所以 Sigmoid 在两端饱和区域梯度接近 0。反向传播时:
如果 ,那么 。这就是 saturated neurons “kill gradients”。
第二个问题是 Sigmoid 输出非零中心:
输出总为正,会导致后续层的梯度方向高度相关,优化路径 zig-zag,降低收敛效率。
重要程度:★★★★★
2.2 tanh
tanh 输出范围为:
它比 Sigmoid 好的一点是 zero-centered,但仍然存在饱和区,因此仍可能梯度消失。
重要程度:★★★☆☆
2.3 ReLU
导数:
ReLU 的核心优势:正区间不饱和,梯度为 1,因此能缓解深层网络中的梯度消失。
问题: 如果一个神经元长期处于 ,梯度为 0,可能变成 dead ReLU。
重要程度:★★★★★
2.4 Leaky ReLU
课件公式:
更一般写法:
其中 是负半轴斜率,例如 或 。
优势:即使 ,也有非零梯度:
因此缓解 dead ReLU。
重要程度:★★★★☆
2.5 ELU
课件公式:
其中:
- :控制负半轴饱和值。
- :pre-activation。
ELU 的直觉: 正半轴像 ReLU,负半轴平滑下降并趋向 。相比 ReLU,它可以产生负输出,使激活更接近 zero-centered。
重要程度:★★★☆☆
2.6 Maxout
课件公式:
其中:
- :两组可学习线性权重。
- :偏置。
- :输入向量。
Maxout 的直觉: 它不是固定形状的激活函数,而是让模型学习多个线性函数,并取最大值。它表达能力强,但参数量更大。
重要程度:★★★☆☆
3. Batch Normalization:从“避免饱和”到“稳定训练分布”
3.1 为什么需要 Normalization?
Sigmoid 或 tanh 的饱和来自输入过大或过小。课件提出解决思路:
避免 feature values too large or too small。
这就引出 normalization。
重要程度:★★★★★
3.2 Batch Normalization 公式
输入:
其中:
- :mini-batch size。
- :feature/channel 维度。
- :第 个样本第 个通道/特征的值。
对每个 feature/channel ,计算 batch mean:
计算 batch variance:
归一化:
其中:
- :第 个 feature/channel 在 batch 上的均值。
- :第 个 feature/channel 在 batch 上的方差。
- :小常数,防止除以 0。
- :归一化后的值。
但是强制 zero mean 和 unit variance 可能过于严格,因此引入可学习 scale 和 shift:
其中:
- :第 个 feature 的可学习缩放参数。
- :第 个 feature 的可学习平移参数。
- :BatchNorm 输出。
如果模型希望恢复 identity mapping,可以学习:
则:
忽略 时正好恢复原输入。
重要程度:★★★★★
3.3 BatchNorm 的训练时与测试时差异
训练时:
来自当前 mini-batch。
测试时不能依赖 mini-batch,因为单个测试样本或者不同 batch 会造成输出不稳定。因此测试时使用训练过程中累积的 running mean 和 running variance:
测试时 BatchNorm 变成线性算子:
可重写为:
所以测试时 BN 可以 fuse 到前一层 FC 或 Conv 中。
重要程度:★★★★★
3.4 BatchNorm 插入位置
课件给出的常见位置:
text
FC / Conv
↓
BatchNorm
↓
Nonlinearity即通常放在 fully connected 或 convolution layer 之后,activation function 之前。
重要程度:★★★★☆
4. CNN 架构演进:AlexNet → VGG → ResNet
4.1 CNN 基本卷积层
输入图像:
一个卷积核:
对一个局部 patch 做点积:
其中:
- :卷积核参数,展开后维度为 。
- :输入图像中一个 patch。
- :bias。
- :一个空间位置的输出激活。
如果有 6 个 filters,则输出 6 张 activation maps。对于 输入,不加 padding 且 stride = 1 时,空间尺寸变为:
所以输出为:
重要程度:★★★★★
4.2 卷积输出尺寸公式
一般情况下,输入尺寸为 ,卷积核大小为 ,padding 为 ,stride 为 ,输出高度为:
输出宽度为:
若输出通道数为 ,则输出 tensor 为:
重要程度:★★★★★
4.3 AlexNet:第一代 CNN 突破
AlexNet 架构:
text
CONV1
MAX POOL1
NORM1
CONV2
MAX POOL2
NORM2
CONV3
CONV4
CONV5
MAX POOL3
FC6
FC7
FC8意义: AlexNet 是 ILSVRC 第一个 CNN-based winner,将 ImageNet top-5 error 从传统方法显著降低,标志着深度 CNN 在大规模视觉识别中的突破。
局限:
- 使用较大卷积核,例如 。
- 网络深度有限。
- FC 层参数量大。
- 训练依赖工程技巧。
重要程度:★★★★☆
4.4 VGG:用小卷积核堆深度
VGG 的核心设计是大量使用 convolution。
课件问题:为什么用小卷积核?
三个 stride 1 conv 的 effective receptive field 等价于一个 conv。
推导:
第一层 看到 个像素范围。 第二层每个位置又基于第一层 范围,因此感受野增加 。 第三层再增加 。
所以:
一般地, 个 stride 1 convolution 的 effective receptive field 为:
当 :
参数量比较:
一个 conv 参数量约为:
三个 conv 参数量约为:
所以小卷积堆叠既减少参数,又增加非线性层数。
重要程度:★★★★★
4.5 Plain deeper network 的问题:Degradation Problem
课件展示:56-layer plain network 比 20-layer plain network 在 training error 和 test error 上都更差。
这不是 overfitting,因为 overfitting 应该表现为:
text
training error 低,但 test error 高而 degradation problem 是:
text
training error 也更高,test error 也更高所以问题不是泛化,而是优化失败:深层 plain network 理论表达能力更强,但 SGD 无法有效找到好解。
重要程度:★★★★★
4.6 ResNet:从直接拟合 H(x) 到拟合 residual F(x)
Plain layer 试图直接学习:
ResNet 改成学习 residual mapping:
所以:
Residual block 输出:
其中:
- :block 输入。
- :由若干卷积层学习到的 residual function。
- :block 输出。
- 到输出的路径是 identity shortcut。
关键直觉: 如果最优映射接近 identity,即:
plain network 需要学习一个完整 identity function。 ResNet 只需要让:
于是:
学习 比学习复杂的 identity mapping 容易得多。
重要程度:★★★★★
4.7 ResNet 架构特征
课件总结:
text
1. Stack residual blocks
2. 每个 residual block 有两个 3x3 conv layers
3. 周期性 double filters,并用 stride 2 downsample spatial size
4. 开头有 stem conv,例如 7x7 conv, stride 2
5. 末尾没有大 FC layers,只用 global average pooling + FC 1000Global Average Pooling 的意义:
若最后 feature map 为:
则对每个 channel 做空间平均:
输出变成:
优点:
- 减少参数。
- 降低过拟合。
- 理论上支持 variable-size input。
- 保留 channel-level semantic representation。
重要程度:★★★★★
5. 优化器演进:SGD → Momentum → AdaGrad → RMSProp → Adam
5.1 SGD 的三个问题
问题 1:Poor Conditioning
当 loss 在某个方向变化快,在另一个方向变化慢时,SGD 会:
text
steep direction 上来回震荡
flat direction 上进展缓慢课件说 loss function has high condition number:
其中:
- :Hessian matrix。
- :最大特征值,对应最陡方向曲率。
- :最小特征值,对应最平方向曲率。
- :condition number。
越大,优化越困难。
重要程度:★★★★★
问题 2:Local Minima / Saddle Point
如果:
SGD 没有更新方向,可能卡住。
在高维非凸优化中,saddle point 通常比 local minima 更常见。 Saddle point 的特点是某些方向曲率为正,某些方向曲率为负。
重要程度:★★★★☆
问题 3:Noisy Gradient
真实梯度是全数据梯度:
mini-batch SGD 使用:
其中:
- :mini-batch size。
- :第 步 mini-batch。
- :随机梯度估计。
因为 batch 是随机采样, 有噪声。
重要程度:★★★★★
5.2 SGD + Momentum
普通 SGD:
Momentum 引入 velocity:
其中:
- :第 步参数。
- :velocity。
- :momentum coefficient,也可理解为 friction,常用 或 。
- :learning rate。
- :当前梯度。
直觉:
text
当前更新方向 = 当前梯度 + 历史梯度方向的累积作用:
- 在 flat direction 上累积速度,加快前进。
- 在 steep direction 上来回震荡会互相抵消,减少 jitter。
- 通过惯性帮助越过小 local minima 或 saddle point。
重要程度:★★★★★
5.3 AdaGrad:per-parameter adaptive learning rate
AdaGrad 为每个参数维护历史梯度平方和:
更新:
其中:
- :当前梯度。
- :历史梯度平方和。
- :element-wise multiplication。
- :防止除以 0。
- :全局学习率。
直觉:
如果某一维梯度长期很大,则 很大,该维 effective learning rate 变小。 如果某一维梯度长期很小,则 小,该维 effective learning rate 相对较大。
因此:
text
steep directions 被 damped
flat directions 被 accelerated问题:
会单调增加,所以 step size 会逐渐衰减到 0。
重要程度:★★★★★
5.4 RMSProp:修正 AdaGrad 的学习率衰减问题
AdaGrad 用累计平方和,导致 learning rate 越来越小。 RMSProp 改成指数滑动平均:
更新:
其中:
- :decay rate,控制历史记忆长度。
- :recent squared gradients 的 moving average。
RMSProp 的核心改进:
text
不是记住所有历史梯度,而是更关注近期梯度规模。因此不会像 AdaGrad 那样 learning rate 无限衰减。
重要程度:★★★★★
5.5 Adam:Momentum + RMSProp + Bias Correction
Adam 同时维护一阶矩和二阶矩。
一阶矩,即 momentum:
二阶矩,即 RMSProp-style squared gradient average:
因为 ,初期估计偏小,需要 bias correction:
最终更新:
其中:
- :梯度一阶矩估计。
- :梯度二阶矩估计。
- :一阶矩 decay,常用 。
- :二阶矩 decay,常用 。
- :bias-corrected estimates。
- :learning rate,常用 或 。
- :数值稳定项。
Adam 的直觉:
text
Momentum 决定往哪里走;
RMSProp 决定每个参数走多大步;
Bias correction 修正训练初期 moment 估计偏小的问题。重要程度:★★★★★
5.6 优化器对比表
| 优化器 | 核心机制 | 解决什么问题 | 主要缺点 | 重要程度 |
|---|---|---|---|---|
| SGD | 沿负梯度方向更新 | 基础优化 | 慢、抖、受 condition number 影响大 | ★★★★★ |
| Momentum | 累积 velocity | 加速 flat direction,减少 jitter | 多一个 超参 | ★★★★★ |
| AdaGrad | 历史梯度平方缩放 | per-parameter learning rate | 学习率会衰减到 0 | ★★★★★ |
| RMSProp | 梯度平方滑动平均 | 修正 AdaGrad 衰减问题 | 仍需调 learning rate | ★★★★★ |
| Adam | Momentum + RMSProp + bias correction | 稳定、通用、收敛快 | 泛化有时不如 SGD+Momentum | ★★★★★ |
6. 从训练误差到泛化误差:Regularization
6.1 核心问题
优化器帮助降低 training loss,但真正关心的是:
或者说新数据上的误差。
泛化差距可以理解为:
Regularization 的目标是缩小这个 gap。
重要程度:★★★★★
6.2 Early Stopping
做法:
text
训练时监控 validation accuracy/loss;
当 validation performance 开始下降时停止;
或者保存 validation 最好的模型 snapshot。它本质上限制模型继续过拟合训练集。
重要程度:★★★★☆
6.3 Model Ensembles
训练多个独立模型:
测试时平均预测概率:
最终预测:
优点:通常提升性能。 缺点:训练和推理成本高。
重要程度:★★★☆☆
6.4 L2 Regularization / Weight Decay
在 loss 中加入参数惩罚:
其中:
梯度:
直觉:惩罚过大的权重,使模型更平滑,降低过拟合。
重要程度:★★★★★
6.5 L1 Regularization
其中:
L1 倾向产生 sparse weights,因为它会把某些参数推到 0。
重要程度:★★★★☆
6.6 Elastic Net
结合 L1 的稀疏性和 L2 的平滑性。
重要程度:★★★☆☆
7. Dropout:通过随机屏蔽训练隐式 ensemble
7.1 Dropout 训练阶段
训练时,对每个神经元采样一个 Bernoulli mask:
其中:
- :keep probability。
- :drop probability。
- 常见 drop probability 为 ,即 。
训练时输出:
其中:
- :原激活。
- :mask。
- :dropout 后激活。
直觉:
text
每次 forward pass 随机删除一部分神经元;
网络不能依赖某几个固定特征;
迫使模型学习 redundant representation;
防止 feature co-adaptation。重要程度:★★★★★
7.2 Dropout 的 Ensemble 解释
每一个 binary mask 都对应一个子网络。
如果一个 FC layer 有 4096 个 units,那么可能的 mask 数量为:
课件指出这是极其巨大的模型集合。因此 Dropout 可视作训练大量共享参数的子模型 ensemble。
重要程度:★★★★☆
7.3 Dropout 测试阶段
测试时所有 neurons 都启用。为了让测试时输出等于训练时输出的期望,需要缩放 activation。
训练时:
且:
所以:
测试时若所有神经元都保留,则需要:
这就是课件中的:
text
drop in train time
scale at test time现代实现中常用 inverted dropout:训练时直接除以 :
这样:
测试时不需要额外缩放。
重要程度:★★★★★
8. Regularization 的共同模式
课件总结了一个重要模式:
text
Training: Add randomness
Testing: Average out randomness例子:
| 方法 | 训练时随机性 | 测试时处理 |
|---|---|---|
| Dropout | 随机删除神经元 | 使用所有神经元并缩放 |
| BatchNorm | 使用随机 mini-batch statistics | 使用 running mean/variance |
| Data Augmentation | 随机变换输入图像 | 使用原图或固定 crops 平均 |
重要程度:★★★★★
9. Data Augmentation:从有限数据中制造不变性
9.1 基本思想
训练时对图像做随机变换,但 label 不变:
其中:
- :原图。
- :标签。
- :随机数据增强变换。
目标是让模型学习:
即对合理变换保持不变性。
重要程度:★★★★★
9.2 Horizontal Flip
适用于许多自然图像分类任务。 但不一定适用于所有任务,例如文字识别、医学影像左右方向敏感任务。
重要程度:★★★★☆
9.3 Random Crops and Scales
课件中 ResNet 训练策略:
text
1. Pick random L in [256, 480]
2. Resize training image so short side = L
3. Sample random 224 x 224 patch测试策略:
text
1. Resize image at 5 scales: {224, 256, 384, 480, 640}
2. For each size, use 10 crops:
4 corners + center, plus horizontal flips这等价于 test-time augmentation / multi-crop evaluation。
重要程度:★★★★★
9.4 Color Jitter
随机改变 brightness 和 contrast。
形式上可以理解为:
其中:
- :contrast factor。
- :brightness shift。
目标是让模型不依赖特定光照条件。
重要程度:★★★★☆
9.5 其他增强
课件列举:
text
translation
rotation
stretching
shearing
lens distortions关键原则:增强必须符合任务语义。 如果变换改变 label,就不能用。
重要程度:★★★★☆
9.6 AutoAugment
AutoAugment 的思想是自动搜索数据增强策略,而不是人工指定。
重要程度:★★★☆☆
10. Transfer Learning:CNN 训练不一定需要从零开始
10.1 问题背景
常见说法:
text
You need a lot of data if you want to train/use CNNs.更准确地说:
text
从零训练大型 CNN 需要大量数据;
但使用 pretrained CNN 做 transfer learning 时,小数据也可以训练有效模型。重要程度:★★★★★
10.2 Transfer Learning 基本流程
第一步:在 ImageNet 上预训练 CNN。
第二步:目标任务有 类时,把最后分类层替换为:
然后根据数据规模选择 freeze 或 fine-tune。
重要程度:★★★★★
10.3 小数据集策略
如果目标数据集小:
text
freeze convolutional backbone
reinitialize final classifier
train only final classifier数学表达:
预训练网络分成 feature extractor 和 classifier:
冻结:
只训练:
重要程度:★★★★★
10.4 大数据集策略
如果目标数据更多:
text
fine-tune more layers
use smaller learning rate课件建议 fine-tuning learning rate 可以从原始 LR 的 开始:
原因:预训练权重已有较好表示,不希望大步更新破坏它们。
重要程度:★★★★★
10.5 Transfer Learning 决策表
| 数据量 | 与 ImageNet 相似度 | 推荐策略 | 重要程度 |
|---|---|---|---|
| 很少 | 很相似 | 顶层 linear classifier | ★★★★★ |
| 很少 | 很不同 | 比较困难,可尝试不同层特征 | ★★★★☆ |
| 较多 | 很相似 | fine-tune 后几层 | ★★★★★ |
| 较多 | 很不同 | fine-tune 更多层 | ★★★★★ |
11. 本章方法论演进总表
| 阶段 | 旧方法 | 旧方法问题 | 新方法 | 新方法如何解决 |
|---|---|---|---|---|
| 激活函数 | Sigmoid/tanh | 饱和导致梯度消失 | ReLU/Leaky ReLU/ELU | 非饱和正半轴保留梯度 |
| 特征分布 | 无归一化 | 输入过大/过小导致饱和,训练不稳定 | BatchNorm | 标准化 batch feature,并学习 scale/shift |
| CNN 架构 | AlexNet | 深度有限,大卷积核,FC 参数多 | VGG | 小卷积核堆叠,提高深度和非线性 |
| 深层网络 | Plain deep CNN | depth 增加导致 degradation | ResNet | 学 residual |
| 优化器 | SGD | 抖动、慢、受曲率影响 | Momentum | 累积速度,减少震荡 |
| 自适应学习率 | SGD/Momentum | 每个参数学习率相同 | AdaGrad/RMSProp | 按维度缩放梯度 |
| 通用优化器 | RMSProp | 无一阶动量或初期偏差 | Adam | 一阶矩+二阶矩+bias correction |
| 泛化 | 只优化 training loss | 过拟合 | Regularization | 缩小 train-test gap |
| 数据量 | 从零训练 | 需要大量数据 | Transfer Learning | 复用 pretrained representation |
12. 期末复习重点排序
最高优先级:
- BatchNorm 的训练/测试公式、 的意义、为什么可以恢复 identity。
- ResNet 的 residual mapping:,为什么解决 degradation problem。
- SGD 的三大问题:poor conditioning, saddle point, noisy gradients。
- Momentum、AdaGrad、RMSProp、Adam 的公式和直觉。
- Dropout 训练/测试行为,以及为什么测试时要 scale。
- Data Augmentation 的训练/测试模式。
- Transfer Learning 的 freeze/fine-tune 策略。
次高优先级:
- VGG 为什么用 小卷积核。
- ReLU 相比 Sigmoid 为什么更适合深层网络。
- Global Average Pooling 为什么减少参数并支持 variable input。
- Early Stopping 和 Ensembles 的作用。
理解即可:
- AlexNet/ZFNet/GoogLeNet/SENet 在 ILSVRC 历史中的位置。
- AutoAugment。
- Maxout/ELU 的具体细节。
13. 一句话总括
本章的核心逻辑是:深层 CNN 的成功不是单靠卷积,而是靠一整套优化与泛化机制共同成立:非饱和激活让梯度能传,BatchNorm 稳定分布,ResNet 让深度可训练,现代优化器让参数更新更稳更快,正则化和数据增强控制泛化误差,迁移学习降低数据需求。