【2017CS231n】第五讲:卷积神经网络
一.视觉之外的神经网络
1.1 一个例子
先举一个例子,我们有一个32*32*3的输入图片,有五个5*5的卷积核,也可以叫5*5的感受野,因为这个感受野就是这个卷积核能够感受到的区域。
我们可以暂时把卷积核看做是一个滤波器,然后让其中一个卷积核划过整个图片,会得到一个输出。输出是28*28。至于输出为什么是28*28我们先不用管,后面会说明。
这5个卷积核参数相同,大小相同,做的运算相同。用5*5*5的卷积核划过所有输入,得到一张**映射。
我们有5个5*5卷积核,卷积核的数量就输出深度。如果我们让这5个卷积核划过这个3*32*32的图片,我们会得到5个28*28的输出。这5个卷积核都是作用于同一图片同一区域,但是功能却不一样,也就是他们的输出不同。
1.2 全连接层
全连接层,一个32*32*3的输入被展成3072*1的输入,神经元与所有输入作用。但是卷积神经网络中的卷积核,只与图像其中一个区域发生作用。
如下图所示,我们的权重矩阵W大小为10*3072,它与输入做运算,矩阵的每一行都分别与输入运算。把矩阵的每一行看做一个神经元,每一个神经元都与输入作用。
1.3 卷积神经网络结构
下面是一个卷积神经网络的结构,每隔几个卷积层我们就有一个池化层,中间还有非线性连接层。在卷积网络的最后我们将输出的矩阵拉成一维,与全连接层连接,输出最后的分类得分。
1.4池化层
池化层可以降低采样率,得到一个分辨率更小的图片。有点像图像处理里面的金字塔。输入的深度不会变,只在另外两个维度降低采样。如下图所示
1.4.1 最大池化
最大池化是什么意思,例如我们用一个2*2的滤波器,步长为2,划过图像,每一次取四个元素中的最大值。步长为2就是下一次滤波器的起始位置在当前位置平移2个像素。可以避免重复处理。
二.卷积和池化
2.1全连接层和卷积层的区别
2.1.1全连接层
在全连接层中,我们有一张三维图片,32*32*3,将所有像素展开得到3072的向量。把向量和权重矩阵相乘,我们的权重矩阵为10*3072。我们让输入与权重矩阵每一行相乘,就得到了10个输出。
对卷积核来说,它一次只跟输入图像的一小块区域做卷积,而不是像全连接层一样跟全部的输入作用。这就是卷积和全连接层最大的区别。
2.1.2卷积层
对卷积神经网络来说,可以保持图片的结构。在下面这个例子中我们用一个5*5*3的卷积核,从图片中提取一小块5*5*3大小的区域,让两者做点积再加上一个偏置项b,这样我们就得到了一个输出。
我们让卷积核划过整个图像,会得到一个28*28的输出(这里的输出的格式大小取决于你的卷积核滑动方式,不同的滑动方式会得到不同的输出格式,具体的区别我们下面详细说明)。
如果我们有6个卷积核,让他们分别划过输入的图片,这样我们就会得到6个不同的输出。(不同的卷积核会得到不同的信息)
卷积层之后我们会将卷积层的输出送入到**函数,比如ReLU。这些输出又会作为下一层卷积网络的输入。
不同的卷积层得到的特征是不同的,在低层的卷积层中得到图像的一些角点边缘等,在中层的网络会是一些斑点,高层是一些更复杂的特征。
2.2卷积核对输出的影响
2.2.1 步长
为了方便说明,这里我们用一个7*7的图像输入,卷积核大小为3*3。当步长为1时,也就是下一次卷积核移动的步长是一个像素。这样我们就会得到一个5*5的输出。
如果步长为2,那么我们会得到一个3*3的输出。
当步长为3时,这时就不匹配了。
2.2.2 计算输出尺寸
输入的尺寸是N,卷积核尺寸是F,步长stride。通过(N-F)/stride + 1我们就可以得到输出的尺寸,也可以判断有几种步长是可行的。
2.2.3 边界填充
当我们用1个像素填充原始图像时,输出大小是多少。也就是在7*7图像的周围填充一圈像素。灰色的是填充上的,白色是原始图像大小。填充完以后图像大小变为9*9,我们的卷积核大小是3,这样输出就还是7*7。
为了保持全尺寸的输出,我们会进行边界填充。当卷积核的大小不同时为了保持全尺寸输出,我们会采用不同的填充宽度。
如果不做边界填充,当有多层网络时,我们的图像大小会迅速缩小。
2.2.4 举个例子
第一个例子是求输出尺寸的。
第二个例子求的是有多少参数。