卷积神经网络CNN详解

Table of Contents

1. 全连接神经网络

1、全连接网络:网络层的每一个结点都与上一层的所有结点相连。

对于每个神经元:

2、如果没有激活函数,我们的求和函数拟合能力均为线性的,而激活函数的作用在于,为我们的模型提供了非线性的拟合能力。

2.1 全连接神经网络_小学渣的春天的博客-CSDN博客_一个全连接的前向神经网络具有6个源结点,2个隐层2.1 全连接神经网络2.1.1 全连接神经网络的定义全连接网络:网络层的每一个结点都与上一层的所有结点相连。2.1.2 对于每一个神经元每一个神经元都可以分为两部分:求和函数、激活函数部分1:求和函数z=w1Tx1+w2Tx2+⋯+wnTxnz=w_1^{\rm T}x_1+w_2^{\rm T}x_2+\cdots+w_n^{\rm T}x_nz=w1Tx1+w2Tx2+⋯+wnTxn2:激活函数y=f(z)y=f(z)y=f(z)2.1.3 激活函数带来了什么?如果卷积神经网络CNN详解https://blog.csdn.net/Doctor_Wei/article/details/109597113?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.pc_relevant_default&utm_relevant_index=2[0]

 3、全连接神经网络处理大尺寸图像具有三个明显的缺点:

(1)首先将图像展开为向量会丢失空间信息;

(2)其次参数过多效率低下,训练困难;

(3)同时大量的参数也很快会导致网络过拟合。

使用卷积神经网络可以很好的解决以上三个问题。

2. 卷积神经网络

与常规神经网络不同,卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度。

宽度和高度很好理解,因为卷积本身就是一个二维模板,但是卷积神经网络中的深度是指网络的层数。

举个例子来理解什么是宽度,高度和深度,假如使用CIFAR-10中的图像是作为卷积神经网络的输入,该输入数据体的维度是32x32x3(宽度,高度和深度)。我们将看到,层中的神经元将只与前一层中的一小块区域连接,而不是采取全连接方式。

对于用来分类CIFAR-10中的图像的卷积网络,其最后的输出层的维度是1x1x10,因为在卷积神经网络结构的最后部分将会把全尺寸的图像压缩为包含分类评分的一个向量,向量是在深度方向排列的。下面是例子:

左侧是一个3层的神经网络;

右侧是一个卷积神经网络,将它的神经元在成3个维度(宽、高、深度)进行排列;红色的输入层代表输入图像,所以它的宽度和高度就是图像的宽度和高度,它的深度是3(代表了红、绿、蓝3种颜色通道),与红色相邻的蓝色部分是经过卷积和池化之后的激活值(也可以看做是神经元) ,后面是接着的卷积池化层。

卷积神经网络的每一层都将3D的输入数据变化为神经元3D的激活数据并输出;

3. 各层卷积神经网络

卷积神经网络主要由这几类构成:输入层、卷积层,ReLU层、池化层和全连接层(全连接层和常规神经网络中的一样)。将这些层叠加起来,就可以构建一个完整的卷积神经网络。

在实际应用中往往将卷积层与ReLU层共同称之为卷积层,所以卷积层经过卷积操作也是要经过激活函数的。具体说来,卷积层和全连接层(CONV/FC)对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数,即神经元的权值w和偏差b;而ReLU层和池化层则是进行一个固定不变的函数操作。卷积层和全连接层中的参数会随着梯度下降被训练,这样卷积神经网络计算出的分类评分就能和训练集中的每个图像的标签吻合了。

1、卷积层

卷积层是构建卷积神经网络的核心层,它在网络中产生大部分计算。注意计算量而不是参数量。

 

2、卷积层作用

  • 滤波器的作用还是卷积的作用。卷积层的参数由一些可学习的过滤器组成。每个过滤器的空间相对较小(宽度和高度),但与输入数据具有相同的深度(这很重要,将在后面介绍)。直观地说,网络使过滤器在看到某些类型的视觉特征时学会激活,这些视觉特征可能是某些方向的边界,或第一层上某些颜色的斑点,甚至是较高层上的蜂窝或轮状图案的网络。
  • 它可以被认为是神经元的输出。神经元只观察输入数据的一小部分,并与空间左右两侧的所有神经元共享参数(因为这些数字是使用相同滤波器的结果)。
  • 减少参数数量。这种卷积具有“权重共享”的特点,可以减少参数数量,减少计算开销,防止因参数过多而导致过拟合。

 

3、感受野(重点)

在处理图像的高维输入时,让每个神经元与前一层的所有神经元完全连接是不切实际的。

相反,我们让每个神经元只与输入数据的一个局部区域连接。该连接的空间大小叫做神经元的感受野(receptive field),它的尺寸是一个超参数(其实就是滤波器的空间尺寸)。

