卷积神经网络CNN入门

卷积神经网络应用领域

因为卷积神经网络主要应用场景就是计算机视觉任务,因此有必要简单介绍一下CV领域发展情况:

在这里插入图片描述

可以发现,在 ImageNet 图像数据集中分析图像的错误率十年间已经被深度学习给降低到了比人类(HuMan)识别错误率还低的地步了(所以后来这比赛就没再往下办了,因为已经达到目的了),说明其发展之迅猛。

比如CV中的检测任务:

在这里插入图片描述

分类与检索:

在这里插入图片描述

超分辨率重构:

在这里插入图片描述

医学任务:

在这里插入图片描述

无人驾驶:

在这里插入图片描述

人脸识别:

在这里插入图片描述

小结一下,基本上暂时能够想到的一些传统计算机视觉任务或者说以后可能会出现的计算机视觉任务全部都可以用这个CNN卷积神经网络来完成实现。

卷积的作用

卷积神经网络比普通神经网络多了两个字:卷积,那么区别到底有什么?

在这里插入图片描述

上图左侧便是我上一篇文章说的普通的神经网络,是一个由多层神经元组合起来的网络。

而右侧则是我们即将要学习的卷积神经网络,直观上不难看出,貌似在神经元的组织方式上有一些区别:左侧普通网络貌似是二维的,而右侧的卷积网络则是三维的。

实际上这种猜测是正确的,我们上文介绍网络基础时一直强调图片的输入数据先当作二维来计算,即输入一张图片的所有像素点(假如是784个像素点),但这里我们终于可以当成三维来计算了,即直接输入一张图片的原始数据(如 28*28*1 的一张图片)。

接下来我们要处理的数据,全是这种三维的 h*w*c 的形式。我们不会再像之前一样先把数据拉成一个向量,而是直接对图像数据进行一个特征提取。

整体架构

先对卷积神经网络的整体架构做一个简单介绍:

在这里插入图片描述

输入层

在卷积神经网络(CNN)中,输入层是网络的起始部分,它负责接收原始数据并将其转换为网络可以处理的形式。对于图像识别任务,常见的输入结构是将图像分割为固定大小的图块,每个图块作为一个输入。这样做的好处是可以保持图像的空间结构信息,并且减少模型的参数量。

具体来说,卷积神经网络的输入层可以处理多维数据。一维卷积神经网络的输入层接收一维或二维数组,其中一维数组通常为时间或频谱采样;二维数组可能包含多个通道。二维卷积神经网络的输入层接收二维或三维数组,而三维卷积神经网络的输入层则接收四维数组。由于卷积神经网络在计算机视觉领域应用较广,因此许多研究在介绍其结构时预先假设了三维输入数据,即平面上的二维像素点和RGB通道。

在设计卷积神经网络的输入输出结构时,需要考虑模型的深度和宽度。深度指的是网络的层数,而宽度则指的是每一层的神经元数量。深度和宽度的选择要根据任务的复杂度和数据的规模来确定。较深的网络可以提取更多的抽象特征,但也容易出现梯度消失或梯度爆炸的问题。较宽的网络可以增加模型的表达能力,但也会增加计算和存储的开销。因此,需要在深度和宽度之间进行权衡,找到一个合适的平衡点。

此外,输入层还可能涉及一些预处理步骤,如归一化、去噪等,以提高数据的质量和一致性,进而提升模型的训练效果。

卷积层

卷积层是卷积神经网络(CNN)中的核心层次,其主要作用是对输入的二维图像进行卷积操作,提取图像的特征。

卷积运算的目的是提取输入的不同特征,如边缘、线条和角等层级。卷积操作可以看作是一种滑动窗口操作,即将一个小的窗口在输入的图像上滑动,并在每个位置上计算窗口内像素值与卷积核(也称为滤波器)的点积,得到一个新的特征图(也称为卷积特征)。不同的卷积核可以提取不同的特征,例如边缘、形状、颜色等,而相邻的特征图则对应着不同的卷积核。

卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积层能够保持数据的空间结构,并通过共享权重减少参数数量,提高学习效率和准确度。

