什么是 卷积神经网络?
卷积神经网络(CNN,Convolutional Neural Network)是一类在网格或空间组织输入上重复应用共享局部卷积核的神经网络,其特征图带有明确的局部性与平移等变归纳偏置。
快速了解
| 创建时间 | 1989 年由 Yann LeCun 等人提出(LeNet) |
|---|---|
| 规范文档 | 官方规范 |
工作原理
卷积产生特征图
对每个输出通道,Kernel 会覆盖全部输入通道与一个局部空间窗口。Stride 决定计算位置,Padding 决定边界行为,Dilation 扩大被采样的感受野。输出尺寸由 Kernel、Padding、Stride 与 Dilation 共同决定;错误的 Shape 假设可能悄悄破坏标签或 Skip Connection 对齐。
等变不等于不变
在理想边界处理和单位步幅下,输入平移会让卷积特征图同样平移,这叫 Translation Equivariance。分类结果保持不变还需要后续聚合、Pooling、数据增强或学习得到的决策,而且通常只是近似成立。Padding、下采样、裁剪与 Aliasing 都可能破坏严格等变,因此 CNN 并非天然能在任何位置识别同一对象。
感受野与通道混合决定结构
堆叠局部层会扩大理论 Receptive Field,但远处像素的实际影响可能更小。Pointwise、Grouped、Depthwise、Dilated、Residual 与 Strided Convolution 对通道交互、空间覆盖、算力和内存的权衡不同。Pooling 与全连接层是常见选择,不是每个 CNN 的定义性组件。
根据工作负载选择并评测
当局部性、流式处理、端侧部署或可预测内存访问很重要时,CNN 仍有价值;当全局交互与大规模预训练占主导时,Transformer 可能更合适。候选应使用相同数据切分与增强策略比较,并在目标硬件上测量 Accuracy 或任务损失、Calibration、Corruption 与 Shift Robustness、峰值内存、吞吐和 Tail Latency。
主要特点
- 使用稀疏局部连接,而不是让每个输出连接所有输入
- 在空间或时间位置间共享同一组卷积核参数
- 仅在特定步幅与边界条件下产生平移等变特征图
- 通过堆叠或膨胀局部运算扩大感受野
- 支持多维输入以及多个可学习输入与输出通道
- 通过步幅和下采样权衡空间分辨率、混叠、算力与内存
常见用途
- 在受控裁剪、分辨率和类别偏移下评测的图像分类
- 必须保持输出几何对齐的目标检测与语义分割
- 使用一维卷积处理音频、波形与传感器数据
- 受内存、吞吐或功耗约束的端侧视觉系统
- 混合架构与生成式架构中的 CNN Backbone 或卷积模块
示例
Loading code...常见问题
卷积层具体计算什么?
卷积层让每个学习得到的 Kernel 覆盖全部输入通道和局部窗口,把点积结果写入 Feature Map。多数框架实际执行 Cross-Correlation 而非数学上翻转卷积核的卷积。Stride、Padding、Dilation、Group 和通道数共同决定输出 Shape 与成本。
CNN 天然具有平移不变性吗?
标准单位步幅卷积在合适边界假设下具有 Translation Equivariance,即输入平移会让特征图跟着平移。Invariance 要求最终输出不变,通常依赖 Pooling、Aggregation、数据增强与训练,而且只近似成立;Padding、Stride、裁剪和混叠会削弱它。
CNN、RNN 和 Transformer 有什么区别?
CNN 使用共享局部卷积核,可较大程度并行处理位置;RNN 顺序更新循环状态;Transformer 用 Attention 混合不同位置的信息。三者没有通用胜负,输入结构、所需上下文、训练数据、延迟、内存与目标硬件共同决定选择。
所有 CNN 都需要池化层和全连接层吗?
不需要。卷积才是定义性运算。现代网络可以用 Strided Convolution 下采样,为密集预测保留分辨率,使用 Global Average Pooling,或构建 Fully Convolutional Network。Pooling 与 Dense Head 都是需要评估信息损失和成本的架构选择。
CNN 上线前应如何评测?
使用保留实体与采集会话边界的未触碰数据,按类别和关键子群报告任务指标;测试分辨率、裁剪策略、图像损坏、光照或传感器偏移、Calibration 与安全相关样例。还要在目标硬件上测量导出模型的内存、批量和尾延迟及吞吐。