深度学习基础概念
- 本文记录一些卷积网络的基础概念,关于概览知识建议先看视频:https://www.jianguoyun.com/p/Da26fK0QrKKIBhi_0okGIAA
一、卷积的目标
卷积层的任务是:
从图像中自动提取特征(例如边缘、纹理、形状)
而这个提取过程就是卷积操作。
二、卷积的输入输出形式
在计算机视觉中,卷积层的输入通常是一个 4 维张量:
[B, C_in, H_in, W_in] |
输出则是:
[B, C_out, H_out, W_out] |
| 符号 | 含义 |
|---|---|
| B | batch size(一次放几张图片) |
| C_in | 输入通道数(比如 RGB = 3) |
| H_in, W_in | 输入的高和宽 |
| C_out | 输出通道数(卷积核数量) |
| H_out, W_out | 输出特征图尺寸 |
三、卷积全过程
Step 1. 准备卷积核(Kernel)
每个卷积核是一个小窗口,比如 ($ 3×3×C_{in} $)。假设输入是彩色图(3个通道),卷积核就是 (3×3×3)。
每个卷积核都有一组权重,它负责检测一种特征:
- 比如检测“垂直边缘”;
- 或检测“亮度渐变”;
- 或检测“圆形区域”。
一个卷积层会有很多卷积核,比如 64 个——那就能检测 64 种不同类型的特征。所以最后会产生 64 张特征图,也就是 64 个输出通道。
Step 2. 滑动窗口计算(Convolution)
卷积核会在整张图上滑动,每到一个位置:
- 把卷积核和对应的区域像素一一相乘;
- 然后把所有乘积加起来,得到一个数;
- 这个数就是输出特征图的一个像素值。
belike:把一个小滤镜在整张图片上滑动, 滤镜响应强的地方说明“这个位置有我想要的特征”。
Step 3. 步长 (Stride)
步长 stride 决定卷积核每次移动的距离:
- stride = 1:移动一个像素 → 输出图大;
- stride = 2:跳两个像素 → 输出图小一半。
应用场景:
- 想保留更多细节 → stride=1;
- 想快速降维、减小尺寸 → stride=2。
Step 4. 填充 (Padding)
卷积核在边缘时会溢出图片,所以要不要补 0:
- padding = 0:不补 → 输出变小;
- padding = 1(针对3×3卷积):补一圈0 → 尺寸不变。
这就是为什么常见的卷积设置:
nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1) |
输出尺寸和输入一样大。
Step 5. 计算输出尺寸
输出尺寸公式:
$ H_{out} = \frac{H_{in} - K + 2P}{S} + 1 $
$ W_{out} = \frac{W_{in} - K + 2P}{S} + 1 $
其中:
- (K):卷积核大小(kernel size)
- (P):填充(padding)
- (S):步长(stride)
举例:
- 输入 32×32,kernel=3, padding=1, stride=1
- 输出:(32−3+2×1)/1+1 = 32
- 尺寸不变。
Step 6. 激活函数 (Activation)
卷积输出是线性的(可能为负数),我们需要加一点非线性,常用激活函数是:
- ReLU:f(x) = max(0, x) → 让负数变 0,只保留重要的响应;
- Sigmoid / Tanh:在一些特殊任务用。
目的:让网络能够学习到复杂的非线性关系,而不是单纯的加权求和。
Step 7. 批归一化 (Batch Normalization, BN)
卷积和激活后,加一个 BN 层可以:
- 稳定训练;
- 让不同 batch 的数据分布更一致;
- 加快收敛。
BN 在卷积层里几乎是标配:
x = F.relu(self.bn(self.conv(x))) |
Step 8. 池化层 (Pooling)
卷积提取了特征后,池化层负责降采样 (down-sampling):
- 最大池化 (MaxPool):保留局部最大值;
- 平均池化 (AvgPool):取局部平均值。
例如:
nn.MaxPool2d(kernel_size=2, stride=2) |
每 2×2 区域缩成 1×1,图片宽高减半。
这能让模型:
- 减少参数;
- 获得更大的感受野;
- 忽略微小位置偏移(提高鲁棒性)。
Step 9. 通道的累积与抽象
随着卷积层的层数增加:
| 层数 | 通道数 | 学到的特征 |
|---|---|---|
| 第一层 | 3 → 64 | 颜色、边缘 |
| 第二层 | 64 → 128 | 角、线条组合 |
| 第三层 | 128 → 256 | 局部结构(眼睛、轮廓) |
| 第五层 | 512+ | 整体语义(猫、车、人脸) |
每一层输出的特征图叠在一起形成更多通道。 这就是“深度学习”的由来:特征逐层加深。
四、卷积流程图
输入图像 (3通道 RGB) |
五、术语与场景
| 术语 | 在哪里用 | 作用 |
|---|---|---|
| kernel (卷积核) | 卷积层 | 检测局部特征 |
| stride (步长) | 卷积层/池化层 | 控制输出大小 |
| padding (填充) | 卷积层 | 保持尺寸不变 |
| channel (通道) | 卷积层输入输出 | 表示特征维度 |
| feature map (特征图) | 卷积层输出 | 显示每个通道学到的特征 |
| pooling (池化) | 降维阶段 | 减少计算量 |
| activation (激活函数) | 每个卷积后 | 提供非线性能力 |
| batch normalization | 卷积后 | 加速收敛、稳定训练 |