Published on

对CNN的理解

Authors

对CNN的理解

解决参数量爆炸的图像识别:CNN

想象一下,要做一个100*100像素彩色图片的图像识别需要多少个参数,假设我们有两个隐藏层,每个隐藏层10个节点,那么一共就是100*100*3*10*10=3000000这对一个简单的图像识别神经网络来说已经是一个天量的参数量,那有没有什么方法可以减少参数量呢?

卷积(convolution)

这是CNN的“核心引擎”。它使用一系列可学习的“滤镜”(或称为“卷积核”)在输入图像上滑动扫描,来检测特定的局部特征,比如边缘、颜色、纹理等。就像用不同功能的筛子去筛选图像中的特定信息 我们以一个6*6黑白像素的图片识别为例 ![[Pasted image 20250729091831.png]] ![[Pasted image 20250729091932.png]]

![[Pasted image 20250729091958.png]] 如图我们准备了一个3*3的矩阵,将这个矩阵与原图中的像素做点积,每次移动一个步长,将点积的结果加上一个偏置填入到特征图中,循环这个操作直到填满整个特征图,我们称这个操作为卷积,那个3*3的矩阵我们称作为卷积核 卷积核的尺寸和移动的步长都不是固定的,可按需求更改。 卷积的目的;

  • 特征检测器:每个卷积核通过训练,其内部的权重会逐渐优化,最终使它能对某种特定的微小模式产生强烈的响应(即输出一个较大的数值)。例如,一个卷积核可能最终学会了检测“垂直边缘”,另一个学会了检测“红色块”,还有一个学会了检测“人眼的弧度”。

  • 权重共享 (Weight Sharing):一个卷积核在扫描整张图片时,它的权重是固定不变的。这意味着,无论“垂直边缘”出现在图像的左上角还是右下角,同一个卷积核都能将它识别出来。这大大减少了模型的参数量,并赋予了模型平移不变性

  • 分层抽象:在CNN中,通常会使用很多个不同的卷积核来同时提取多种多样的局部特征。浅层的卷积层可能学习到边缘、颜色、纹理等基础特征;而深层的卷积层会在浅层特征图的基础上,将这些简单特征组合起来,形成更复杂的、更具语义的特征,比如“眼睛”、“鼻子”或“车轮”。 注:在进行窗口移动的过程中图片的边缘可能会有空缺,此时我们需要对空缺的部分进行填充。

池化(pool)

通常跟在卷积层之后。它的主要作用是“降维”和“压缩”,通过保留最显著的特征(比如取一个区域内的最大值)来减少数据量,这不仅能加快计算速度,还能让模型对物体在图像中的轻微位移不那么敏感,增强了模型的鲁棒性。 我们首先把卷积操作中得到的特征图经过一个激活函数生成一个新的特征图 ![[Pasted image 20250729092457.png]] 在下图中我们准备了一个2*2的窗口以2的步长在新的特征图中滑动,每次取窗口中的最大值,得到一个新的2*2的矩阵,我们称这个操作叫为最大池化 池化有很多种类型,最大池化只是其中的一种,其它的还有平均池化等。 ![[Pasted image 20250729092743.png]] 池化的目的如下;

  • 大幅减小数据尺寸(降维): 这是池化最直接的作用。一个 2x2 的池化操作可以让特征图的宽度和高度都减半,总尺寸变为原来的1/4。这使得后续层次的计算量大大减少,从而降低了整个网络的计算复杂度和内存消耗。

  • 增加感受野 (Receptive Field): 虽然池化层本身缩小了特征图,但对于更深层的卷积层来说,其单个神经元能够“看到”的原始图像区域反而变大了。这有助于网络学习到更加全局和抽象的特征。

  • 提供平移不变性 (Translation Invariance): 池化操作使得模型对特征在图像中的微小位置变化不那么敏感。例如,对于最大池化,只要那个最强的特征仍然在池化窗口内(即使位置移动了一点),输出的结果可能仍然是相同的。这增强了模型的鲁棒性(Robustness),让它能更好地识别物体,而不过分关注其精确位置。

  • 在一定程度上防止过拟合 (Overfitting): 通过减少参数数量(因为数据尺寸变小了)和进行特征降维,池化像一种正则化手段,有助于防止模型过度学习训练数据中的噪声和不重要的细节。

我们最后便可以把这个2*2的矩阵输入到一个相对简单的神经网络中得到结果 ![[Pasted image 20250729094623.png]]

Reference

[[Neural Networks Part 8 Image Classification with Convolutional Neural Networks (CNNs)]]