卷积神经网络CNN过程(前向和反向)

您所在的位置:网站首页 神经网络反馈算法是什么 卷积神经网络CNN过程(前向和反向)

卷积神经网络CNN过程(前向和反向)

2024-07-17 16:36| 来源: 网络整理| 查看: 265

简介

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。 它包括卷积层(convolutional layer)和池化层(pooling layer)。 卷积神经网络与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。 所以哪里不同呢?卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。

对比

在这里插入图片描述

传统神经网络

全连接神经网络(平面),组成:输入层、激活函数、全连接层

在这里插入图片描述

卷积神经网络

卷积神经网络(立体),组成:输入层、卷积层、激活函数、池化层、全连接层 在卷积神经网络中有一个重要的概念:深度。一个卷积神经网络由很多层组成,它们的输入是三维的,输出也是三维的,有的层有参数,有的层不需要参数。

卷积

在原始的输入上进行特征的提取。特征提取简言之就是,在原始输入上一个小区域一个小区域进行特征的提取,稍后细致讲解卷积的计算过程。 在这里插入图片描述 上图中,左方块是输入层,尺寸为3232的3通道图像。右边的小方块是filter,尺寸为55,深度为3。将输入层划分为多个区域,用filter这个固定尺寸的助手,在输入层做运算,最终得到一个深度为1的特征图。 在这里插入图片描述 上图中,展示出一般使用多个filter分别进行卷积,最终得到多个特征图。 在这里插入图片描述 上图使用了6个filter分别卷积进行特征提取,最终得到6个特征图。将这6层叠在一起就得到了卷积层输出的结果。 在这里插入图片描述 卷积不仅限于对原始输入的卷积。蓝色方块是在原始输入上进行卷积操作,使用了6个filter得到了6个提取特征图。绿色方块还能对蓝色方块进行卷积操作,使用了10个filter得到了10个特征图。每一个filter的深度必须与上一层输入的深度相等。

第一次卷积可以提取出低层次的特征。 第二次卷积可以提取出中层次的特征。 第三次卷积可以提取出高层次的特征。 特征是不断进行提取和压缩的,最终能得到比较高层次特征,简言之就是对原式特征一步又一步的浓缩,最终得到的特征更可靠。利用最后一层特征可以做各种任务:比如分类、回归等。

卷积计算流程

在这里插入图片描述 左区域的三个大矩阵是原式图像的输入,RGB三个通道用三个矩阵表示,大小为773。

Filter W0表示1个filter助手,尺寸为3*3,深度为3(三个矩阵);Filter W1也表示1个filter助手。因为卷积中我们用了2个filter,因此该卷积层结果的输出深度为2(绿色矩阵有2个)。

Bias b0是Filter W0的偏置项,Bias b1是Filter W1的偏置项。

OutPut是卷积后的输出,尺寸为3*3,深度为2。

计算过程

输入是固定的,filter是指定的,因此计算就是如何得到绿色矩阵。第一步,在输入矩阵上有一个和filter相同尺寸的滑窗,然后输入矩阵的在滑窗里的部分与filter矩阵对应位置相乘: 即在这里插入图片描述在这里插入图片描述对应位置相乘后求和,结果为0

在这里插入图片描述在这里插入图片描述对应位置相乘后求和,结果为2

在这里插入图片描述在这里插入图片描述对应位置相乘后求和,结果为0

第二步,将3个矩阵产生的结果求和,并加上偏置项,即0+2+0+1=3,因此就得到了输出矩阵的左上角的3: 在这里插入图片描述 第三步,让每一个filter都执行这样的操作,变可得到第一个元素: 在这里插入图片描述 第四步,滑动窗口2个步长,重复之前步骤进行计算: 在这里插入图片描述 第五步,最终可以得到,在2个filter下,卷积后生成的深度为2的输出结果: 在这里插入图片描述 ①滑动的步长叫stride记为S。S越小,提取的特征越多,但是S一般不取1,主要考虑时间效率的问题。S也不能太大,否则会漏掉图像上的信息。

②由于filter的边长大于S,会造成每次移动滑窗后有交集部分,交集部分意味着多次提取特征,尤其表现在图像的中间区域提取次数较多,边缘部分提取次数较少,怎么办? 在这里插入图片描述 一般方法是在图像外围加一圈0,细心的同学可能已经注意到了,在演示案例中已经加上这一圈0了,即+pad 1。 +pad n表示加n圈0.

③一次卷积后的输出特征图的尺寸是多少呢? 输入 W 1 ∗ H 1 ∗ D 1 W_1 * H_1 * D_1 W1​∗H1​∗D1​ 需要给出4个参数(hyperparameters):

Number of filters K K K,their spatial extent F F F(filter的个数),the stride S S S,the amount of zero padding P P P.

输出一个三维单元 W 2 ∗ H 2 ∗ D 2 W_2∗H_2∗D_2 W2​∗H2​∗D2​,其中:

W 2 = W 1 − F + 2 P S + 1 W_2 = \frac{W_1 - F + 2P}{S} + 1 W2​=SW1​−F+2P​+1 H 2 = H 1 − F + 2 P S + 1 H_2 = \frac{H_1 - F + 2P}{S} + 1 H2​=SH1​−F+2P​+1 D 2 = K D_2 = K D2​=K

