卷积神经网络
Convolutional Neural Network
卷积神经网络(CNN或ConvNet)是一类为处理具有网格状拓扑结构数据(如图像、视频)而专门设计的神经网络。它通过模仿生物的视觉皮层机制,利用卷积层来自动、高效地提取空间层次特征,是计算机视觉领域取得革命性突破的核心技术。
核心思想:局部感受野与层次化特征
传统的神经网络(如多层感知机)使用全连接层,每个神经元都与前一层的所有神经元相连。对于图像这样的大尺寸输入,全连接会导致参数数量爆炸,难以训练。CNN通过引入两个核心思想来解决这个问题:
- 局部感受野 (Local Receptive Fields): 每个神经元只与输入的一个局部区域相连。这模仿了生物视觉系统中,每个视觉皮层细胞只对视野中的一小块区域敏感。
- 权值共享 (Weight Sharing): 用于检测某个特征的卷积核(滤波器)在整个输入图像上滑动,这意味着图像不同位置的相同特征(如一条边、一个角)可以用同一个检测器来识别。这极大地减少了模型参数,并赋予了模型平移不变性。
通过堆叠这些操作,CNN能够构建出层次化的特征表示:浅层网络学习到边缘、颜色等低级特征,中层网络组合低级特征形成纹理、形状等中级特征,深层网络则组合中级特征来识别出完整的物体。
关键组件
一个典型的CNN架构由以下三种核心层交替堆叠而成:
1. 卷积层 (Convolutional Layer)
这是CNN的核心。卷积层包含若干个卷积核 (Kernel) 或滤波器 (Filter)。每个卷积核都是一个小型的、可学习的权重矩阵。
- 工作方式: 卷积核在输入数据(如图像)上按指定步长(stride)进行滑动窗口操作。在每个位置,计算卷积核与输入数据对应区域的点积,并将结果汇总成一个值,形成输出的特征图 (Feature Map)。
- 作用: 每个卷积核负责检测一种特定的局部特征(如水平边缘、绿色斑块等)。通过训练,网络能自动学习到最有用的特征检测器。
2. 池化层 (Pooling Layer)
池化层(也称下采样层)通常紧跟在卷积层之后,其主要作用是降维和保持不变性。
- 工作方式: 在一个滑动窗口内,将窗口中的多个值用一个值来代替。它没有可学习的参数。
- 常见类型:
- 最大池化 (Max Pooling): 取窗口内的最大值。它对特征的位置变化不敏感,能有效提取最显著的特征。
- 平均池化 (Average Pooling): 取窗口内的平均值。
- 作用:
- 显著减少特征图的尺寸,从而降低后续层次的计算量和参数数量。
- 提供一定程度的平移、旋转不变性,提升模型的鲁棒性。
3. 全连接层 (Fully Connected Layer)
在经过多个卷积层和池化层的堆叠后,提取出的高级特征图会被“展平”成一个一维向量,然后送入一个或多个全连接层,其结构与传统的多层感知机相同。
- 作用: 整合前面所有层提取出的局部特征,进行非线性组合,并最终映射到输出空间,用于分类(如使用Softmax激活函数)或回归。
经典架构演进
- LeNet-5 (1998): Yann LeCun提出,现代CNN的开山之作,成功应用于手写数字识别。
- AlexNet (2012): 在ImageNet竞赛中取得巨大成功,首次证明了深度CNN在复杂图像分类任务上的潜力,引爆了深度学习的热潮。它使用了ReLU激活函数和Dropout等新技术。
- VGGNet (2014): 探索了网络深度的影响,证明了通过堆叠非常小的(3x3)卷积核可以构建出性能强大的深层网络。
- GoogLeNet (2014): 引入Inception模块,在同一层内使用不同尺寸的卷积核,并行提取特征,提高了网络的宽度和效率。
- ResNet (2015): 提出了残差连接 (Residual Connection),解决了极深网络中的梯度消失和退化问题,使得训练超过百层甚至千层的网络成为可能,是CNN发展史上的一个里程碑。
应用领域
CNN是几乎所有现代计算机视觉系统的核心,其应用包括:
- 图像分类
- 目标检测 (e.g., YOLO, Faster R-CNN)
- 语义分割/实例分割 (e.g., U-Net, Mask R-CNN)
- 人脸识别
- 医学图像分析