1
CNN 的典型层结构
一个标准的 CNN 通常由以下几类层组成,按照处理顺序排列:
层类型 | 核心作用 | 是否必选 | 出现位置 |
|---|---|---|---|
输入层 | 接收原始数据 | 必选 | 最前端 |
卷积层 | 提取局部特征 | 必选 | 主体部分 |
激活层 | 引入非线性 | 必选 | 紧跟卷积层 |
池化层 | 降维、聚合信息 | 可选(常用) | 卷积块之间 |
归一化层 | 稳定训练、加速收敛 | 可选(推荐) | 激活前后 |
全连接层 | 特征组合与决策 | 可选(分类任务常用) | 网络末端 |
输出层 | 输出最终结果 | 必选 | 最后 |
下面逐一深入每一层。
2
输入层(Input Layer)
是什么?
接收原始图像的层。对于图像数据,输入通常是三维张量: 高度 × 宽度 × 通道数 。
为什么需要?
这是数据的入口。所有后续处理都基于这个原始输入。
特点
不进行任何计算,只是数据载体
常见输入尺寸:224×224×3(ImageNet标准)、32×32×3(CIFAR标准)
通常需要对输入做归一化(如将像素值缩放到[0,1]或[-1,1])
3
卷积层(Convolutional Layer)
是什么?
CNN 的核心层,包含一组可学习的卷积核(滤波器),在输入上滑动进行卷积运算。
为什么需要?
局部连接 :符合图像中局部像素相关性强的特点
参数共享 :同一个卷积核扫描整张图,大幅减少参数量
特征提取 :自动学习从低级到高级的特征
特点
特点 | 说明 |
|---|---|
局部感受野 | 每个神经元只连接输入的一小片区域 |
参数共享 | 同一个卷积核的权重在整个输入上共享 |
平移等变性 | 如果输入中的特征移动位置,输出中的特征也会相应移动 |
可堆叠 | 多层卷积可以逐层抽象,从边缘到形状到物体 |
关键参数
卷积核数量:决定输出通道数
卷积核尺寸:通常 3×3、5×5、7×7
步长:控制滑动的步幅
填充:控制输出尺寸
4
激活层(Activation Layer)
是什么?
对卷积层的输出应用非线性激活函数。
为什么需要?
引入非线性 :如果没有激活函数,多层卷积等价于单层线性变换
增强表达能力 :让网络能够学习复杂的非线性模式
特点
激活函数 | 特点 | 现代CNN常用 |
|---|---|---|
ReLU | 计算简单、缓解梯度消失、稀疏激活 | ✅ 最常用 |
Leaky ReLU | 解决ReLU死亡问题 | ⭕ 有时用 |
GELU | Transformer标配,近年CNN也开始用 | ⭕ 新趋势 |
位置
通常紧跟在卷积层之后,即 Conv → Activation 。
5
池化层(Pooling Layer)
是什么?
对特征图进行下采样,减小空间尺寸。
为什么需要?
降维 :减少计算量和参数量
扩大感受野 :让后续层能看到更大的输入区域
引入平移不变性 :对微小位置变化不敏感
防止过拟合 :减少参数,降低模型复杂度
特点
池化类型 | 操作 | 特点 |
|---|---|---|
最大池化 | 取窗口内最大值 | 保留最显著特征,常用 |
平均池化 | 取窗口内平均值 | 保留整体信息 |
全局平均池化 | 对整个特征图取平均 | 替代全连接层,大幅减少参数 |
位置
通常在卷积块之后,即 Conv → Activation → Pooling 。
6
归一化层(Normalization Layer)
是什么?
对特征图进行标准化处理,使其分布更稳定。
为什么需要?
加速收敛 :让网络更快地训练
稳定训练 :缓解梯度消失/爆炸
允许更大学习率 :提高训练效率
有一定正则化效果 :轻微防止过拟合
常见类型
归一化类型 | 操作维度 | 特点 | 常用场景 |
|---|---|---|---|
批归一化 | 对每个通道,在batch维度归一化 | 最常用,效果好 | CNN标配 |
层归一化 | 对每个样本,在所有通道归一化 | 不受batch size影响 | Transformer、RNN |
实例归一化 | 对每个样本、每个通道单独归一化 | 保留个体特征 | 风格迁移 |
位置
通常在激活函数之前或之后,经典顺序是 Conv → BN → ReLU 。
7
全连接层(Fully Connected Layer)
是什么?
传统神经网络的标准层,每个神经元与上一层的所有神经元相连。
为什么需要?
特征组合 :将卷积层提取的局部特征进行全局组合
维度变换 :将特征图映射到特定维度的输出空间
决策层 :在分类任务中作为最后的分类器
特点
参数量巨大 :容易成为网络参数的主要部分
全连接 :每个输出与所有输入相连
对输入尺寸敏感 :要求输入特征图尺寸固定
现代趋势
越来越多的CNN架构用 全局平均池化 替代全连接层,大幅减少参数量。
8
输出层(Output Layer)
是什么?
网络的最后一层,输出最终预测结果。
为什么需要?
将网络提取的特征映射到任务所需的输出形式。
任务类型 | 输出层设计 | 激活函数 |
|---|---|---|
分类(多类) | 神经元数=类别数 | Softmax |
分类(二类) | 1个神经元 | Sigmoid |
回归 | 1个或多个神经元 | 无(或线性) |
目标检测 | 边界框坐标+类别概率 | 视具体设计而定 |
9
一个典型CNN的结构示例
以经典的 VGG16 为例,看看各层如何配合:
输入层 (224×224×3)
↓
卷积块1: Conv3-64 → ReLU → Conv3-64 → ReLU → MaxPool
↓
卷积块2: Conv3-128 → ReLU → Conv3-128 → ReLU → MaxPool
↓
卷积块3: Conv3-256 → ReLU → Conv3-256 → ReLU → Conv3-256 → ReLU → MaxPool
↓
卷积块4: Conv3-512 → ReLU → Conv3-512 → ReLU → Conv3-512 → ReLU → MaxPool
↓
卷积块5: Conv3-512 → ReLU → Conv3-512 → ReLU → Conv3-512 → ReLU → MaxPool
↓
全连接层: FC-4096 → ReLU → Dropout → FC-4096 → ReLU → Dropout → FC-1000
↓
输出层: Softmax空间维度递减 :通过池化层逐步缩小特征图
特征维度递增 :卷积核数量逐块增加
局部到全局 :从卷积提取局部特征,到全连接进行全局决策
10
总结:为什么需要这么多不同类型的层?
如果把CNN比作一个 图像理解工厂 :
层类型 | 角色 | 比喻 |
|---|---|---|
输入层 | 原料入口 | 进货口 |
卷积层 | 基础特征提取 | 各个专业工位,每个工位负责一种模式 |
激活层 | 决策是否保留 | 质检员,决定哪些特征值得保留 |
池化层 | 信息浓缩 | 打包压缩,把多个零件合成一个组件 |
归一化层 | 质量稳定 | 环境控制,让每个工位工作稳定 |
全连接层 | 全局决策 | 总装线,把所有组件组合成最终产品 |
输出层 | 成品出厂 | 包装成客户需要的形式 |
每一层都有其不可替代的作用,它们的协同工作使得CNN能够从原始像素中学习到层次化的特征表示,最终完成复杂的视觉任务。