卷积层的输出通常会经过激活函数,以引入非线性特性,增强网络的表达能力。随后,可能会经过池化层,以降低特征图的维度,减少计算量和防止过拟合。

在设计卷积神经网络时,卷积层的深度和每个卷积层中的滤波器数量都是重要的超参数,需要根据具体任务和数据集进行调整。

简单的说就是:卷积就是提取特征。

池化层

卷积神经网络(CNN)中的池化层是一种重要的组成部分,它位于卷积层之后,主要起到降采样的作用。池化层通过降低卷积神经网络中的空间维度,减少参数数量和计算复杂度,同时保留重要的空间信息。

池化层有多种不同的形式,其中最常见的是非线性池化函数,如最大池化(Max Pooling)和平均池化(Average Pooling)。在最大池化中,池化层将输入的图像划分为若干个矩形区域,然后在每个子区域中输出最大值。这种机制能够有效地降低数据的空间大小,因为在一个特征被检测后,它的精确位置通常不如它与其他特征的相对位置关系重要。平均池化则是取每个子区域中元素的平均值作为输出。

池化操作具有不变性,即无论输入数据中的元素如何变化,池化操作结果的相对位置不变。这种特性使得模型对于输入的小位置变化更加稳定,有助于提升模型的平移不变性。

此外,池化层还有助于减少过拟合。通过减少特征图的尺寸,池化层能够降低模型对于训练数据中噪声和微小变化的敏感度,从而增强模型的泛化能力。

简单的说就是:池化就是压缩特征。

全连接层

卷积神经网络(CNN)中的全连接层在整个网络中扮演着分类器或回归器的角色。它通常位于卷积层和池化层之后,将学到的“分布式特征表示”映射到样本标记空间,从而进行分类或回归等任务。

全连接层的每一个结点都与上一层的所有结点相连,即第n-1层的任意一个节点,都和第n层所有节点有连接。因此,全连接层在进行计算时,激活函数的输入是上一层所有节点的加权。这种连接方式使得全连接层能够充分利用前一层的所有特征信息。

在实际应用中,全连接层可以由卷积操作实现。对于前层是全连接的全连接层,可以转化为卷积核为1x1的卷积;而对于前层是卷积层的全连接层,可以转化为卷积核为hxw的全局卷积,其中h和w分别为前层卷积结果的高和宽。

全连接层的特点包括:

稠密连接:每个神经元都与上一层的神经元相连,虽然可以充分利用前一层的特征信息,但也带来了大量的计算量。
限制输入数据:定义好全连接层后,其权重就确定好了,这要求输入数据与全连接层的权重矩阵相匹配。因此,需要对输入的特征图进行统一处理,并限制拉伸的一维向量的元素个数,这可能会影响信息处理结果。

卷积层作用详解

那么卷积层究竟做了一件什么事情呢?

在这里插入图片描述

上图左侧我们可以看到如我们之前所说,CNN使用输入图片的原始的三维数据进行计算,所以逻辑上它是一个立体的长方体样子。

对于图片的特征提取,我们也说过,不同位置的特征肯定是不一样的(一只猫图片的鼻子耳朵以及整张图片的背景等等特征肯定都是不同的吧?),因此我们需要对整张图不同的区域提取出来不同的特征,说白了就是我们知道鼻子特征很重要,相反它的所处背景的特征不重要。

所以基于这种想法,我们会将图片分成很多部分,这样就可以实现对图片不同区域的部分进行区别处理了。

所以做卷积时,我们会将输入数据的图片切成这样(草图,理解就行):

在这里插入图片描述

可以看到被分割成了很多小块,且每一个小块都是由多个像素点组成的。

比如说上面的标号为一的小块,它是一个 5*5 大小的像素块(注意,这里我们先分析一个二维平面的卷积是如何做的,最后的三维也只不过是把三维层面的三个二维平面加起来得到,因此理解了一个二维平面的卷积是如何做的那么将有助于理解三维的做法),也就是上图右侧的部分:

在这里插入图片描述

这个蓝色大方块就是我们左侧那个方体中标号为 1 的小块放大后的样子,此时我们就对这个1号像素小块进行特征提取(其它各个小块都是一样的,这里就以 1 号为例,其它以此类推)。

