CNN 卷积神经网络(过程解析)

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CNN 卷积神经网络(过程解析)相关的知识,希望对你有一定的参考价值。

一张灰度图像,就是一个单通道,h*w*1表示高和宽和1通道,每个像素值范围0-255,只有宽和高的图像就是2d矩阵,可以表示成0-1或者0-255,0表示黑色,255表示白色。彩色图像RGB或者BGR是3通道,h*w*3,是一个张量。

卷积:卷积是原始图像与卷积核之间的滑动局部加乘计算过程

1、单通道卷积

比如一个6*6*1的图像,一个3*3*1的卷积核,卷积俩个参数一个是步长stride,就是卷积核在原图像上移动的间隔,padding是填充,有时候为了获取特征需要,在原图像边界处添加一圈0或者1,padding=1表示添加一圈。

卷积计算过程:对应位置相乘,所有相加

0*2+(-1*2)+0*2+(-1)*2+5*3+2*(-1)+0*2+(-1)*2+0*2=15-8=7

所以左后输出7

卷积过程展示:stride=1,padding=0

 卷积后尺寸计算:输出图像尺寸=(输出图像尺寸−卷积核尺寸+2∗填充值)/步长+1

卷积后不考虑多次卷积,得到的特征图,进行扁平化处理,就是按行整合,得到,一列多行的一个特征值,作为全连接神经网络的输入训练。

2、多通道输入和输出

输入是一个RGB5*5*3,一个过滤器卷积核是3*3*3,因为3个3*3分别对应图像的3个通道,因为是一张图像的不同通道,所以卷积核的大小必须一致,但是不同通道上的卷积核的参数并不相同。最后结果相加作为输出。最后输出的特征faturemap是一个通道,与过滤器数量相同。实际操作中会添加多个过滤器,因为一个过滤器无法提取训练所满足的特征。

 权值:

卷积核的值就是待学习的权重参数。网络训练时,输出的结果会和数据集标签做损失计算,然后把计算得到的损失反向梯度下降去更新卷积核里的每一个参数。所以卷积核里面的参数最终是训练得到的。

偏置:

每一个 滤波器 都包括一个偏置参数(bias)。这个偏置参数是该 滤波器 中所有 卷积核 共享的。最终的卷积结果需要在加上该偏置值。

激活:

卷积与偏置加和后的值,还需要再经过激活函数(比如 ReLU)才得到最终特征图上的值,图像一般都选ReLU作为激活函数,因为大于1的时候趋向无穷大,这样反向计算损失的时候不会出现梯度消失的风险。

卷积的感受野和权值共享:

感受野:就是一个卷积核进行一次计算出来的哪一个值。

权值共享:单个卷积核卷积时,卷积核权值和偏置是不变的。

初始化权重方法:

  • 取偏差很小的高斯分布随机取值
  • Xavier 初始化方法
  • He kai ming 初始化方法

卷积模式:卷积的参数

full mode和same mode、valid mode

橙色部分为 image, 蓝色部分为 filter。

1、full 模式的意思是,从 filter 和 image 刚相交开始做卷积,白色部分为填 0。filter 的运动范围如图所示。

2、same mode,当filter的中心 K 与 image 的边角重合时,开始做卷积运算。当卷积步长 stride = 1 时,卷积之后输出的 feature map 尺寸相对于输入图片保持不变(same)。 

3、 valid mode 当卷积核全部在image里面的时候,进行卷积运算。

前向和反向传播:

前向传播采用 valid 模式,反向是full 模式

当误差反向传播到卷积层时,我们的操作方法依然是一个卷积,只不过要把卷积核翻转(旋转180°),然后在周围补 0,前向传播采用 valid mode 卷积,反向传播时是 full mode 卷积,

如果前向传播是 full mode 卷积,那么反向传播就是 valid mode 卷积,不过依旧要将卷积核翻过来。

而对于 same mode 卷积,它的反向传播也是一个 same mode 卷积,同样也需要翻转卷积核。

最后,对于 strided 卷积(跨超过 1 步的卷积),反向传播是 fractional strided 卷积,反之依然。卷积核同样也要翻转。

池化:池化层也称下采样层,会压缩输入的特征图

一种是平均池化(Average Pooling),即对邻域内的特征点求平均;另一种是最大池化(Max Pooling),即对邻域内的特征点取最大。

 最大池化:

平均池化:

 池化的反向传播:

 假设采用步长为 1 的2×2 池化,将 4×4 的 feature map 池化为2×2

 对于最大池化,需要在前向传播时,记住每个池化块中最大值的位置,然后将误差放回去即可。假设四个位置分别为左上,右下,右上,左下,则有

平均池化反向传播:只需要将池化单元的误差平均值放回原来的子矩阵

以上是关于CNN 卷积神经网络(过程解析)的主要内容,如果未能解决你的问题,请参考以下文章

卷积神经网络-疑点解析

为什么CNN模型要使用很多小的卷积核,比如3x3,而不是7x7或者9x9呢?

卷积神经网络(CNN)基础

神经网络解析|CNN

CNN基础为什么要用较小的卷积核

CNN基础为什么要用较小的卷积核