Skip to content

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 1000

Global 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★★★★★
AdamMomentum + 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 CNNdepth 增加导致 degradationResNet学 residual
优化器SGD抖动、慢、受曲率影响Momentum累积速度,减少震荡
自适应学习率SGD/Momentum每个参数学习率相同AdaGrad/RMSProp按维度缩放梯度
通用优化器RMSProp无一阶动量或初期偏差Adam一阶矩+二阶矩+bias correction
泛化只优化 training loss过拟合Regularization缩小 train-test gap
数据量从零训练需要大量数据Transfer Learning复用 pretrained representation

12. 期末复习重点排序

最高优先级:

  1. BatchNorm 的训练/测试公式、 的意义、为什么可以恢复 identity。
  2. ResNet 的 residual mapping:,为什么解决 degradation problem。
  3. SGD 的三大问题:poor conditioning, saddle point, noisy gradients。
  4. Momentum、AdaGrad、RMSProp、Adam 的公式和直觉。
  5. Dropout 训练/测试行为,以及为什么测试时要 scale。
  6. Data Augmentation 的训练/测试模式。
  7. Transfer Learning 的 freeze/fine-tune 策略。

次高优先级:

  1. VGG 为什么用 小卷积核。
  2. ReLU 相比 Sigmoid 为什么更适合深层网络。
  3. Global Average Pooling 为什么减少参数并支持 variable input。
  4. Early Stopping 和 Ensembles 的作用。

理解即可:

  1. AlexNet/ZFNet/GoogLeNet/SENet 在 ILSVRC 历史中的位置。
  2. AutoAugment。
  3. Maxout/ELU 的具体细节。

13. 一句话总括

本章的核心逻辑是:深层 CNN 的成功不是单靠卷积,而是靠一整套优化与泛化机制共同成立:非饱和激活让梯度能传,BatchNorm 稳定分布,ResNet 让深度可训练,现代优化器让参数更新更稳更快,正则化和数据增强控制泛化误差,迁移学习降低数据需求。

Static academic notes built with VitePress and KaTeX.