注意这里这个图有一点误导性,不过没关系,可以直接看作是对输入的原始图片数据做了简单的预处理,即我们将其分成了很多很多个 5*5*3 的小块(这里的 *3 的意思是它有RGB三通道捏,因为我们这里是先讲一维平面的情况,因此上图中显示出来就是一个5*5大小的正方形,而不是正方体),然后对每个小块进行卷积操作(相当于这个小块就成了我们要卷积的图片数据了)。

那么现在我们怎么才能拿到这个小块的特征值呢?

之前说过,在神经网络当中我们使用权重参数矩阵 W 来获取特征值,卷积神经网络当中也是一样。

来看下图中第一个深色的窗口部分:

在这里插入图片描述

窗口内较大的数字组成的矩阵,相当于就是真实的输入数据 x1 :

3 3 2
0 0 1
3 1 2

而窗口内较小的数字组成的矩阵,就是我们的权重参数矩阵 W1 :

0 1 2
2 2 0
0 1 2

因此这又回到了经典的神经网络做法:我们要找的依然还是最好的权重参数矩阵使得特征提取完之后效果能达到最好。

最终我们可以通过 x1 与 W1 计算得到一个得分值,假设计算得到的值为上图右侧部分的深绿色框内的 12 。

然后继续向下移动卷积:

在这里插入图片描述

在这里插入图片描述

直到卷积结束,最终我们可以得到一个上图中深绿色部分的矩阵,我们一般将其叫做特征图。

卷积特征值计算方法

先来看一下之前提到的图像颜色通道:

在这里插入图片描述

因为图像是有颜色通道的,所以说实际在做计算的过程当中我们需要对每一个颜色通道分别做计算,最后将我们每个颜色通道的计算结果都加到一起就可以了。

因此上一节中举的卷积的例子,实际上的逻辑应该是下面这样的(上节中讲的内容相当于只是一个颜色通道内发生的事情):

在这里插入图片描述

上图形象的展示了分别计算 RGB 三通道之后再相加以拿到最后的结果的过程。

在这里插入图片描述

上图可能会更形象一点,CNN会找到图片数据中一个立体的区域然后对这个区域进行特征提取后得到一个特征值,所有特征值合起来就得到了一个特征图。

之前的一维平面的分析可能还是不太形象,因此接下来我们再来重点分析一下这个卷积特征值的计算方法:

在这里插入图片描述

上图中最左侧蓝色列的数据是我们的输入数据,其大小为 7*7*3 ,总共有三行(所以是*3),分别表示了三颜色通道的 R、G、B:

在这里插入图片描述

然后我们要分区域对当前输入数据进行特征提取,也就是下图中的 Filter W0,其实就是我们随机初始化的一组权重参数:

这里务必要记住输入数据的RGB是三颜色通道,那么我们的权重参数矩阵 W0 的第三个参数也必须为 3(即H*W*C中的C必须要对应嗷),要一一对应。
因此这里我们的 W0 大小就为 3*3*3。

每一个颜色通道都会对应一组权重参数:

在这里插入图片描述

这三个颜色通道对应的合起来的权重参数组 Filter W0(3*3*3)被称为卷积核。

如果这个权重参数矩阵被设置为了 4*4*3大小(注意3是不会变的嗷,除非你使用的图片不是RGB),那么对应的对于输入数据所选择区域大小也要是 4*4 的:

在这里插入图片描述

这也就意味着 W0 大小的前两个值表示的就是 h 和 w 嘛,代表着我们会在原始图像当中按每多大的小区域选出来一个特征,最后一个值就是RGB颜色通道的个数,一般为 3 。

另外,我们也可以明显看出来RGB三色通道所对应的 W0 权重参数组内的值是不一样的:

在这里插入图片描述

所以我们要注意同一个输入数据当中不同的部分由于其处于不同的颜色通道当中,其对应的像素点的值是不一样的,因此权重参数也会设置的不一样。

那么如何进行计算?

其实很简单,都是进行的内积运算:对应位置相乘,所有结果加一起就可以。

