京东秒杀
国美-超级5
索尼Xperia旗舰
限时优惠页 - 京东
自营热卖

卷积神经网络——什么是卷积神经网络,什么是卷积操作,什么是池化操作?

北方爱人 1年前   阅读数 105 0

我们经常会听到“卷积神经网络”这个名词,那么什么是卷积神经网络?它和神经网络有什么关系呢?

====================================================

1.神经网络中隐藏层、神经元数量和计算的关系

之前讲到了神经网络,简单的讲就是:[ 输入层 ⇒ 隐藏层 ⇒ 输出层 ] 这样的结构的计算网络(也有一些教程里把输入层作为神经网络的第0层)

在之前的例子中,我用了两个全连接层作为隐藏层创建了一个用于求解计算线性回归问题的神经网络(当然这个模型能够计算所有(x,y)的问题)

如果把输入层改为多值,那么这个神经网络就可以用于求解多输入单输出的问题,但是随着输入值的增多,隐藏层的层数或者每层的神经元数量也需要增多(这个道理类似于求解方程,一个方程只能求解一个未知数,求解多个未知数需要用到多个方程)

然而全连接层的计算量非常大,比如2层100个神经元的全连接,就需要100 *100次计算,3层的话就需要100 * 100 * 100 的计算,当神经网络的层数增加、每层神经元数量增加的同时,计算量的增加也是相当惊人的。

2.特定的神经网络更善于解决特定的问题

现在看一下下面这张图片,并判断一下图中是否有蝴蝶,同时思考一下我们是怎么观察这张图片的?

我们会一眼发现中间偏左的位置有一只黑蝴蝶,然后偏右的位置有一只白蝴蝶

然而,周围的其他植物、土壤等因素都会被我们无意识的忽略,事实上这些因素确实和我们的观察目的无关

在这个过程中,其实就是肉眼在执行“卷积操作”,只观察与目的相关的元素,并且只会关注这一小块区域

全是全连接层的神经网络确实能够解决公共性问题,但是在特定的问题上训练效率和识别准确度上不会很高,而且计算量会相当惊人

比如这张图片是480 * 270的,也就是说输入值的x有12万之多,需要的隐藏层和神经元数量就会更多

而这张图片上的大部分内容都与我们的观察目标无关,那么我们为什么不忽略这些因素、只关注我们需要关注的内容呢?

所以当我们需要识别图片(或者其他计算机视觉处理)的时候更多的会在神经网络中添加卷积神经网络层,对图片进行卷积操作,提取必要的特征然后进行判断、识别

3.什么是卷积神经网络

那么说了那么多,到底什么是卷积神经网络呢?

其实上面已经回答了,卷积神经网络就是加入了卷积神经网络层的神经网络,是加入了“卷积操作”的神经网络

====================================================

上面以肉眼为例子只是大概的了解了一下卷积操作的意义,那么计算机是如何执行卷积操作的呢?

卷积操作就是使用同一个卷积核在原图(的数据矩阵)上进行扫描,将每个点以及周围的像素值(大小同卷积核)与卷积核中相对位置的值进行乘运算操作,并将所得的和生成一张新的图片(的数据矩阵)的过程

这里提到了卷积操作的一些要素(下面以2D卷积操作作为例子)

1.卷积核 kernel(过滤器 filter)

卷积核就是观察的范围,但是与肉眼不同,计算机的观察范围要比我们小的多,一般我们使用3 * 3,5 * 5,7 * 7等矩阵作为卷积核

应该使用多大的卷积核,一般也是根据输入图片的大小来决定的,输入的图片越大,使用的卷积核也越大

(思考一下,为什么卷积核一般都是奇数?)

2.步长 strides

肉眼可以很容易的直接找到目标内容,而计算机却不行,计算机需要一行一行的把整张图片扫描一遍才能找到

而扫描的间距就是步长,一般为了不遗漏特征值,扫描的的步长通常都会设定成1(针对大图时也会将步长设大)

3.填充 padding

只扫描可卷积的像素(padding=‘valid’):

如果使用3 * 3的卷积核进行卷积,那么通常情况下需要从(2,2)的位置开始(此处下标从1开始)

因为如果从(1,1)开始,则该点的左面和上面都没有数据

同理最终以(n-1,n-1)结束,如果步长为1,卷积操作以后得到的结果会比原来的图片长宽各少2个像素。

(思考一下,如果卷积核为5 * 5,会减少多少个像素?)

扫描所有像素(进行边缘0填充,padding=‘same’):

这种方式不管卷积核多大,都从(1,1)开始操作,周边不足的地方以0进行填充,所以步长为1的情况下,卷积以后得到的结果和原图大小是一样的

4.深度 depth

拿一个卷积核对图片进行一次卷积操作,将会得到一个结果,拿多个卷积核对图片进行多次卷积操作就会得到多个结果,这个结果的数量就是深度

为什么要对同一张图片进行多次卷积操作呢?

首先,我们回想一下全连接层中的参数是什么?是上层神经元到本层某个神经元的权重w,两层之间的参数w的数量就是两层神经元个数的乘积

而卷积操作对图片进行卷积操作的时候使用的是同一个卷积核,那么这个卷积核就和全连接层中的一个w是相同的意义,一个卷积核就是一个参数(或者也可以理解为一个卷积核就对应一个或一组神经元),在神经网络的训练过程中,每个卷积核的值都会被调整

====================================================

现在已经了解了什么是卷积操作,但是我们一般看到的例子里,在卷积操作过后都会跟一个池化操作

那么什么是池化操作呢?池化操作的目的是什么呢?

池化操作就是使用一个特定大小的池(类似于卷积核)对图片数据进行扫描,按照不同池的类型做不同的操作,比如常用的有最大池化操作和平均池化操作,就是按照池的大小从池中求最大值或者平均值,池化操作可以有效的提取图片数据的特征值并进一步缩减数据量

接下来看一下池化操作的一些要素(依然以2D为例)

1.池大小pool_size

类似于卷积操作有卷积核一样,池化操作也有一个池大小,这个大小决定了池化操作的颗粒度,池大小越大数据量缩减的就约明显

2.步长 strides

池化步长的概念和卷积步长的概念差不多,但是池化一般都以池大小为步长,毕竟池化的主要目的是为了缩减数据

3.填充 padding

当输入的数据大小不是池大小的整数倍的时候,就需要做边缘填充,这个填充的方法也和卷积类似


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: