卷积神经网络(convolutional neural networks, CNN)
文章内容主要来源于知乎平台(https://zhuanlan.zhihu.com/p/31727402)
(1) 卷积层
为了理解使用卷积层的原因,在机器学习模型中处理图像数据时会遇到维度非常高的挑战。例如,在实际应用中常见的1,000×1,000像素的彩色图像对应着三百万维特征空间。这种高维度的数据使得采用传统的多层感知机(MLP)中的全连接层来建模变得不可行。全连接层不仅会导致模型拥有过高的复杂度(complexity),还会产生繁重的计算开销(computational burden),并且容易导致严重的过拟合(overfitting)现象。然而,在这种情况下,利用具有局部连接性和共享权值特性的卷积层能够有效地减少总的参数数量(parameter count)。具体来说,在卷积操作中每个滤波器只关注局部区域的信息,并且在不同的位置上重复相同的权值配置(shared weights),这使得整个网络所需的参数数量大幅下降。这些权值常被称作滤波器或卷积核。

局部性连接的概念在全连接层中被实现为每个输出节点与所有输入节点之间的加权求和关系。然而,在视觉识别领域内的重要特征包括关键部位如边缘和角点等元素仅占整个图像数据量的一小部分。由于相距较远的两个像素通常不会产生显著的空间相关作用,在卷积神经网络架构设计时需确保每个输出单元仅与其附近的几个输入单元建立联系以减少冗余计算从而提高模型效率
权值共享机制 假设一组权重能够在图像的一个局部区域内有效提取特征,则这些权重同样能够在图像的不同局部区域内有效地捕捉到类似的特征。换句话说,在同一张图片的不同部分也能够找到相同的模式或特征表达。由此可知,在卷积层设计中通过权值共享机制使得不同位置的神经元能够协同工作,并且这种设计有助于发现图片的不同局部特征模式。值得注意的是,在卷流网络(CNN)的设计理念下仅通过空间维度上的参数共用即可大幅减少模型复杂度的同时仍能保持强大的表达能力;而对于循环神经网络(RNNs)则是在时序维度上实现了类似的功能。
卷积层的功能 经过卷积运算我们可以提取图像中的细节特征。当多个卷积层依次堆叠时 各个层次能够逐步提取出从边缘 纹理以及方向等低级特征过渡到文字 车轮以及人脸等高级特征的信息
两者之间几乎没有直接联系。在卷积层中讨论的实际上是输入信号与权值矩阵之间的互相关(cross-correlation)运算过程,与之不同的是,在数学教材中讨论的则是更为抽象的积分运算。
卷积涉及的四个关键参数决定了其配置特性。具体而言:
- 滤波器数量决定了特征图的空间维度。
- 感受野大小反映了滤波器的空间连接范围。
- 填充操作决定了边缘信息保留程度。
- 步进幅度影响着输出特征图的空间分辨率。
卷积输入输出的尺寸关系 若输入的高度与宽度分别为H与W,则经过卷积操作后的高度与宽度分别为H'与W'。根据卷积计算公式可得:
H' = \frac{H - F + 2P}{S} + 1, \quad W' = \frac{W - F + 2P}{S} + 1
其中F代表滤镜尺寸,P表示填充策略,S为步长参数。特别地,在步长S=1的情形下,通过设定填充策略P=(F-1)/2, 可以确保输入与输出的空间维度保持一致。例如,在F=3的情况下,采用上述填充策略可以使输入与输出的空间尺寸完全一致
在卷积神经网络中选择合适的滤波器尺寸是一个关键考量因素。相比于较大的滤波器(如7×7),更倾向于选择较小尺寸的滤波器(如3×3)。通过叠加多个3×3卷积层可以模拟单一层7×7卷积的感受野效果。当通道数为D时,在参数量方面三层3×3卷积总计27D²个参数(即每层有D²个输入通道),而单一层7×7卷积则包含49D²个参数。此外,在非线性激活环节上三层3×3卷积经过三次非线性处理(即每层之后都会有一个激活函数),这显著提升了模型的非线性表达能力。
通过每个空间位置的D维向量执行相同的线性变换(Operation)来实现特征提取(Feature extraction)。这种操作主要用于增加非线性并实现降维效果(Effect),这相当于在通道数方向上进行了压缩(Compression)。1×1卷积关键地减少了网络计算量与参数数量(Parameter count)。
全连接层与卷积层都执行点乘操作。由于两者均基于输入的空间信息进行计算,并且通过加权求和生成新的特征表示。全连接层与卷积层的等效性建立在以下前提条件:滤波器数量需与原全连接层输出神经元数量一致;滤波器的覆盖范围(感受野)应完全覆盖输入空间;无需引入零填充以维持特征图尺寸;步长设置为1以保证采样密度与原始数据一致。
为何要将全连接层与卷积层相等价 全连接神经元仅能处理固定尺寸的空间信息 这种限制使得在面对不同尺度的目标检测任务时 需要在每次输入时都截取不同尺寸的特征图来进行特征提取 这种做法不仅效率低下而且容易导致模型性能受限 而通过构建一个可适应任意尺度的空间信息提取机制 我们可以在一次完整的前向传播过程中同时捕获多尺度特征 这一特性使得基于卷积神经网络的设计方案更加高效可靠
其数学表达式为一个D×H×W维度的空间。其中包含了D个通道,在另一个视角下则由H×W个空间位置组成
其数学表达式为一个D\times H\times W维度的空间。其中包含了D个通道,在另一个视角下则由H\times W个空间位置组成
该过程实现了对卷积结果的分布式表达。值得注意的是,在卷积层中各通道之间并非完全独立。具体而言,在这一机制下,各个通道中的神经元与其对应的语义概念之间构成了“多对多”的关联关系:每一个语义概念都会被多个通道中的神经元共同表征,并且每个神经元也会参与多个语义概念的表现。进一步分析可知,在这种机制下,在大多数情况下这些神经元会呈现稀疏激活状态。
完成卷积操作的主要思路主要包括以下几种:第一种是快速傅里叶变换(FFT),这种方法通过将信号转换到频域空间来实现卷积运算,在实际应用中其显著优势主要体现在较大尺寸的滤波器上;而对于常见的1×1和3×3尺寸滤波器而言,在小尺寸情况下该方法并未带来明显的性能提升效果。第二种是基于图像到列(im2col)的方法,在该方法中每一步都将与每个输出神经元相关联的局部输入区域展成独立的列向量,并将所有得到的结果拼接成一个大的矩阵形式;这种处理方式使得可以通过矩阵乘法的方式高效地完成卷积运算;然而该方法的一个显著缺点就是占用大量内存资源;此外还可以采用Strassen矩阵乘法以及Winograd算法这两种高效算法来进行优化计算;目前广泛使用的现有计算库如Intel MKL以及NVIDIA cuDNN会根据具体的滤波器大小自动选择最优的操作算法以提高计算效率
(2) 池化层
基於特征图上的局部分析进行downsampling,在保持有用信息的同时减小了特征图的规模。相较于卷积层而言,池化层不包含可学习的参数。max-pooling在每个局部区域选择最大的值作为输出;而average pooling则计算每个局部区域的平均值作为输出。在局域化的应用中,max-pooling被广泛应用;相比之下,global average pooling是一种更为常见的全局聚合方法。

池化层主要具有三个方面的功能:1. 提升对位置的小变化的鲁棒性;2. 通过下采样空间局部区域来降低参数数量和计算复杂度;3. 最大池化带来的大 Collections带来了更强的非线性能力。值得注意的是,在某些网络架构中研究者倾向于采用步长为2的卷积操作取代传统的池化机制,并在生成式模型中发现不带池化层更容易训练成功。
