卷积神经网络.基础知识

本文是根据吴恩达大仙^_^的卷积神经网络课程总结的笔记

注:在数学上,卷积操作一般之前都会存在一个对filter做翻转的操作,但是我们在深度学习上的卷积并没有对filter做翻转,深度学习上所说的卷积操作实际上应该叫交叉相关,但是大部分深度学习文献都将其称作卷积,所以我们在根据这条约定俗成的规则将其称作卷积操作,对于是否翻转对于深度学习领域来说并不重要,但是翻转在信号处理等领域却有着重要的作用。

1.Padding

中文意思为 填充

分析上面的卷积操作:

左边我们输入的图像的大小为 6*6, filter的大小为 3*3,按照一般的卷积操作(这里假设没有提出padding、stride的概念):

我们得到的结果输出维度为 (6-3+1)*(6-3+1),即 4*4

按照上面的操作我们会发现这样操作会有两个缺陷:

1.输出维度逐渐缩小------输入图像经过一次卷积过后,你的图像将会从 6*6 降维到 4*4,那如果图像连续经过多次卷积,输出图像的维度将会非常非常小,甚至输出维度降维 1*1,但是并不是每次卷积我们都想要将图像维度缩小(例如我们在做same conv时)

2.丢失忽略角落边界图像信息------输入图像角落或者边缘上的像素在一次卷积过程中只被使用一次,而在图像中间的像素点则会在一次卷积过程中多次被filter所重叠计算,所以相对而言,角落或者边界上的像素被使用的次数少很多,这样会导致最终卷积的结果会丢失忽略很多靠近图片边界的图像信息

所以,为了解决上面的两个问题,引入了 padding 这一概念,即在 是使用卷积操作前,在输入图像的四面边缘填充1个像素大小的额外边缘,如下图所示:

n=8,即 变成了 一个 8*8 的图片经过一个 3*3的filter卷积,得到输出图像维度变成 6*6,而不是4*4,这样我们通过padding保持了图片的原始大小 6*6。

因为padding是在输入图像的边缘额外填充了p圈,也就是输入图像维度变成了  (n+2p)*(n+2p)(n+2p)*(n+2p)

所以我们得到的输出图像维度大小为   (n+2p-f+1) * (n+2p-f+1)

对于需要填充数字p的选择 ,我们有两个常见的选择: valid convolution、same convolution

1.valid convolution:

有效卷积,基本意思是 没有填充,即 p = 0

2.same convolution:

选择的填充将使得输出大小维度 等于 输入大小维度,即  n+2p-f+1 = n    ====>     p=\frac{f-1}{2}.

在计算机视觉当中,f基本上都是使用奇数(一般1*1、3*3 、5*5、7*7),极少数是偶数大小的,导致这种现象的一般有两个原因:

1.如果f是偶数,将会导致一些不对称的填充;只有当f是奇数时,这种same 卷积才会产生,在四周有相同的维度的一个自然的填充区域,而不是在左边多填充在右边少填充的情况

2.其次在奇数大小的filter,都会有一个中心位置,一般称作中心像素,这样就可以描述filter的位置

2. stride

中文意思是步幅

如上所示的例子,我们将stride设置为2,即步长为2,filter会移动两个像素单位。

所以我们对 7*7 的输入图像,使用一个3*3的filter做卷积操作,stride为2,默认的padding = 0,得到的输出结果维度为

(\frac{7+0-3}{2}+1) * (\frac{7+0-3}{2}+1),即 3*3

3.卷积的操作的通用公式:

对于一个n*n大小的输入图片,使用一个大小为 f*f 的filter,其中padding为p,卷积stride为 s,得到的输出结果的维度为:

(\frac{n+2p-f}{s}+1)*(\frac{n+2p-f}{s}+1) 

这里会存在一个问题,如果前面的除法中分子不能被分母整除怎么办?这里一般都是向下取整floor(z),即最接近z的小于z的整数

之所以这样是因为在filter在移动过程中肯定是不能够超过输入图像自身范围或其填充区域范围的。

例如上面的 7*7 的输入图像,使用一个3*3的filter做卷积操作,stride为3,padding=0,得到的输出结果维度只能是(7+0-3)/3+1,即维度为2*2,而不会是3*3

4. RGB图像的卷积操作

在实际应用中,我们输入的图像一般不会是灰度图像而是RGB彩色图像

例如如上的输入图像的维度为 6*6*3(其中6表示输入图像的宽高,3表示是RGB三通道),filter为3*3*3(filter中的通道数必须和输入图像维度的通道数一致,输入图像为RGB三通道,那么filter同样也有类似的RGB三通道参数),输出图像维度为 4*4*1(通道数由filter的数量来决定的,这里只使用了一个filter,所以通道数为1)

这里注意到filter的参数为3*3*3=27个,其每一层的参数与输入图像的每一层数据进行相乘求和,最终将三层的求和结果相加,得到输出图像上了像素点值;接着正常的将filter移动s个步长,进行下一个点输出计算,以此类推,最终得到了最终的输出图像且维度为4*4*1.

这里为什么会要求filter的通道数与输入图像的通道数一致呢?