以上图中的 R 通道为例,其第一个小区域内的矩阵值为:

0 0 0
0 1 1
0 1 1

其对应的权重参数值为:

1 1 1
-1 -1 0
-1 1 0

那么计算就是:

(0*1 + 0*1 + 0*1 ) + (0*(-1)+1*(-1)+1*0) + (0*(-1)+1*1+1*0) = 0

同理计算 G 和 B 通道:G = 2,B = 0;

三者相加结果为 2,这算的是由这个 Filter W0 权重参数矩阵所计算出来特征提取的一个值,然后还需要加上一个 b 参数,即我们的一个偏置项,在上面的例子中,这个 b 的值为 1 。

因此最终结果为 3,它就被放进了我们的特征图中,也就是下图中右侧绿色圈圈出来的位置:

在这里插入图片描述

由此第一个小区域的特征值就计算出来了,为 3 。

而特征图就是 CNN 执行完一次卷积后所得到的结果。

得到特征图表示

由上一节的例子可以知道,我们使用一组权重参数矩阵 W0 ,但仔细看会发现还有一组权重参数矩阵 W1,这就相当于两种不同的特征提取的方法了,既然经过 W0 可以拿到一张特征图,那么经过 W1 同样也可以拿到:

在这里插入图片描述

对应上节的内容,如上图所示,我们可以拿到两张特征图。

也就是说对于同样的数据来说,我们可以多尺度多粒度的进行特征提取,即使用多个卷积核来进行特征的计算提取。

这样可以让我们的特征更加丰富起来。

注意:同一个卷积层当中卷积核的规格大小必须相同,如果想用不同规格的卷积核可以使用多卷积层的方式。

对于特征图的表示:

在这里插入图片描述

可以看到其规格大小为 3*3*2,前两个依然是表示 h 和 w,表示对原始输入数据所选取特征区域的大小,最后一个则表示深度,即表示特征图的个数。

至此 CNN 就完成了一次卷积操作,接下来呢?

接下来就会像我们之前描述的那个一维平面的流程一样,跟滑动窗口类似一个一个往下滑:

在这里插入图片描述

直到选取完所有的输入数据,这样最终的特征图就可以得到最终的特征图了。

注意:每次移动的步长或者说大小都是一样的,并且是我们可以自己调节的。

步长与卷积核大小对结果的影响

然而,大多数情况下,做一次卷积是不够的:

在这里插入图片描述

我们会对卷积层得到的特征图继续重复的卷积:

在这里插入图片描述

卷积当中我们可以无限制的往下堆叠,但是一般不会这么做,任何事情过度了显然都是不好的。

这涉及到卷积层相关的参数,通过对相关参数的分析我们可以推理多少层卷积是会比较合适的:

在这里插入图片描述

滑动窗口步长

在这里插入图片描述

可以看见移动步长不同所产生的特征图结果也是不同的,步长越小得到的特征图越大,这意味着我们在慢慢的细粒度的去提取特征,这样得到的特征是会比较丰富的,反之亦然。

一般来说对于图像任务,步长选择为 1 是比较常用的。

卷积核尺寸

和滑动窗口基本差不多,一般情况下设置为 3*3 大小是比较常见的。

边缘填充

在卷积神经网络中,边缘填充(Padding)是一种重要的技术,主要用于处理卷积运算时图像边缘像素的损失问题。随着卷积层数的加深,输出会逐渐缩小,这可能导致图像的边缘信息丢失,从而影响网络的性能。因此,提出了填充的方法来方便网络的进一步加深。

填充的主要目的有两个:一是保留边缘信息,确保卷积核能够涵盖图像的边缘,从而保留更多的信息;二是避免信息丢失,减缓输出尺寸的减小,使图像的边缘信息不会过快地丢失。

填充的方法通常是在输入的高和宽两侧分别填充一定数量的虚拟数据,如0元素,然后再进行卷积运算。这样,卷积核在运算时就能够覆盖到边缘像素,使得边缘像素也能被充分学习和利用。

根据填充方式的不同,可以分为边界零填充、间隔填充等。边界零填充是最常见的填充方式,即在输入数据的边缘周围填充一定数量的零。而间隔填充则是根据设定的间隔大小,在像素之间插入一定数量的零。

