卷积神经网络基础知识

构建卷积神经网络主要包含3种不同的网络层,分别是convolution layer,pooling layer以及fully connected layer。下文将针对这个三个方面进行解读。

一、 卷积层

在介绍卷积层之前,我们首先需要了解窗口的概念。我们在网络中进行计算时,我们采取的是通过窗口遍历的方法。我们知道图片是由像素组成的,下面是一个4*4的矩阵,我们首先不考虑RGB三个channel的情况。下面这个矩阵意味着一个channel。

 
1 2 1 1
4 5 1 1
1 1 1 1
1 1 1 11

 然后我们假设一个窗口(filter),如下一个3*3的矩阵。这是一个常用的用于检测垂直线段的窗口。

1 0 -1
1 0 -1
1 0 -1

当进行计算时,我们取图片矩阵右上角9个数,分别与窗口中的数字相乘累加。这里的结果是1+4+1-1-1-1=3;得到的结果将表示为下面的矩阵。

3 6
3 -6

这里我们进行了一个简单的计算。

接下来我们引入更加复杂的概念:填充padding和步幅strides。

填充

通过我们上面的计算,我们可以发现,图片矩阵中左上角的数字1只用了一次;而中心的数字如5却用了4次。为了解决这个问题,我们引入了填充的方法。在原图片的四周填充。如padding=1的情况。

 

0 0 0 0 0 0
0 1 2 1 1 0
0 4 5 1 1 0
0 1 1 1 1 0
0 1 1 1 11 0
0 0 0 0 0 0

常见的padding有两种模式一种是valid,即不作处理;另一种是same即让输出的矩阵与原图片矩阵大小一模一样。这个时候p=(f-1)/2

 

步幅

我们刚刚的计算是每次向右移动一格。有时我们并不想这样,因此引入了步幅的概念。即每次移动窗口的格数。上述计算的步幅即是1。

Note

事实上,以上计算在数学上并不是卷积,而是一种交叉相关。真正的卷积需要原图片矩阵上下翻转后左右翻转,然后进入计算。但是这并不影响我们神经网络的影响,因此大多数神经网络并不关注这一点。

卷积层的窗口很值得推敲,我们上面举的例子用于检测竖直边,同样我们可以推出水平边等特征的表达方式。实际网络中filter中的数字将作为我们的参数存在。

窗口的大小一般是奇数,一方面这使得窗口有中心;另一方面是为了便于确定padding的大小。

以上例子的channel是一,常见的图片RGB是channel为3,而filter也就是窗口的channel的大小是与图片相同的。

二、 池化层

 

池化层和卷积层不同的时,它可以发现更多的相同特征。常见的池化层有max和average两种。池化层也是有窗口的,但是它在移动的过程中,会计算图片矩阵中的max值或者平均值。

池化层同样有步幅和填充的概念。这里不做赘述。

我们假设最大(amx)池化层的filter的大小为2*2,s=2;那我们对原图片矩阵计算得到的结果为:

5 1
1 11

 

三、 fully connected layer

这种神经网络层的作用类似于flatten,即把高维的图片变成一维的向量,然后计算接下来的计算。

将高维的图片变成一维的向量就很多方式,一种方式是使用1*1的卷积层,另外一种方式则是直接将数字flatten。

四、 激活函数

事实上,上述每个过程都是有激活函数的。如当我们通过卷积层得到一个2*2的矩阵时,这个数字将作为A与W相乘并加上一个常数b,然后取relu之类的激活函数,随后再进入下一层。

五、 卷积神经网络为什么有效?

这里主要有两个原因:

1. 参数共享;我们可以看到filter的参数用于图片中各个地方的计算,这对于发现图像中的相似特征非常有效。

2. 连接稀疏;每一层的输出仅仅取决于非常小数量的参数,这对于防止过拟合有很大的帮助。

posted @ 2020-03-01 20:39  金思远  阅读(362)  评论(0编辑  收藏  举报