我们假设一种场景,输入通道为RGB三通道的,我们的filter的通道也为RGB三通道,我们可以针对输入图像做一些相关操作,例如,我们想检测输入图像RGB中的红色通道边缘,那我们可以将filter自身的GB通道参数均设置为0,仅设置R通道相关参数,这样叠加三个通道的filter就可以用来检测输入图像红色通道的垂直水平边缘了。

如果我们想既检测垂直边缘有检测水平边缘等多种图像特征时,我们需要同时使用多个filter,即使用多个filter来检测输入图像中的多个特征!具体如下:

这里使用了一个检测垂直边缘的filter和一个检测水平边缘的filter,输入图像和每个filter做卷积都会得到一个4*4的输出,两个filter最终会得到两个4*4的输出,叠加在一起则就是最终的输出图像维度为 4*4*2(这里的输出维度2表示使用了2个filter)

这里我们总结一下:

输入图像维度为 N*N*Nc(前面两项为图像的宽、高,Nc表示通道数)

filters:维度为f*f*Nc*Nf(前面两项为filter的宽、高,Nc表示filter的通道数,该数与输入图像通道数保持一致,Nf表示filter的数量) 这里的padding=0,stride = 1

输出图像维度为 (N-f+1)*(N-f+1)*Nf  (这里的通道数也就是filters的数量)

5.构建单层卷积神经网络

如上图所示:

对于图中的输入图像6*6*3,和第一个3*3*3维度的filter做卷积,得到第一个4*4的输出;应用第二个卷积filter得到了另一个4*4的输出,

最终我们需要把这些输出变成单层卷积神经网络,还需要对每一个输出添加一个偏差bias(也就是对前面每一个卷积得到的16个数每个均需要加上相同的偏差,偏差为实数),然后我们可以继续添加一些非线性转换 ReLU。最终通过添加偏差和非线性转换得到一个4*4的矩阵输出;对于下面的矩阵同样也是加上一个不同的偏差值以及应用非线性处理函数得到另一个4*4的矩阵输出;像之前一样,最后将两个矩阵叠加在一起得到一个4*4*2的输出;如上就是卷积神经网络的一层了。

现在将上面的这个例子与普通的非卷积单层前向传播神经网络对应起来,

z^{[1]} = W^{[1]} * a^{[0]} + b^{[1]}

a^{[1]} = g(z^{[1]})

在前面的例子中,我们可以看到输入即为 a^{[0]},也就是 x

filters 的作用类似于 W^{[1]}

b^{[0]} 表示偏差,例如这里的 b1 、b2

g() 表示 非线性处理函数,例如ReLU函数等

a^{[1]} 成为了下一层神经网络的激活函数

6.summary

下面一张图总结的是一层卷积神经网络的各类参数:

这里说明一下Activations:如果应用的是向量化实现或者批量梯度下降,也就是说有多个输入图片,那么输出A^{[l]}为 m*n*n*Nc

7.卷积层、池化层、全连接层

卷积层、池化层 全连接层

一般我们使用卷积层就可以设计一个效果很好的神经网络模型(前面讲的都是卷积层),但是大多数神经网络架构都会包含几个pooling层和FC全连接层,且池化层和全连接层一般比卷积层简单一些

7.1 池化层

一般我们使用池化层可以减小输出图像数据量来提高计算速度,并使一些特征的检测功能更加强大

a. Max Pooling 最大池化层

如上,它的超参数(hyperparameters)为 f=2, s=2,它没有任何参数需要来训练学习。

对于我们在做max pooling,其类似于做卷积操作,只是不是将filter中的各个参数做对应乘法,只是挑选其对应区域的最大值而已,所以它的filter中其实也没有任何参数

上面做最大池化使用的超参数为f=3,s=1

b.Average Pooling 平均池化层

平均池化与最大池化不同点就是在filter对应的区域做平均计算而不是取最大值,但是在大多数的卷积神经网络架构中使用最大池化的比较多!唯一的例外是有时候在深度非常大的神经网络,我们可以使用平均池化来合并某一个输出对象;如7*7*1000->1*1*1000

总结:

无论是最大池化还是平均池化我们用的就是两个不需要训练学习的超参数(通常是人工设定或使用交叉检验):

f:filter size

s:stride

一般还有一个p:padding,这个参数非常罕见;在做最大池化时我们一般是不进行任何的填充补位的,即p= 0

其中我们经常使用到的超参数组合为 f=2 、s=2,这样我们就可以将输入图像的宽高各缩小一倍

8.卷积神经网络的优点

卷积层比只用完全连接的神经层比起来有两个优势:参数共享和连接的稀疏性

  

在输出相同维度图像的情况下,使用卷积相比全连接层可以减少大量的权重参数,这样所需要训练的参数就会大大减小

连接的稀疏性指的是输出图像的每一个像素点只与输入图像使用filter的f*f大小区域有关,输入图像上的其他范围像素点对于其输出无任何影响(如上图的红绿色3*3方块经过卷积得到输出图像的红绿像素点,在输入图像除红绿方框外的像素点对其无任何影响)

卷积神经网络被用来捕捉平移不变 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章