要说这个就又不得不搬出上面说过的图作例子了:

在这里插入图片描述

在上图红色圈圈起来的地方有一个 +pad 1 ,什么意思?

pad 就是填充的意思,对于原始输入数据我们不难发现其除外圈第一层为一圈灰色的 0 ,其内部数字都是紫色的,明显这里采用的就是边界零填充的方法,最外层那一圈 0 就是我们填充上去的。

原因刚刚也说的很清楚,在滑动窗口移动中,越往边界的像素点其能够被利用提取的次数越少,而越往中间的像素点其能够被利用提取的次数越多,因此为了尽量避免这种特征损失才采用了这种边界填充的方法,这样就可以让边界上的点多被提取几次,一定程度上弥补了一些边界信息缺失的问题。

卷积核个数

卷积核个数说白了就是最终计算完成之后我们期望要得到多少个特征图。

比如我们想要十个特征图,那么我们就应该设置十个卷积核。

但是要注意的是这十个卷积核其内部的参数值都应该是不一样的,一开始随机初始化后就分别进行各自的一个参数的更新。

特征图尺寸计算与参数共享

卷积结果计算公式

在这里插入图片描述

举一个例子:

在这里插入图片描述

卷积参数共享

在卷积神经网络(CNN)中,卷积参数共享是一种重要的特性,它极大地提高了网络的效率和泛化能力。

参数共享意味着在一个模型的多个函数中使用相同的参数。在传统的神经网络中,每个权重矩阵的元素只使用一次。然而,在卷积神经网络中,卷积核(或滤波器)的每个元素都作用在输入的每一个位置上。也就是说,一个卷积核会扫遍整个输入,而不是每个位置都对应一个不同的卷积核。这种参数共享的方式使得我们只需要学习一个参数集合,而不是对于每一个位置都需要学习一个单独的参数集合。

这种参数共享的方式有几个重要的好处。首先,它显著减少了需要学习的参数数量。由于卷积核在输入数据上滑动时参数保持不变,因此网络只需要学习一组参数,而不是每个位置都学习一组独立的参数。这大大降低了模型的复杂性,使得训练更加高效。

其次,参数共享提高了模型的泛化能力。由于卷积核在整个输入上滑动,它能够从不同的位置提取相同的特征。这使得模型对于输入数据的平移、旋转等变换具有不变性,从而提高了模型的鲁棒性。

此外,参数共享还有助于提取图像的局部特征。由于卷积核在输入数据上滑动时参数保持不变,因此它能够捕捉到图像中不同位置的相同特征。这种局部特征提取的能力使得卷积神经网络在图像处理和计算机视觉任务中表现出色。

在这里插入图片描述

以我们之前提到的例子举例来理解卷积参数共享:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

从上述滑动过程中可以发现,我们的卷积核中的参数都是一套,并没有发生变化,因此CNN的这种机制极大地提高了网络的效率和泛化能力。

池化层的作用

池化层理论

卷积神经网络(CNN)中的池化层是一个至关重要的组成部分,它位于卷积层之后,主要用于降低特征图的维度(即下采样)并提取主要特征。以下是关于池化层的详细解释:

池化层的作用:

降低维度:池化层通过减少特征图的空间尺寸(即高度和宽度),降低了网络中的参数数量和计算复杂度。这有助于防止过拟合,并提高模型的泛化能力。

提取主要特征:池化操作有助于提取输入中的主要特征,并减少对输入中微小变化的敏感性。这使得模型更加鲁棒,对图像的平移、旋转和尺度变化具有一定的不变性。

增大感受野:通过减少特征图的空间尺寸,池化层可以间接增大后续卷积层的感受野。感受野是指一个神经元能够“看到”的输入区域的大小。增大的感受野有助于模型捕获更全局的信息。

常见的池化操作:

最大池化(Max Pooling):这是最常见的池化操作。在最大池化中,池化层将输入的特征图划分为若干个矩形区域(称为池化窗口),然后在每个池化窗口内选择最大值作为输出。这种操作可以保留最显著的特征,并减少噪声。

