首页 > 编程知识 正文

为什么有多层卷积层池化层,卷积层池化层全连接层

时间:2023-05-06 15:31:34 阅读:251150 作者:391

卷积核基本概念

全连接网络的问题在于参数太多,例如一个尺寸为 200 × 200 × 3 200 times 200 times 3 200×200×3的图像会让下一层隐藏层中的一个神经元包含 200 × 200 × 3 = 120 , 000 200 times 200 times 3 = 120,000 200×200×3=120,000个权重,而且这一层中可能还不止一个神经元。过多参数带来的后果就是容易导致过拟合,而且不容易训练。因此需要通过一些手段来减少参数数量,降低训练难度。所以就有了卷积神经网络。

卷积神经网络由卷积核组成,所以先从卷积核说起。每一个卷积核只与前一层中的一小块区域连接,所以可以大大减少参数数量。这小块连接的区域称为“感受野”,相当于是卷积核的视野,即卷积核可以“看到”的部分。前一层的输出可以是图片,也可以可以是卷积/池化层的输出。还是用尺寸为 200 × 200 × 3 200 times 200 times 3 200×200×3的图像作为例子,假设网络结构为输入-卷积层-输出,卷积层中单个卷积核大小为 3 × 3 3 times 3 3×3,总共10个卷积核,那么整个网络就只有 10 × ( 3 × 3 × 3 + 1 ) = 280 10 times (3 times 3 times 3 + 1) = 280 10×(3×3×3+1)=280个参数:单个卷积核的参数个数中加上1是因为通常每个卷积核会配备上一个偏置;之所以是 3 × 3 × 3 3 times 3 times 3 3×3×3是因为卷积核是 3 × 3 3 times 3 3×3大小,而图片深度是 3 3 3(3通道,R、G、B),且卷积核深度必须与输入深度保持一致。这样对比下来,全连接层中的一个神经元就需要 120 , 000 120,000 120,000个参数,而卷积神经网络中一个 3 × 3 3 times 3 3×3卷积核只需要 28 28 28个参数。

卷积核只与前一层中的一小部分连接:上图左侧红色部分为图片,右侧框选出的蓝色部分为卷积核,整个蓝色方块是由多个卷积核组成的卷积层

为了配合部分连接,卷积神经网络还运用了权值共享来减少参数数量。具体做法就是将卷积核在图片上移动(即移动卷积核的感受野)来计算出输出(输出通常称为feature map)。feature map的长宽就是卷积核在图片上移动的次数,深度就是卷积核的个数。这样最后需要训练的参数就只有卷积核中的 3 × 3 + 1 3 times 3 + 1 3×3+1个权值参数。注意这里是以 3 × 3 3 times 3 3×3大小的卷积核作为例子,其实还有别的大小/形状的卷积核。卷积核输出的feature map长/宽可以通过以下公式计算:

首先上定义:

输入数据尺寸为 W 1 × H 1 × D 1 W_1 times H_1 times D_1 W1​×H1​×D1​4个超参数: 滤波器数量 K K K滤波器尺寸 F F F(可以是长方形,但是通常都是正方形,所以这里也是以正方形的滤波器为例子)步长 S S Szero padding,在输入数据边缘补充的0的数量 P P P

然后可得:
输出数据体尺寸为: W 2 × H 2 × D 2 W_2 times H_2 times D_2 W2​×H2​×D2​, W 2 = ( W 1 − F + 2 P ) / S + 1 W_2 = (W_1 - F + 2P)/S + 1 W2​=(W1​−F+2P)/S+1, H 2 = ( H 1 − F + 2 P ) / S + 1 H_2 = (H_1 - F + 2P)/S + 1 H2​=(H1​−F+2P)/S+1, D 2 = K D_2 = K D2​=K

下图是2个深度为3的 3 × 3 3 times 3 3×3大小卷积核在输入上进行卷积操作的示意图。

上图来自CNN笔记:通俗理解卷积神经网络,作者是v_JULY_v

左侧就是3通道/深度为3的图片/输入数据(浅蓝色),蓝色框选出的部分象征卷积核的视野/感受野,输入就这样和卷积核的参数一一对应相乘并求和(求和是因为要和偏置求和;可以看上图中的数字,自己计算一下来理解)。

总结:

为了减少参数数量,卷积核采用了一下方法:

部分连接:卷积核只与输入的局部直接连接,从而减少了参数数量,更不容易过拟合权值共享:同一个feature map中数据共享同一个卷积核的权值

