0. 本章核心目标:从线性分类器走向视觉神经网络
线性分类器只能学习线性决策边界,无法处理 XOR 等非线性模式;MLP 通过隐藏层和非线性激活函数提升表达能力,但对图像直接全连接会导致参数量巨大;CNN 进一步利用图像的局部性、平移共享和空间结构,大幅减少参数并学习局部视觉特征。**
0. 本章核心目标:从线性分类器走向视觉神经网络
本章要解决的问题是:
线性分类器只能学习线性决策边界,无法处理 XOR 等非线性模式;MLP 通过隐藏层和非线性激活函数提升表达能力,但对图像直接全连接会导致参数量巨大;CNN 进一步利用图像的局部性、平移共享和空间结构,大幅减少参数并学习局部视觉特征。
整体进化树如下:
KNN
→ 记忆训练集,预测慢,没有真正学习参数
Linear Classifier
→ 学习 W,b,预测快
→ 但只能表达线性边界
MLP
→ 引入 hidden layer
→ 通过 nonlinear activation 组合多个线性特征
→ 可表达 XOR / 非线性边界
Deep MLP
→ 多层特征抽象
→ 但训练会遇到梯度消失、激活函数选择问题
CNN
→ 针对图像结构设计
→ 局部连接 + 参数共享 + 多 filter
→ 参数更少,保留空间结构
Pooling
→ 降低空间尺寸
→ 提高表示紧凑性和一定平移鲁棒性
重要程度标注: ★★★ 必考核心;★★ 常考概念;★ 理解即可。
1. 上周回顾:从 KNN 到线性分类器 ★★★
1.1 KNN 的框架
KNN 的训练阶段本质上是:
train(images, labels):
memorize all data and labels
预测阶段:
predict(test_image):
find most similar training image
return its label
它的核心问题是:训练很便宜,但预测很慢;模型没有学到显式参数,也没有抽象出数据规律。
1.2 线性分类器的标准机器学习框架
线性分类器不再直接记忆样本,而是学习一个带参数的函数:
其中:
表示输入样本,例如图像展平后的向量;
表示模型参数;
输出每个类别的 score。
训练目标是定义损失函数:
然后求最优参数:
预测时使用:
核心逻辑是:
定义模型 f_W(x)
→ 定义损失 L(f_W(x), y)
→ 优化参数 W*
→ 用 f_{W*}(x) 预测标签
2. 正则化:控制模型复杂度 ★★★
课件中给出两类正则化:
符号解释:
是全部模型权重;
是第 (k) 个权重参数;
是正则化项,用于惩罚复杂模型。
完整训练目标通常写成:
其中:
是分类损失,例如 cross entropy;
是正则化强度。
直觉:
L2 会惩罚大权重,使模型更平滑;如果某个权重很大,那么输入特征的微小变化都会导致输出巨大变化,因此容易过拟合噪声。
在 SVM 中,最小化:
等价于最大化 margin。margin 越大,分类边界对测试样本扰动越鲁棒。
3. Softmax 与 Cross Entropy ★★★
线性模型输出的是 raw scores,不是概率。假设模型对第 (i) 个样本输出:
其中:
是第 (j) 个类别的 score。
Softmax 把 score 转换为概率:
其中:
所以它可以被解释为类别概率。
若真实标签是 one-hot 分布:
其中正确类别 (y_i) 对应:
其他类别为 0。
Cross Entropy loss 为:
由于 是 one-hot,只有正确类别保留,所以:
符号解释:
是训练样本数;
是类别数;
是类别 (j) 的 score;
是第 (i) 个样本真实类别的 score。
直觉: 正确类别 score 越大,softmax 概率越接近 1,loss 越小;错误类别 score 越大,分母越大,loss 越大。
4. Gradient Descent ★★★
梯度下降更新规则:
符号解释:
是参数;
是损失函数;
是损失对参数的梯度;
是 learning rate,也叫 step size。
直觉: 梯度方向是损失上升最快的方向,因此减去梯度就是沿损失下降最快方向更新。
5. 为什么需要非线性模型:XOR 问题 ★★★
XOR 的四个点可以理解为:
| 点 | 横向线性特征 | 纵向线性特征 | 标签 | | - | —— | —— | ——— | | 1 | + | + | green / + | | 2 | - | + | red / - | | 3 | + | - | red / - | | 4 | - | - | green / + |
单条直线无法把绿色点和红色点分开,因此线性分类器失败。
解决方式是:先用两个线性特征分别判断点在两条线的哪一侧,然后组合它们:
再做非线性组合:
当两个符号相同时,输出正;符号不同时,输出负。这正好实现 XOR 结构。
关键结论:
多个线性函数本身不够;必须加入非线性操作,例如 threshold、activation、product 或逻辑组合。
6. Single Hidden Layer MLP ★★★
单隐藏层网络结构:
符号解释:
是输入向量;
是输入维度;
是 hidden layer size,是超参数;
是输入层到隐藏层的权重矩阵;
是隐藏层偏置;
是隐藏层输出;
是逐元素激活函数;
是隐藏层到输出层的权重;
是输出层偏置;
是最终输出 score。
为什么必须有非线性激活?
如果没有激活函数:
代入得到:
令:
则:
这仍然是线性模型。
所以:
线性层叠加线性层,结果仍然是线性层。深度本身不产生非线性,激活函数才产生表达能力。
7. 多分类 MLP ★★★
对 (d) 类分类问题,输出层改为:
更标准的写法是:
其中:
表示 (d) 个类别的 score;
表示 softmax 后的类别概率。
8. Multiple Hidden Layers ★★★
多层 MLP:
超参数包括:
深层网络的意义是逐层构造特征:
raw input
→ low-level feature
→ mid-level feature
→ high-level feature
→ class score
但深层网络训练会带来梯度传播问题,这引出 activation function 的选择。
9. Backpropagation ★★★
课件用 step-by-step 图示展示了反向传播。核心不是记住每张图,而是理解链式法则。
假设:
反向传播从输出层开始:
因为:
所以:
因此:
对隐藏层:
对 pre-activation:
其中:
表示逐元素乘法。
再对 (W_1):
反向传播本质:
forward: compute activations and loss
backward: apply chain rule layer by layer
update: W ← W − λ∂L/∂W
10. 激活函数演进 ★★★
本章一个重要方法论演进是:
Step Function
→ Sigmoid
→ tanh
→ ReLU
→ Leaky ReLU / PReLU / ELU / Maxout
每一步都在解决前一种激活函数的缺陷。
10.1 Step Function ★★
硬阈值函数:
问题:不可导或几乎处处梯度为 0,不适合梯度下降训练。
10.2 Sigmoid ★★★
输出范围:
(0,1)
优点: 可以解释为神经元 firing rate,也可用于二分类概率输出。
缺点 1:饱和区杀死梯度。
Sigmoid 导数:
当:
时:
当:
时:
所以深层网络中梯度会逐层变小,导致前面层几乎无法更新。
缺点 2:输出不是 zero-centered。
Sigmoid 输出总是正数:
若一个神经元输入总为正,局部梯度也为正,那么所有权重梯度符号会受到 upstream gradient 的统一控制。结果是更新方向只能“全部增加”或“全部减少”,无法让某些权重增加、某些权重减少,从而造成 zig-zag optimization path。
10.3 tanh ★★★
输出范围:
(-1,1)
优点:zero-centered,比 sigmoid 更适合隐藏层训练。
缺点:仍然会饱和。即当:
时:
所以仍然存在梯度消失问题。
10.4 ReLU ★★★
分段写法:
导数:
优点:
正区间不饱和
计算非常便宜
实践中比 sigmoid/tanh 收敛更快
缺点:
输出不是 zero-centered
可能出现 dead neuron
Dead ReLU 指如果某个神经元长期落在负区间:
则输出为:
0
梯度也为:
0
于是该神经元不再更新,永远不激活。课件提到实践中常用稍微正的 bias 初始化,例如:
来降低 ReLU 死亡风险。
10.5 Leaky ReLU ★★
Leaky ReLU 解决 ReLU 负区间梯度为 0 的问题:
其中:
通常是小常数,例如 0.01。
优点:负区间也有梯度,因此不容易 die。
10.6 PReLU ★★
Parametric ReLU 把 作为可学习参数:
区别在于:
通过 backpropagation 学习,而不是人工固定。
10.7 ELU ★★
ELU,即 Exponential Linear Unit:
优点:
保留 ReLU 正区间不饱和的优点
负区间输出更接近 zero mean
负区间饱和可以增加对噪声的鲁棒性
缺点:
计算更贵。
10.8 Maxout ★
Maxout 不再是简单的:
而是:
它可以泛化 ReLU 和 Leaky ReLU。
优点:
linear regime
non-saturating
does not die
缺点:参数量增加,课件强调会 double number of parameters per neuron。
10.9 实践建议 ★★★
课件结论:
隐藏层中优先使用 ReLU
注意 learning rate
可以尝试 Leaky ReLU / Maxout / ELU 获得边际提升
不要在隐藏层使用 sigmoid 或 tanh
sigmoid/tanh 可以用于输出层控制输出范围
11. 从 MLP 到 CNN:为什么全连接不适合图像? ★★★
图像输入:
展平后:
线性分类器参数:
如果堆叠多层 MLP:
参数量巨大,而且破坏了图像的空间结构。
核心问题:
图像具有局部结构
相邻像素高度相关
同一个视觉模式可能出现在不同位置
MLP 把图像展平后丢失空间邻接关系
全连接层参数量过大
CNN 的改进:
局部连接:每个神经元只看局部 patch
参数共享:同一个 filter 在所有位置复用
多 filter:学习不同视觉模式
保留空间结构:输出仍是 feature map
12. Convolutional Layer ★★★
输入图像:
一个卷积核:
注意:课件强调:
Filters always extend the full depth of the input volume.
所以如果输入 depth 是 3,filter depth 也必须是 3。
参数量:
若包含 bias:
卷积操作是在空间位置上滑动 filter,对每个局部区域做 dot product:
符号解释:
是输入图像或输入 volume;
是卷积核;
是 filter spatial size;
是输入 depth/channel 数;
是 bias;
是输出 activation map 在位置 ((i,j)) 的值。
一个 filter 会产生一个 activation map。 如果有 6 个 filters,则产生 6 张 activation maps,并 stack 成:
对于:
输入,使用:
filter,stride 1,无 padding,输出空间尺寸为:
因为 filter 可以放置的位置数量是:
32-5+1=28
13. CNN 的层级结构 ★★★
ConvNet 是多个卷积层和激活函数交替组成:
Input: 32×32×3
→ CONV, ReLU: 6 filters of 5×5×3
→ 28×28×6
→ CONV, ReLU: 10 filters of 5×5×6
→ 24×24×10
→ ...
第二层 filter depth 必须等于上一层输出 depth:
如果有 10 个这样的 filters,输出 depth 是 10。
14. 卷积输出尺寸公式 ★★★
无 padding 时:
其中:
是输入空间尺寸;
是 filter size;
是 stride。
例如:
stride 1:
输出:
stride 2:
输出:
stride 3:
不是整数,因此 filter 放不下,不能合法卷积。
15. Zero Padding ★★★
为了防止空间尺寸快速缩小,CNN 常在边界补 0。
有 padding 时输出尺寸为:
其中:
是 padding size。
例子:
则:
输出仍为:
常见做法:当 stride 为 1,filter size 为 ,为了保持空间尺寸不变,取:
例如:
注意:这要求 (F) 通常为奇数。
为什么 padding 重要? 如果不 padding,连续使用 卷积会导致:
空间尺寸缩小太快,不利于深层特征学习。
16. 卷积层参数量计算 ★★★
例题:
输入:
使用 10 个:
filters,stride 1,pad 2。
输出空间尺寸:
输出 volume:
每个 filter 参数量:
其中 (+1) 是 bias。
10 个 filters 总参数量:
这体现 CNN 的参数共享优势:输出有 个神经元,但参数只有 760 个。
17. Receptive Field ★★★
课件定义:
一个 activation map 是一张 neuron output sheet。每个 neuron:
只连接输入中的一个小区域
所有空间位置共享同一个 filter 参数
如果 filter 是:
则每个输出 neuron 的 receptive field 是:
直觉: receptive field 表示某个输出单元“看见”的输入区域。CNN 越深,后层 neuron 的有效 receptive field 越大,可以从局部边缘逐渐组合成更高级视觉模式。
18. Pooling Layer ★★★
Pooling 的作用:
减小 representation size
让特征更 manageable
对每个 activation map 独立操作
Max Pooling
课件例子:
输入单个 depth slice:
使用:
filter,stride 2。
四个区域分别取最大值:
左上:
右上:
左下:
右下:
输出:
Pooling 不改变 depth,只缩小 height 和 width。
19. 算法/模型对比表 ★★★
| 方法 | 核心思想 | 优点 | 局限 | 为什么引出下一步 | | —————– | ——————- | ———– | ————————– | ——————– | | KNN | 记忆训练样本,找最近邻 | 简单,无训练成本 | 预测慢,不学习抽象规律 | 需要参数化模型 | | Linear Classifier | 学习 (W,b),输出类别 score | 预测快,可优化 | 只能线性分割 | XOR 等非线性问题失败 | | MLP | 隐藏层 + 非线性激活 | 可表达非线性边界 | 图像全连接参数巨大 | 需要利用图像结构 | | Deep MLP | 多层抽象特征 | 表达能力更强 | 梯度消失、训练困难 | 需要更好的激活函数 | | CNN | 局部连接 + 参数共享 | 参数少,保留空间结构 | 需要设计 filter/stride/padding | 成为视觉任务基础结构 | | Pooling | 下采样 feature map | 降低计算量,提高鲁棒性 | 丢失部分空间精度 | 与 CNN 组合形成经典 ConvNet |
20. 期末高频考点总结
最可能考计算题:
softmax + cross entropy
gradient descent update
MLP 前向传播维度
为什么没有 activation 时多层线性仍是线性
卷积输出尺寸
padding 后输出尺寸
卷积层参数量
max pooling 结果
最可能考概念题:
为什么线性分类器不能解决 XOR
为什么需要非线性激活函数
sigmoid 的两个问题:梯度消失、非 zero-centered
tanh 相比 sigmoid 的改进与不足
ReLU 的优点与 dead neuron 问题
Leaky ReLU / PReLU / ELU / Maxout 的动机
CNN 为什么比 MLP 更适合图像
filter 为什么必须覆盖 full depth
receptive field 的意义
pooling 的作用
最核心的一句话:
MLP 通过非线性激活突破线性分类器的表达瓶颈;CNN 通过局部连接和参数共享突破 MLP 在图像上的参数与结构瓶颈。