平均池化(Average Pooling):与最大池化不同,平均池化计算每个池化窗口内所有元素的平均值作为输出。这种操作可以保留特征图的整体信息。

其他池化方法:除了最大池化和平均池化外,还有一些其他池化方法,如随机池化、中值池化等。这些方法在某些特定任务中可能具有优势。

池化层的参数:

池化层通常具有一些可配置的参数,如池化窗口的大小(例如2x2、3x3等)、步长(stride)和填充方式(padding)。这些参数可以根据具体任务和网络结构进行调整。

池化层的优点:

减少计算量:通过降低特征图的维度,池化层减少了后续层的计算量,提高了模型的训练速度。

提高鲁棒性:池化操作使得模型对输入中的微小变化更加鲁棒,提高了模型的泛化能力。

防止过拟合:通过减少参数数量和复杂度,池化层有助于防止过拟合现象的发生。

池化层图解

我们通过例子来理解池化层的概念:

在这里插入图片描述

从上图可以得知,假设在上一层卷积层操作结束后,我们的特征图结果大小为 224*224*64 个像素,可以说是一个非常庞大的数据了。

虽然我们确实是想要更为丰富的特征数据,但是这么大数量的特征点并不一定都是有用的,那么此时CNN就需要池化层来做一个压缩(下采样)操作了。

从上图可以知道,经过池化层(pool)压缩过后,特征图数据大小变为了:112*112*64 个像素,压缩了不少。

但是在压缩时丢弃数据的行为也不是说随便进行丢弃的,我们肯定是有一套规则的。

首先我们依然会有一个滑动窗口来框住一个所选区域:

在这里插入图片描述

在这个区域内CNN会选出一个特征值最大的值(说明这个特征很重要)放入上图右侧的一个小矩阵中,然后的流程与之前差不多,滑动窗口不停的滑动,直到遍历完所有的数据:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

即指定一种方式,在我们原来的卷积层得出的特征图基础上进行一个筛选,然后组成新的精简版的特征图。

而上面这这一种方式就是最大池化的思路:

在这里插入图片描述

注意:只是变特征图的长和宽,并不会改变特征图的个数。

至于平均池化的方式已经被淘汰了,因为其效果并不如最大池化方式,故不再赘述。

整体网络架构

到这里我们可以总结一下整个的卷积神经网络是怎么样去进行一个实际任务的:

在这里插入图片描述

以上图为例,总共经过了七层的变换(注意:带有参数进行计算的才能称为“层”,ReLU和Pool层都不带参数计算,因此不算一层),首先图片数据输入被卷积层提取特征(看到ReLU了吗,卷积层和ReLU是一个组合,二者是不可分开的)然后被 ReLU 激活函数激活,再进行下一卷积层卷积,然后池化层压缩,循环往复最后经过全连接层转换输出最后的数据。

然后仔细观察可以发现除了卷积层是和激活函数一起组合使用的规律之外,还可以发现基本上都是执行两次卷积就会进行一次池化,这也是一种基本的神经网络的套路。

还有要注意的一点,就是在最后的 FC 全连接阶段以前(也就是不断的循环卷积池化-卷积池化的过程)进行的只是特征的提取,最后的结果也是一个三维的数据或者说立体的数据,比如是 32*32*10 大小的一个特征图,那我们怎么样对它进行分类任务呢?或者说怎么把这个立体的东西转换为五分类的概率值呢?

因为前面的卷积池化做的仅仅只是特征的提取,因此最后想要得到一个合适的结果还是得靠全连接层捏。

这里可以回顾一下我上一篇文章神经网络入门里提到的传统神经网络的部分,反正大意就是我们需要对这个 32*32*10 大小的数据进行一个“拉伸”,将它“拉伸”成一个一维的特征向量,然后即可进行全连接层的转换操作以最终得到一个分类结果。

这些就是整个卷积神经网络的生命周期所做的所有事情。

再来看一下特征图的变化过程:

在这里插入图片描述

相信经过前文的描述,这个图已经很好明白了,不再赘述。

补充:感受野