备注:数学中的卷积和卷积神经网络中的卷积严格意义上是两种不同的运算!具体解释看哪位wndbl能解释一下卷积神经网络的卷积核?

卷积核的滤波作用

全连接神经网络有一个很大的缺点就是,它其实不能够很好地去学习图案中的结构。如果将全连接网络的神经元中的参数转换成类似热度图的图(如下图),可以发现基本上看不出什么结构,也就是说全连接网络的神经元并不能够学习图案中的结构。

如果输入一张随机生成的图片,那么这个全连接网络可能会错误地认为这张图片中的内容是数字“5”。

以上两张图片截图自3blue1brown的视频,b站av号为16144388

而卷积核则不同,如果将卷积核权值转换为图片,可以大概看出它在寻找的是什么轮廓/纹路:

上图来自同一个卷积层中的 Feature Map有什么区别?中紧张的胡萝卜的回答

可以看出,卷积核具有把握图像局部特征的能力。

但是为什么卷积核具有这样的能力?这就要从传统的滤波器开始说起。

首先是一些说明。此处的“滤波器”与卷积核的行为基本相同,只是权值是给定的。滤波器的运算行为如下图所示(其实上面的动图里面已经提过一次运算行为了,保险起见再放一次):

注意,上图中被卷积的输入已经经过了zero padding,即在周围pad上一圈0。这是一种常见的做法,目的是调整输出的大小。pad的圈数可以大于1

上图均来自CNN笔记:通俗理解卷积神经网络

接下来看图像滤波。

常见的两种图像空间滤波的常见操作为:

平滑滤波边缘提取

假设有这么一张图片:

和这么个滤波器:

得到的效果:

a)就是将中心像素值与周围临近的像素进行平均,自然就能“削峰填谷”,实现平滑处理
b)就是将中心像素值复制n份,然后减去周围的n个临近像素值。所以如果是在区域位置(四周像素值都很相近),像素值肯定就“减”为0;只有在边缘位置(与周围的像素值差别比较大),相减后才能留下。

上面3张图片均来自哪位wndbl能解释一下卷积神经网络的卷积核?中superbrother的回答

可知,滤波器在图片上滑动并进行相应的运算,可以得到提取出轮廓/经过滤波的图像。

同样的,卷积核也能够起到“滤波”的作用,只是它的参数是通过训练得到的,而不是一开始就设定好了的。

以上便是单个卷积核的基本概念,通常CNN中单层卷积层含有不只一个卷积核,用来捕捉不同的局部特征。

池化

池化其实很简单,只是一种运算规则。CNN中池化层没有参数。

以下内容及图片直接引用自卷积神经网络(CNN)学习笔记1:基础入门

通过卷积层获得了图像的特征之后,理论上我们可以直接使用这些特征训练分类器(如softmax),但是这样做将面临巨大的计算量的挑战,而且容易产生过拟合的现象。为了进一步降低网络训练参数及模型的过拟合程度,我们对卷积层进行池化/采样(Pooling)处理。池化/采样的方式通常有以下两种:

Max-Pooling: 选择Pooling窗口中的最大值作为采样值;
Mean-Pooling: 将Pooling窗口中的所有值相加取平均,以平均值作为采样值;Mean-Pooling: 将Pooling窗口中的所有值相加取平均,以平均值作为采样值;

参考资料

CS231n课程笔记翻译:卷积神经网络笔记:CS231n官方笔记的翻译,有些细节的地方出了问题,但是总体还是值得一看的
Feature map of a convolutional layer [duplicate]:feature map的定义
卷积神经网络(CNN)学习笔记1:基础入门 :
卷积神经网络为什么叫卷积呢?:数学上的卷积和深度学习的卷积的相/不同
【官方双语】深度学习之梯度下降法 Part 2 ver 0.9 beta
同一个卷积层中的 Feature Map有什么区别?
CNN笔记:通俗理解卷积神经网络
哪位wndbl能解释一下卷积神经网络的卷积核?:其中superbrother的回答就提到了CNN中的“卷积”和信号处理中的“卷积”的关系(基本没关系),本文中也引用了部分superbrother的回答
卷积神经网络(CNN)学习笔记1:基础入门:本文中池化节内容的来源

tiktok0播放怎么办-tiktok播放量低怎么办Javaweb的知识点有哪些Apache Kafka 分区重分配的实现原理解析css包含选择器的符号是哪个怎么使用Python的Matplotlib库绘图

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。