在深度方向上,这个连接的大小总是等于输入的深度。需要再次强调的是,我们对待空间维度(宽度和高度)与深度维度不同,但深度始终与输入数据的深度相同,这将在下面的示例中进行说明。

 在图 2 中展现的卷积神经网络的一部分,其中的红色为输入数据,假设输入数据体尺寸为[32x32x3](比如CIFAR-10的RGB图像),如果感受野(或滤波器尺寸)是5×5,那么卷积层中的每个神经元会有输入数据体中[5x5x3]区域的权重,共5x5x3=75个权重(还要加一个偏差参数)。

注意这个连接在深度维度上的大小必须为3,和输入数据体的深度一致。

其中还有一点需要注意,对应一个感受野有75个权重,这75个权重是通过学习进行更新的,所以很大程度上这些权值之间是不相等。

请注意,这是一种偏见。无论输入多少层的输入数据,一个卷积核都对应一个偏差。

 

4、神经元的空间排列

感受野解释了卷积层中的每个神经元是如何连接到输入卷的,但输出卷中的神经元数量以及它们的排列方式尚未讨论。

3个超参数控制着输出数据体的尺寸:深度,步长和零填充。

(1) 输出数据体的深度:它是一个超参数,和使用的滤波器的数量一致,而每个滤波器在输入数据中寻找一些不同的东西,即图像的某些特征。(注意图像的深度和输出的深度不同?)

(2) 在滑动滤波器的时候,必须指定步长。当步长为1,滤波器每次移动1个像素;当步长为2,滤波器滑动时每次移动2个像素,当然步长也可以是不常用的3,或者更大的数字,但这些在实际中很少使用)。这个操作会让输出数据体在空间上变小。

(3) 有时候将输入数据体用0在边缘处进行填充是很方便的。这个零填充(zero-padding)的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据体的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,使得输入和输出的宽高都相等)。

 

5、权值共享

在卷积层中,权重共享用于控制参数的数量。如果在一个卷积核中,每个感受野使用不同的权重值(卷积核的值不同),那么这样的网络中的参数数量将是巨大的。

权值共享是基于这样的一个合理的假设:如果一个特征在计算某个空间位置 (x1,y1)(x1,y1) 的时候有用,那么它在计算另一个不同位置 (x2,y2)(x2,y2) 的时候也有用。

比如一个数据体尺寸为[55x55x96]的就有96个深度切片,每个尺寸为[55×55],其中在每个深度切片上的结果都使用同样的权重和偏差获得的。在这样的参数共享下,假如一个例子中的第一个卷积层有96个卷积核,那么就有96个不同的权重集了,一个权重集对应一个深度切片,如果卷积核的大小是 11×11的,图像是RGB 3 通道的,那么就共有96x11x11x3=34,848个不同的权重,总共有34,944个参数(因为要+96个偏差),且在每个深度切片中的55×55 的结果使用都是同样的参数。

反向传播时,需要计算每个神经元对其权重的梯度,但需要将同一深度切片上的所有神经元对权重的梯度累加,从而得到对共享权重的梯度。这样,每个切片只更新一组权重。其原因可以通过下图来解释。

 

而每个切片只更新一个权重集的原因也是这样的,从图3 中可以看到,不同深度的神经元不会公用相同的权重,所以只能更新一个权重集。

Notice:

如果在一个深度切片中的所有权重都使用同一个权重向量,那么卷积层的前向传播在每个深度切片中可以看做是在计算神经元权重和输入数据体的卷积(这就是“卷积层”名字由来)。这也是为什么总是将这些权重集合称为滤波器(filter)或卷积核(kernel),因为它们和输入进行了卷积。

有时候参数共享假设可能没有意义!特别是当卷积神经网络的输入图像是一些明确的中心结构时候。这时候我们就应该期望在图片的不同位置学习到完全不同的特征(而一个卷积核滑动地与图像做卷积都是在学习相同的特征)。一个具体的例子就是输入图像是人脸,人脸一般都处于图片中心,而我们期望在不同的位置学习到不同的特征,比如眼睛特征或者头发特征可能(也应该)会在图片的不同位置被学习。在这个例子中,通常就放松参数共享的限制,将层称为局部连接层(Locally-Connected Layer)。

 

6、卷积层的超参数及选择

对这些超参数,常见的设置是 F=3,S=1,P=1。同时设置这些超参数也有一些约定俗成的惯例和经验,可以在下面的“卷积神经网络结构”中查看。

其中:感受野尺寸(F),步长(S),滤波器数量(K),零填充的数量(P),通道数(D)。

 

7、卷积层演示

所有数据(输入数据量为蓝色,权重数据量为红色,输出数据量为绿色)以深度切片的柱状排列显示。

输入数据体的尺寸是W1=5,H1=5,D1=3,卷积层参数K=2,F=3,S=2,P=1。就是说,有2个滤波器,滤波器的尺寸是3⋅3⋅3,它们的步长是2。