感受野是卷积神经网络(CNN)中的一个重要概念,起源于人类神经系统,后随神经网络模型在计算机视觉(CV)领域的应用引入到计算机视觉领域。在卷积神经网络中,感受野通俗地理解是:每一层输出的特征图上的像素点在原始图像上映射的区域大小。它表达的含义是:特征输出受感受野区域内的像素点的影响。

感受野的值越大,表示神经元能接触到的原始图像范围就越大,可能蕴含更为全局、语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此,感受野的值可以用来大致判断每一层的抽象层次。

感受野在计算网络结构、设计网络时起着重要的作用。在设计网络时,可以通过调整卷积核的大小、步长、是否使用空洞卷积等因素来增大或减小感受野,以适应不同的任务需求。例如,在处理需要全局信息的任务时,可以通过增大感受野来捕获更多的上下文信息;而在处理需要精细细节的任务时,则可以减小感受野以关注更局部的特征。

需要注意的是,增大感受野并不总是有益的。过大的感受野可能会导致模型过于复杂,增加计算量,甚至可能导致过拟合。因此,在调整感受野时,需要在保证模型性能的前提下进行权衡。

以卷积神经网络(CNN)中的卷积层为例,感受野的概念可以这样理解:

假设我们有一个简单的CNN,其中有两层卷积层,每层都使用3x3的卷积核,步长(stride)为1,且不使用padding。现在,我们考虑第一层卷积层的一个神经元,它的感受野就是3x3的区域,即它能够“看到”的输入图像的区域大小。

在这里插入图片描述

当我们进入第二层卷积层时,每个神经元会接收来自第一层卷积层的特征图作为输入。由于第一层的感受野是3x3,并且第二层也使用3x3的卷积核,那么第二层的一个神经元实际上能够“看到”的原始图像区域就是5x5。这是因为每个第二层的神经元会查看第一层中3x3的区域,而每个这样的区域又对应原始图像中的3x3区域。所以,第二层的感受野就扩大到了5x5。

这个过程可以随着网络深度的增加而继续。每增加一层卷积层,感受野都会相应地扩大。通过计算,我们可以得出每一层卷积层的感受野大小。这个计算通常涉及到卷积核的大小、步长以及是否使用padding等因素。

这个例子展示了感受野是如何随着网络层数的增加而扩大的。通过调整网络结构和参数,我们可以控制感受野的大小,从而适应不同的任务需求。例如,在处理需要全局信息的任务时,我们可以设计具有较大感受野的网络;而在处理需要精细细节的任务时,则可以设计具有较小感受野的网络。

相关推荐

  1. 神经网络 (CNN)

    2024-04-23 00:56:02       22 阅读
  2. Python中的神经网络CNN入门

    2024-04-23 00:56:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-23 00:56:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-23 00:56:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-23 00:56:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-23 00:56:02       18 阅读

热门阅读

  1. 【程序设计与算法——C/C++入门】C语言入门

    2024-04-23 00:56:02       17 阅读
  2. 37-4 用Python编写SQL注入的基于错误报告的POC

    2024-04-23 00:56:02       12 阅读
  3. 12.Vue2.x收集表单数据input | v-model | select

    2024-04-23 00:56:02       13 阅读
  4. STM32 CAN发送邮箱和接收FIFO

    2024-04-23 00:56:02       9 阅读
  5. 若依学习记录

    2024-04-23 00:56:02       12 阅读
  6. 聚类算法的学习

    2024-04-23 00:56:02       11 阅读
  7. uniapp微信小程序蓝牙连接与设备数据对接

    2024-04-23 00:56:02       12 阅读
  8. 《1w实盘and大盘基金预测 day25》

    2024-04-23 00:56:02       11 阅读
  9. 笨蛋学C++【C++基础第三弹】

    2024-04-23 00:56:02       11 阅读
  10. element UI 走马灯 initial-index动态赋值 不生效问题

    2024-04-23 00:56:02       12 阅读
  11. 【华为OD机试】最长连续手牌【C卷|200分】

    2024-04-23 00:56:02       9 阅读
  12. 金融风险评估都有什么模型

    2024-04-23 00:56:02       13 阅读