CS231n Lecture 5 Note
2537 字
13 分钟
CS231n Lecture 5 Note
Convolutional Networks 12<32>32>
特征提取 vs 梯度下降 15<04>04>
在深度学习爆发之前,计算机视觉是如何工作的?
- 传统路线(特征工程 + 线性分类器):
- 以前不能把原始像素直接喂给模型,而是由人类专家手动设计特征提取器(Feature Extractors)。
- 颜色直方图 (Color Histogram):统计图像中各种颜色的像素数量分布,忽略空间结构(比如识别苹果的红绿色)。

image.png - 方向梯度直方图 (HOG):忽略颜色,只提取图像的边缘和轮廓方向(比如识别青蛙或人的轮廓)。

image.png - 做法:把这些手动提取的特征拼在一起,再训练一个线性分类器。

image.png
- 深度学习路线(端到端学习 End-to-End):
- 核心思想:梯度下降(数据和算力)比人类专家更擅长提取特征。
- 我们依然是从原始像素到分数,但中间所有的特征提取过程,都交给了由神经网络构成的“计算图”,通过反向传播自动学习。
上次提到的神经网络的问题
- 图像不是一维而是二维的,但却被展平了,因此会失去部分结构特征。
卷积神经网络 Convolutional Neural Network

- 历史脉络:
- 1998年 (LeNet):Yann LeCun 等人发明的早期 CNN,用于手写数字识别,架构与今天非常相似。
- 2012年 (AlexNet):ImageNet 大赛冠军,彻底引爆深度学习。得益于 GPU、大数据(互联网)和更深的网络。
- 2012 - 2020年 (CNN 统治期):目标检测、图像分割、图像描述(Image Captioning)、甚至早期的图像生成(如 Stable Diffusion 早期版本),全都是基于 CNN。
- 后 CNN 时代 (2020年之后 - 引入 Transformer):
- 教授坦诚地提到,自 2020/2021 年起,起源于自然语言处理的 Vision Transformer (ViT) 开始在图像领域击败 CNN。
- 但 CNN 仍极具学习价值,因为它是理解图像局部特性的最佳途经,且现在很多先进架构是 CNN 和 Transformer 的混合体。
卷积层 (Convolutional Layer) 31<34>34>
为什么要把全连接网络升级为 CNN?因为图像是 2D 的,把图像“拉平”成一维向量会破坏空间结构。
卷积是如何工作的?
- 全连接层 (FC):每个权重模板和整个图像一样大,计算全局点积。

image.png - 卷积层 (Conv):权重变成了小巧的 3D 滤波器(Filters/Kernels),例如 (宽、高、颜色通道)。

image.png - 滑动窗口 (Sliding Window):将这个小滤波器在原图上滑动,每次匹配一个局部区域(点积+偏置),得到一个标量分数。
- 生成特征图 (Activation Map):一个滤波器扫遍全图,会生成一个 2D 的响应平面(Feature Map)。
- 多滤波器:如果使用 6 个不同的滤波器,就会生成 6 个 2D 平面,堆叠起来变成输出厚度(通道数)为 6 的 3D 张量。

image.png 
image.png - General Form:

image.png - 为了防止全是线性,加 activation functions !

image.png
- 滤波器在学什么?
- 浅层(第一层):通常学习低级特征,如边缘(垂直/水平线)和对立颜色(红绿斑块)。
- 深层:学习高级语义特征(如眼睛、文本、车轮甚至人脸)。
空间维度计算公式
假设输入尺寸为(宽/高),滤波器大小为,填充为,步长为:
- 输出尺寸公式:
- 步长 (Stride):滤波器滑动的步幅。步长大于 1 会导致输出尺寸缩小(下采样)。
- 填充 (Padding):为了防止每次卷积后图像越来越小,并在边缘保留信息,会在原图外围补 0。
- 常用技巧:为了让卷积前后的空间尺寸保持不变,当时,通常设置(例如时;时)。
参数量与计算量估算
- 输入:
- 卷积操作:10 个滤波器,尺寸,步长,填充
- 输出尺寸:(因为填充抵消了滤波器的收缩)。
- 参数量 (Parameters):每个滤波器有个权重,加 1 个偏置。共 10 个滤波器,所以个可学习参数。
- 计算量 (FLOPs):输出包含个像素点,每个点需要次乘加运算。总计算量约万次。
- 显存消耗的三大来源:
- 激活值 (Activations):前向传播每一层产生的特征图大小。绝大部分显存消耗在网络的浅层(前几个卷积层)。因为反向传播求梯度时需要用到它们,所以不能丢弃。
- 参数与梯度 (Parameters & Gradients):权重矩阵的大小。绝大部分参数集中在网络末端的全连接层 (FC Layer)。
- 杂项 (Misc):如 Batch 里的数据、优化器(Momentum, Adam 等)缓存的动量状态(通常要把参数量占用的内存乘以 2 到 3)。
- 优化策略:如果遇到 “Out of Memory (OOM)“,最有效的做法通常是减小 Batch Size,因为激活值占用的显存与 Batch Size 成正比。
感受野 (Receptive Field)
- 定义:输出特征图上的一个像素点,受到了原始输入图像中多大区域的影响。
- 增长规律:如果只是堆叠且步长为 1 的卷积,感受野会线性增长(很慢)。

