卷积神经网络的结构

卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络。典型的卷积神经网络结构如图 1 所示,可以分为卷积层、激活函数、池化层和全连接层。

图 1 卷积神经网络的结构

卷积层的工作原理

卷积层是通过卷积核对输入信息进行卷积运算,运算原理在之前的文章进行了详细讲解(卷积神经网络:卷积的运算过程),从而提取特征。

一个卷积神经网络往往有多个卷积层。在基于卷积神经网络的数字图像识别过程中,第一个卷积层直接接收图像像素级的输入,来提取其与卷积核相匹配的特征,并传递给下一层;接下来,每一层都以前一层提取出的特征作为输入,与本层的卷积核进行卷积运算,提取更加抽象的特征。同一个卷积层中可以有多个不同的卷积核,该卷积层的输入分别和这多个卷积核进行卷积运算,形成新的特征图。由此可见,特征图的个数与该卷积层卷积核的个数相关,该过程如图 2 所示。

图 2 一个卷积层含有多个卷积核的计算示意图

在卷积神经网络工作的过程中,无论是输入还是中间过程产生的特征图,通常都不是单一的二维图,可能是多个二维图,每一张二维图称为一个通道(channel)。比如一幅 RGB 图像就是由 R 通道、G 通道、B 通道 3 个通道组成。对与多通道的输入,每个通道采用不同的卷积核做卷积,然后将对应特征矩阵的元素进行累加即可。其过程如图 3 所示。

图 3 多通道、多卷积核的计算过程示意图

在图 3 所示的多通道多卷积核的计算过程中,输入为两个通道,卷积层中有 3 个卷积核,每个卷积核又分为两个子卷积核,其中第一个子卷积核与通道 1 的输入进行卷积,第二个子卷积核与通道 2 的输入进行卷积,然后将两个卷积结果的对应元素进行相加。例如,第一个输出特征矩阵中,(1,1)元素的计算过程如下:

[0 x 1 + 8 x 0 + 1 x 0 + 2 x (-1)] + [2 x 0 + 0 x (-2) + 9 x 2 + 2 x 0] = 16

在卷积神经网络中,卷积核中的元素是需要通过训练确定的,称之为参数。这里讲解一个重要概念——共享参数。所谓 ”共享参数“ ,是对于一幅输入图像或特征图,在进行卷积的过程中,其每个位置都是用同一个卷积核去进行运算的,即每个位置和同一组参数进行相乘,然后相加。

对于卷积神经网络来说,”参数共享“ 有什么意义呢?通过一个简单例子来说明:如果输入一幅像素为 1000 x 1000 的灰度图像,其输入为 1000 000 个点,在输入层之后如果是相同大小的全连接层,那么将产生 1000 000 x 1000 000 个连接,也就是说,这一层就有 1000 000 x 1000 000 个权重参数需要去训练;如果输入层之后连接的是卷积层,该卷积层有 6 个卷积核,该卷积核尺寸为 5 x 5,那么总共有 (5 x 5 + 1)x 6 = 156 个参数需要去训练(括号中的 1 代表同一个卷积核的偏置,后面详细介绍)。由此可见,与全连接层相比,卷积层需要训练的参数要少得多,从而降低了网络的复杂度,提高了训练效率,避免了过多连接导致的过拟合现象。

总结:卷积层的作用主要体现在两个方面:一是提取特征;二是减少需要训练的参数,降低深度网络的复杂度。

非线性激活函数的工作原理

我们需要在每个卷积层之后加入非线性激活函数。之所以要加入非线性激活函数,原因如下:卷积运算是一种线性运算,线性运算有一个性质——若干线性运算的叠加可以用一个线性运算来表示;如果将多个卷积运算直接堆叠起来,虽然进行了很多层卷积运算,但多层卷积运算可以被整合到一起并用一个卷积运算来代替,这与用多个卷积核设置多个卷积层来提取图像的不同特征并进行高级抽象的初衷是违背的。因此,在每个卷积层后面加一个非线性激活函数,那么每个卷积层的效果就可以得到”保留“。

非线性激活函数有很多种,ReLU 函数是卷积神经网络中常用的一种,它的表达式为 f(x)=max(0,x) ,对于输入的特征向量或特征图,它会将小于零的元素变为零,其他元素保持不变。由于 ReLU 函数的计算非常简单,所以它的计算速度往往比其他非线性函数快,加之其在实际应用中的效果很好,因此在很多深度网络中被广泛应用。

池化层的工作原理

池化操作实质上是一种对统计信息提取的过程。在卷积神经网络中,池化运算是对特征图上的一个给定区域求出一个能代表这个区域特殊点的值,常见的两种池化方法是最大池化和平均池化。

图 4 是最大池化示意图,将整个矩阵分为多个子区域,取每个子区域的最大值作为新矩阵中的对应元素。

图 4 最大池化层示意图

图 5 是平均池化示意图,与最大池化不同的是,它是取每个子区域的平均值作为新矩阵中的对应元素。

图 5 平均池化层示意图

池化层的主要作用表现在以下两方面。

  1. 减小特征图的尺寸。从上面的分析可知,特征图在经过池化后,尺寸减小了,这对于减少计算量和防止过拟合是非常有利的。

  2. 引入不变性。比如最常用的最大池化是选取特征子图区域中最大的那个值,所以这个最大值无论在子区域的哪个位置,通过最大池化运算总会选到它;所以这个最大值在这个子区域内的任何位移对运算结果都不会产生影响,相当于对微小位移的不变性。

卷积神经网络与全连接神经网络的区别

通过上面的介绍,相信大家对卷积神经网络的结构和各部分的功能有了一定的了解。那么,本节讲到的卷积神经网络与全连接神经网络有哪些区别呢?

区别1:架构上的区别

全连接神经网络为平面网络,主要有输入层、激活函数、全连接层组成;卷积神经网络为 ”立体网络“,其组成包括输入层、卷积层(可能有多个)、激活函数(可能有多个)、池化层(可能有多个)、全连接层,两者的区别如图 6 所示。

图 6 架构上的区别

区别2:功能上的区别

全连接神经网络:无法对输入量进行特征提取;

卷积神经网络:可以实现特征自动提取功能。


最后

从0到1!大模型(LLM)最全学习路线图,建议收藏!

想入门大模型(LLM)却不知道从哪开始? 我根据最新的技术栈和我自己的经历&理解,帮大家整理了一份LLM学习路线图,涵盖从理论基础到落地应用的全流程!拒绝焦虑,按图索骥~~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