应用权值共享,每个filter会产生 F ∗ F ∗ D 1 F∗F∗D_1 F∗F∗D1​个权重,总共 ( F ∗ F ∗ D 1 ) ∗ K (F∗F∗D_1)∗K (F∗F∗D1​)∗K个权重和 K K K个偏置。

在输出单元,第d个深度切片的结果是由第d个filter 和输入单元做卷积运算,然后再加上偏置而来。

在一层卷积操作里有多个filter,他们是尺寸必须相同。

在卷积神经网络中,有一个非常重要的特性:权值共享。所谓的权值共享就是说,给一张输入图片,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置是被同样的filter扫的,所以权重是一样的,也就是共享。

池化层(Pooling Layer)

池化(pool)即下采样(downsamples),目的是为了减少特征图。池化操作对每个深度切片独立,规模一般为 2*2,相对于卷积层进行卷积运算,池化层进行的运算一般有以下几种:

最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。均值池化(Mean Pooling)。取4个点的均值。高斯池化。借鉴高斯模糊的方法。不常用。可训练池化。训练函数 f ,接受4个点为输入,出入1个点。不常用。 在这里插入图片描述

上图显示,池化就是对特征图进行特征压缩。选择原来某个区域的max或mean代替那个区域,整体就浓缩了。下面演示一下pooling操作,需要制定一个filter的尺寸、stride、pooling方式(max或mean): 在这里插入图片描述 最常见的池化层是规模为2*2, 步幅为2,对输入的每个深度切片进行下采样。每个MAX操作对四个数进行,如上图。

池化操作将保存深度大小不变。 如果池化层的输入单元大小不是二的整数倍,一般采取边缘补零(zero-padding)的方式补成2的倍数,然后再池化。 接收单元大小为: W 1 ∗ H 1 ∗ D 1 W_1∗H_1∗D_1 W1​∗H1​∗D1​ 需要两个参数(hyperparameters):

their spatial extent F F F,the stride S S S,

输出大小: W 2 ∗ H 2 ∗ D 2 W_2∗H_2∗D_2 W2​∗H2​∗D2​,其中:

W 2 = W 1 − F S W_2=\frac{W_1−F}{S} W2​=SW1​−F​ H 2 = H 1 − F S + 1 H_2=\frac{H_1−F}{S}+1 H2​=SH1​−F​+1 D 2 = D 1 D_2=D_1 D2​=D1​

不需要引入新权重

卷积神经网络的组成

在这里插入图片描述 卷积——激活——卷积——激活——池化——…——池化——全连接——分类或回归

前向传播与反向传播

之前已经讲解了卷积层前向传播过程,这里通过一张图再回顾一下: 在这里插入图片描述 下面讲解卷积层的反向传播过程: 在这里插入图片描述 反向传播的目的:更新参数 w w w。因此要先算出 d J / d w d_J/d_w dJ​/dw​。假设上一层会传过来一个梯度 d J / d o u t d_J/d_{out} dJ​/dout​,根据链式求导法则,因此 d J / d w = d J / d o u t ∗ d o u t / d w = d J / d o u t ∗ x d_J/d_w = d_J/d_{out} * d_{out}/d_w =d_J/d_{out} * x dJ​/dw​=dJ​/dout​∗dout​/dw​=dJ​/dout​∗x 。在计算机中方便为变量命名的缘故,将 d J / d o u t d_J/d_{out} dJ​/dout​记为 d o u t d_{out} dout​, d J / d w d_J/d_w dJ​/dw​记为 d w d_w dw​,即图中的情况。后面也用这个记号来讲。

首先要清楚: d w d_w dw​和 w w w 的尺寸是一样的。一个点乘以一个区域还能得到一个区域。那么反向传播过程就相当于:用 d o u t d_{out} dout​中的一个元素乘以输入层划窗里的矩阵便得到一个 d w d_w dw​矩阵;然后滑动滑窗,继续求下一个 d w d_w dw​,依次下去,最后将得到的多个 d w d_w dw​相加,执行 w = w − d w w = w - d_w w=w−dw​ 就完成了反向传播的计算。

上面的反向传播可以更新一个filter中的参数,还要求其他的filter。 在这里插入图片描述 在这里插入图片描述 下面用图示来看一下2种不同的pooling过程——池化层的前向传播: 在这里插入图片描述 在池化层进行反向传播时,max-pooling和mean-pooling的方式也采用不同的方式。

对于max-pooling,在前向计算时,是选取的每个22区域中的最大值,这里需要记录下最大值在每个小区域中的位置。在反向传播时,只有那个最大值对下一层有贡献,所以将残差传递到该最大值的位置,区域内其他22-1=3个位置置零。具体过程如下图,其中44矩阵中非零的位置即为前边计算出来的每个小区域的最大值的位置: 在这里插入图片描述 对于mean-pooling,我们需要把残差平均分成22=4份,传递到前边小区域的4个单元即可。具体过程如图: 在这里插入图片描述 参考: 一文让你彻底了解卷积神经网络 https://blog.csdn.net/weixin_42451919/article/details/81381294 详解卷积神经网络(CNN) https://blog.csdn.net/qq_25762497/article/details/51052861



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3