image.png - 如何加速增长:通过引入步长(Stride > 1) 进行下采样,后续层的感受野相对于原图会呈指数级增长,从而能够捕捉全局信息。
PyTorch Convolution Layer

参数共享 (Parameter Sharing)
- 核心假设:如果某个特征(如水平边缘)在图像的某个位置 (x,y) 是有用的,那么它在图像的另一个位置 (x2,y2) 也很可能是有用的(因为图像具有平移不变性)。
- 作用:强制同一个特征图(Depth slice)上的所有神经元共享同一组权重(Filter)和偏置。这使得参数量从天文数字(如全连接层的上亿参数)骤降到几万甚至几百个参数。
卷积的底层工程实现 (im2col)
- 实际上,代码底层(如 PyTorch/Caffe)并不会真的用一个个小窗口去“滑动”(效率太低)。
- im2col (Image to Column):将输入图像中每一个感受野区域“拉平”成列向量,同时将滤波器拉平为行向量,从而将整个卷积操作转化为一次巨大的矩阵乘法 (Matrix Multiplication)。这样可以极大利用 GPU 的 BLAS 库进行加速。缺点是会消耗更多内存(因为感受野重叠部分的像素被复制了多次)。
特殊卷积类型
- 1x1 卷积 (1x1 Convolution):
- 乍一看 1x1 似乎没有空间感受野,但在 3D 张量中,1x1 卷积实际上是跨通道的线性组合(Depth-wise Dot Product)。
- 作用:常用于改变通道数(降维或升维,例如将 512 通道降到 64 通道),从而大幅减少计算量,同时加入 ReLU 增加非线性。
- 空洞卷积 (Dilated Convolutions):
- 滤波器元素之间有“空隙”(Dilation)。
- 作用:在不增加参数量的前提下,极其迅速地扩大感受野。常用于图像分割任务。
将全连接层转换为卷积层 (FC CONV Conversion)
- 任何全连接层(FC)都可以等效地写成卷积层(CONV)。
- 假设输入是,接一个有 4096 个神经元的 FC 层。这可以等效为一个的卷积层,输出为。
- 为什么要这么做?(工程意义):
- 传统的 FC 层要求输入图像尺寸必须完全固定(比如必须是)。
- 如果把最后的 FC 层全改成 CONV 层,网络就可以接受任意更大尺寸的图像输入。例如输入的图像时,一次前向传播就能输出一个的类别得分矩阵(相当于对原图进行了 36 次不同位置的裁剪并分类),这被称为滑动窗口的高效实现。
池化层 (Pooling Layer) 59<36>36>
- 作用:一种极其廉价的“下采样”方式,不需要学习参数,用于缩小特征图的空间尺寸,减少计算量,并加速感受野的增长。

image.png - 独立操作:池化是对每个通道(Depth Slice)独立进行的,不会混合通道信息。
- 最大池化 (Max Pooling):最常用的池化方式。例如使用窗口,步长为 2。在每个的非重叠区域内取出最大值。

image.png - 注意:由于取最大值是一种非线性操作,所以最大池化本身也引入了非线性(类似 ReLU 的作用)。但如果用取平均值的函数,就是线性操作了。
- 池化层通常不使用填充(Padding)。
- 总结:
- Input:
- Hyperparameters:
- Kernel Size:
- Stride:
- Pooling function: max, avg
- Output size: where:
- No learnable parameters
- Common setting: max, Gives 2x downsampling
平移等变性 (Translation Equivariance) 1:05<21>21>
- 概念解释:如果你把原图中的一只猫向右平移了 10 个像素,那么 CNN 提取出的特征图中的“猫的特征”,也会向右平移相应的像素,内容不会变。
- 意义:这完美契合了人类的视觉直觉——图像中的内容不应该因为它在画面中的绝对位置而改变(我在画面左边看到一张凳子和在右边看到一张凳子,提取的特征应该是一样的)。CNN 的滑动窗口机制先天自带这种优秀的数学性质。

image.png
网络架构的设计经验法则 (Architecture Rules of Thumb)
- 经典架构模式:
INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC - 黄金法则:为什么用多个小卷积代替一个大卷积?(VGG Principle)
- 对比:堆叠 3 个卷积层 vs. 使用 1 个卷积层。
- 感受野相同:两者的感受野大小是一样的(都是)。
- 非线性更强:3个小卷积层之间包含了 3 次 ReLU 激活,使得特征提取的非线性表达能力更强。
- 参数量更少:假设通道数都是,3 个层的参数量是;而 1 个层的参数量是。小卷积更省参数!
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
CS231n Lecture 6 Note
自学CS231n Lecture 6的听课笔记。
2
Vp150 Ch. 11
校内课程Vp150 Chapter 11 Notes
3
Vp150 Ch. 10
校内课程Vp150 Chapter 10 Notes
4
Vp150 Ch. 9
校内课程Vp150 Chapter 9 Notes
5
博客音乐播放器配置
博客指南通过调用 Cookie 使 meting 可以播放 QQMusic 中的VIP 歌曲。
随机文章随机推荐