因此,输出数据体的空间尺寸是(5−3+2)/2+1=3、(5−3+2)/2+1=3。注意输入数据体使用了零填充P=1,所以输入数据体外边缘一圈都是0。

每个元素首先按元素乘以蓝色输入数据和红色过滤器,然后求和,最后添加偏差。

 

8、用矩阵乘法实现卷积

卷积操作本质上是滤波器和输入数据的局部区域之间的点积。

卷积层的常见实现将卷积层的前向传递转换为一个巨大的矩阵乘法。

比如输入是[227x227x3],要与尺寸为11x11x3的滤波器以步长为4进行卷积,就依次取输入中的[11x11x3]数据块,然后将其拉伸为长度为11x11x3=363的列向量。重复进行这一过程,因为步长为4,所以经过卷积后的宽和高均为(227-11)/4+1=55,共有55×55=3,025个个神经元。因为每一个神经元实际上都是对应有 363 的列向量构成的感受野,即一共要从输入上取出 3025 个 363 维的列向量。所以得到的输出矩阵的尺寸是[363×3025],其中每列是拉伸的感受野。注意因为感受野之间有重叠,所以输入数据体中的数字在不同的列中可能有重复。

9、其他形式的卷积操作

1×1卷积:因为信号是2维的,所以1×1卷积就没有意义。但是,在卷积神经网络中不是这样,因为这里是对3个维度进行操作,滤波器和输入数据体的深度是一样的。比如,如果输入是[32x32x3],那么1×1卷积就是在高效地进行3维点积(因为输入深度是3个通道);另外的一种想法是将这种卷积的结果看作是全连接层的一种实现方式。

Dilated Convolutions:到目前为止,我们只讨论了卷积层滤波器是连续的情况。但是,过滤器中的元素之间也可能存在间隙,这称为膨胀。

在某些情况下,空洞卷积与普通卷积相结合非常有用,因为输入图像的大规模特征在少量层中组装得更快。

 1、池化层

通常在连续的卷积层之间会周期性地插入一个池化层。它的作用是逐渐减小数据量的空间大小,从而减少网络中的参数数量,减少计算资源消耗,有效控制过拟合。

例如汇聚层使用 MAX 操作,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸2×2的滤波器,以步长为2来对每个深度切片进行降采样,将其中75%的激活信息都丢掉。每个MAX操作是从4个数字中取最大值(也就是在深度切片中某个2×2的区域),而且深度保持不变。

 在实践中,最大池化层通常只有两种形式:一种是F=3,S=2,也叫重叠汇聚,另一个更常用的是F=2,S=2。对更大感受野进行池化需要的池化尺寸也更大,而且往往对网络有破坏性。

 

  • 普通池化(General Pooling):除了最大池化,池化单元还可以使用其他的函数,比如平均池化(average pooling)或L-2范式池化(L2-norm pooling)。平均池化历史上比较常用,但是现在已经很少使用了。因为实践证明,最大池化的效果比平均池化要好。
  • 反向传播:回顾一下反向传播的内容,其中max(x,y)函数的反向传播可以简单理解为将梯度只沿最大的数回传。因此,在向前传播经过汇聚层的时候,通常会把池中最大元素的索引记录下来(有时这个也叫作道岔(switches)),这样在反向传播的时候梯度的路由就很高效。
  • 不使用汇聚层:很多人不喜欢汇聚操作,认为可以不使用它。抛弃汇聚层。通过在卷积层中使用更大的步长来降低数据体的尺寸。有发现认为,在训练一个良好的生成模型时,弃用汇聚层也是很重要的。比如变化自编码器(VAEs:variational autoencoders)和生成性对抗网络(GANs:generative adversarial networks)。现在看起来,未来的卷积网络结构中,可能会很少使用甚至不使用汇聚层。

1、全连接层

就像在这个常规的神经网络中一样,它们的激活可以先矩阵相乘,然后有偏差。

2、将卷积层转化成全连接层

对于任一个卷积层,都存在一个能实现和它一样的前向传播函数的全连接层。该全连接层的权重是一个巨大的矩阵,除了某些特定块(感受野),其余部分都是零;而在非 0 部分中,大部分元素都是相等的(权值共享),具体可以参考图3。如果把全连接层转化成卷积层,以输出层的 Deep11 为例,与它有关的输入神经元只有上面四个,所以在权重矩阵中与它相乘的元素,除了它所对应的4个,剩下的均为0,这也就解释了为什么权重矩阵中有为零的部分;另外要把“将全连接层转化成卷积层”和“用矩阵乘法实现卷积”区别开,这两者是不同的,后者本身还是在计算卷积,只不过将其展开为矩阵相乘的形式,并不是”将全连接层转化成卷积层”,所以除非权重中本身有零,否则用矩阵乘法实现卷积的过程中不会出现值为0的权重。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年5月7日
下一篇 2022年5月7日

相关推荐

此站出售,如需请站内私信或者邮箱!