深度学习(15):卷积神经网络

时间:2024-05-19 13:34:09

本文以图像分类为例简要介绍卷积神经网络的基本结构。

卷积

过滤器(核)
过滤器是我们用来卷积的工具。对于一张图片,我们可以利用过滤器来抓取图片的某些特征。
一个过滤器是一个 f * f 的矩阵, 其中的每一个元素都是可训练的参数。

我们假设现在有一个6 * 6的灰度图,3 * 3的过滤器,那么卷积的过程如下:
1.将过滤器覆盖在图片的左上角,计算9个位置对应元素的乘积并加和作为一个输出
2.将过滤器向右平移一格,再次计算乘积加和作为第二个输出。
3.无法向右平移时向下平移一行并挪到最左边开头,重复上述步骤。
深度学习(15):卷积神经网络
深度学习(15):卷积神经网络
这样一来我们能够得到一个4*4的输出,这就是卷积。

Padding

通过上面的例子我们会发现,卷积时边缘元素的利用较少而中间元素的利用较多。同时可以发现,经过卷积,我们的图片尺寸会有所缩小。
为了解决这两个问题,我们可以对原图的边缘进行扩充,这个过程叫做padding。(往往扩充部分置为0)
深度学习(15):卷积神经网络
我们设上下左右增加的宽度为p,那么为了使得卷积后图片尺寸不压缩,p=(f-1)/2

步长

在前面的卷积中,每一次过滤器都只移动1格,我们称此时的步长stride为1。在实际应用中,我们每次可以将过滤器移动不止1格,也就是步长选取不一定为1。

对于一个n * n的图片,如果分类器的大小为f * f, 步长为stride, padding大小为p,输出的大小应该是:
(n+2p-f)/s+1 * (n+2p-f)/s+1     (向下取整)

在三维空间上卷积

实际应用中,由于存在RGB三通道,我们的图片大小应该是n * h * 3,是一个三维空间。同时我们往往要利用多个过滤器对图片进行卷积得到不同的特征。在三维空间上的卷积如下:

设:
输入图片的大小为 n * n * nc   n代表图片的长和宽, nc 代表图片的通道数(初始值为3)
过滤器的大小为 f * f * nc     可见过滤器和图片的第三维个数必须一致
步长:stride
padding大小 :p

对于每一个过滤器,我们依然采用对应位置乘积加和的方式进行输出,这样会得到(n+2p-f)/s+1 * (n+2p-f)/s+1 的输出

而m个过滤器会得到m个输出,我们将这m个输出叠起来,得到总体(n+2p-f)/s+1 * (n+2p-f)/s+1 * m 的输出

图中例子:对于一张6 * 6 * 3的图片,每个过滤器得到4 * 4 的输出。两个过滤器输出重叠在一起得到4 * 4 * 2的总输出。

深度学习(15):卷积神经网络

池化

池化的工作原理如下:
池化功能也有其对应的过滤器(大小f * f),采用和卷积一样的方式进行移动求值。只不过池化过滤器不再是乘积求和。典型的池化有最大池化(取过滤器内的最大值),平均池化(取过滤器内的平均值)。

池化的作用是可以在保持特征不丢失的前提下降低图的尺寸。常用的池化f = 2 , stride = 2,可以让图片的长度宽度直接变为一半。
注意的是池化层里面并没有学习参数。

典型的卷积神经网络

典型的卷积神经网络由卷积层、池化层、全连接层构成。例如:
卷积层-池化层-卷积层-池化层-全连接层-softmax
深度学习(15):卷积神经网络
每经过一次卷积层,图片的尺寸会减少,但是图片的特征数(第三维)会增多。
每经过一次池化层,图片尺寸会减少。
当我们的图片(其实早已经是神经元输出了)大小适度时,我们将其拍扁成1维输出,套到熟悉的全连接神经网络上。

大体趋势如下图所示
深度学习(15):卷积神经网络

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

1.参数共享:在前面的卷积层我们可以看到,几个小小的过滤器就可以是输出的维数大大降低。这是因为相对于全连接神经网络,卷积网络的很多输出都共享同一个过滤器里面的参数。
2.稀疏连接:对于全连接神经网络,每一个输出都和上一层所有的输入有关。而在卷积层里面, 每个输出只与过滤器覆盖的元素有关。

以上两点可以加速学习,避免过拟合,避免参数过多。