卷积神经网络 — 卷积神经网络基础
本部分整理了吴恩达课程学习笔记,但是并没有完全按照课程顺序,而是做了一些调序和删减。
1.边缘检测
卷积神经网络之所以叫卷积神经网络,是因为它包含有卷积操作。下面是在利用卷积实现边缘检测的过程:
边缘检测包括水平检测和垂直检测等多种类型,如上图所示。
①垂直边缘检测:
为了方便描述,在这里用灰度图像来表示,即是一个height×width的矩阵。课程里采用的是一个6×6的图片,以及一个3×3的filter(即卷积核)进行卷积运算。如图所示:
其实,其计算过程是非常容易理解的。但是要注意,这里面的卷积与我们信号中的卷积有一点不同就是这里的卷积不需要反转。
计算过程如下:
选择左上角9个元素与卷积核的各个元素点乘(即相应元素分别相乘)再求和,得出卷积结果的第一个元素。然后依次右移一步或下移一步得出其它结果。
更加明显的结果如图3所示。
②其它边缘检测:
水平边缘检测采用的卷积核其实很容易想到,就是对垂直边缘检测的卷积核做一个相应的调制而已,即变为以下:
1 | 1 | 1 |
0 | 0 | 0 |
-1 | -1 | -1 |
更多的filter包括:
sobel filter
1 | 0 | -1 |
2 | 0 | -2 |
1 | 0 | -1 |
对于复杂的图片,我们可以直接将filter中的数字直接看作是需要学习的参数,其可以学习到对于图片检测相比上面filter更好的更复杂的filter,如相对于水平和垂直检测器,我们训练的 filter 参数也许可以知道不同角度的边缘。
通过卷积运算,结合反向传播算法,可以学习到相应于目标结果的filter(相应的参数),将其应用于整个图片,输出其提取到的所有有用的特征。
2.Padding
padding其实就是说往原图像的外侧填充零。如果没有padding,在实际做卷积操作的时候会遇到下面的问题:
l 每次卷积操作,图片会缩小。图片的尺寸由n×n变为(n-f+1)×(n-f+1)
l 边缘的位置卷积次数少可能会丢失有用信息。
正如前面所说,我们可以通过在图片的矩阵周围加0来作为加padding缓解这个问题。如图4所示。
加了padding以后,卷积结果的尺寸变为了(n+2p-f+1)×(n+2p-f+1)。为了能够让图片大小保持不变,需要根据卷积核大小调整p的数值。
由此,卷积可以分为以下两类:
(1)Valid:没有padding
(2)Same:有padding,且保证输出与输入图片大小相同,即p=(f-1)/2。需要注意的是,在计算机视觉中,padding数值一般为奇数。
3.卷积步长(stride)
之前我们的卷积操作都是以步长s=1进行操作的。实际上,步长可以任意变化。假设卷积步长为s,则卷积运算以后,图片的尺寸变为了(((n+2p-f)/s)+1)×(((n+2p-f)/s)+1)。
注意:在当padding≠1时,若移动的窗口落在图片外面时,则不要再进行相乘的操作,丢弃边缘的数值信息,所以输出图片的最终维度为向下取整。
4.立体卷积和多卷积核
在前面我们用到的都是一个灰度图像,即不是RGB图像。实际图像的参数还有RGB参数,所以其实际上是尺寸为height×width×3。如图5所示,对于卷积核也必须是三维卷积核,才能得到卷积结果。卷积计算方式与前面的相似。
单个卷积核应用在图片时,提取图片特定的特征。但是当我们需要提取不同的特征的时候,我们可以对其使用不同的卷积核,如图6所示。
图6
5.池化层
全卷积网络包含三个部分,这些在之前人工智能课程也学到过,即:卷积层、池化层和全连接层。
池化层包括但不限于以下两种类型:
(1)最大池化:顾名思义,即对前一层得到的特征图进行池化减小,仅由当前小区域内的最大值来代表最终池化后的值。如图7所示。
图7
在最大池化中,有一组超参数需要进行调整。
(2)平均池化:顾名思义,其选取的是小区域内的平均值来代表该区域内的值。如图8所示。
图8
池化层中的超参数:
参数符号 | 参数名称 | 参数符号 | 参数名称 |
f | 卷积核大小 | s | 卷积步长大小 |
– | 最大池化或平均池化 | p | padding步长(很少用) |
注意:池化层没有需要学习的参数。
6.一个完整的卷积神经网络(CNN)
随着网络的深入,提取的特征图片大小将会逐渐减小,但同时通道数量应随之增加;
Conv——Pool——Conv——Pool——Fc——Fc——Fc——softmax
如果l表示一个卷积层,则如图10所示。
图10
卷积神经网络的参数:
Activation shape | Activation Size | #parameters | |
Input | (32,32,3) | 3072 | 0 |
CONV1(f=5,s=1) | (38,38,8) | 6272 | 208 |
POOL1 | (14,14,8) | 1568 | 0 |
CONV2(f=5,s=1) | (10,10,16) | 1600 | 416 |
POOL2 | (5,5,6) | 400 | 0 |
FC3 | (120,1) | 120 | 48001 |
FC4 | (84,1) | 84 | 10081 |
Softmax | (10,1) | 10 | 841 |
根据上表可以得出,对于CNN的参数来说,在卷积层仅有少量参数,在池化层没有参数,在全连接层存在大量参数。