Week 7:Optimization of CNNs 学习笔记

0. 本章核心目标:如何让 CNN “训得动、训得深、泛化好”

本章不是单纯讲 CNN 结构,而是在回答一个核心问题:

给定一个深层 CNN,如何保证它能够被有效优化,并且在新数据上表现良好?

可以把本章看成一棵“优化进化树”:

神经网络难训练

├── 激活函数问题: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。

逻辑直觉: 线性变换 本身无法表示复杂非线性边界,必须引入 。X O R 例子说明了单层线性分类器无法处理非线性可分问题,而隐藏层通过组合多个线性边界可以表达 X O R 这种模式。

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 ReL U

导数:

ReL U 的核心优势:正区间不饱和,梯度为 1,因此能缓解深层网络中的梯度消失。

问题: 如果一个神经元长期处于 ,梯度为 0,可能变成 dead ReL U。

重要程度:★★★★★

2.4 Leaky ReL U

课件公式:

更一般写法:

其中 是负半轴斜率,例如

优势:即使 ,也有非零梯度:

因此缓解 dead ReL U。

重要程度:★★★★☆

2.5 E L U

课件公式:

其中:

  • :控制负半轴饱和值。
  • :pre-activation。

E L U 的直觉: 正半轴像 ReL U,负半轴平滑下降并趋向 。相比 ReL U,它可以产生负输出,使激活更接近 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 变成线性算子:

可重写为:

所以测试时 B N 可以 fuse 到前一层 F C 或 Conv 中。

重要程度:★★★★★

3.4 BatchNorm 插入位置

课件给出的常见位置:

F C / Conv

BatchNorm

Nonlinearity

即通常放在 fully connected 或 convolution layer 之后,activation function 之前。

重要程度:★★★★☆

4. C N N 架构演进:AlexNet → V G G → ResNet

4.1 C N N 基本卷积层

输入图像:

一个卷积核:

对一个局部 patch 做点积:

其中:

  • :卷积核参数,展开后维度为
  • :输入图像中一个 patch。
  • :bias。
  • :一个空间位置的输出激活。

如果有 6 个 filters,则输出 6 张 activation maps。对于 输入,不加 padding 且 stride = 1 时,空间尺寸变为:

所以输出为:

重要程度:★★★★★

4.2 卷积输出尺寸公式

一般情况下,输入尺寸为 ,卷积核大小为 ,padding 为 ,stride 为 ,输出高度为:

输出宽度为:

若输出通道数为 ,则输出 tensor 为:

重要程度:★★★★★

4.3 AlexNet:第一代 C N N 突破

AlexNet 架构:

C O N V1
M A X P O O L1
N O R M1
C O N V2
M A X P O O L2
N O R M2
C O N V3
C O N V4
C O N V5
M A X P O O L3
F C6
F C7
F C8

意义: AlexNet 是 I L S V R C 第一个 C N N-based winner,将 ImageNet top-5 error 从传统方法显著降低,标志着深度 C N N 在大规模视觉识别中的突破。

局限:

  • 使用较大卷积核,例如
  • 网络深度有限。
  • F C 层参数量大。
  • 训练依赖工程技巧。

重要程度:★★★★☆

4.4 V G G:用小卷积核堆深度

V G G 的核心设计是大量使用 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 应该表现为:

training error 低,但 test error 高

而 degradation problem 是:

training error 也更高,test error 也更高

所以问题不是泛化,而是优化失败:深层 plain network 理论表达能力更强,但 S G D 无法有效找到好解。

重要程度:★★★★★

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 架构特征

课件总结:

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. 末尾没有大 F C layers,只用 global average pooling + F C 1000

Global Average Pooling 的意义:

若最后 feature map 为: 则对每个 channel 做空间平均: