【卷积神经网络】为什么卷积哪儿都能用?

视频内容讲述的很好,利用数字图像处理的过程形象描述了卷积是怎么运作的,非常容易理解。
不过,可能有人还是无法理解卷积在卷积神经网络中是怎么“卷”的,作为数字图像处理兼机器学习的小白,我来说说我对卷积神经网络的理解。(为了看懂以下内容,建议预习一下全连接神经网络的原理)
首先就以目前使用的最广泛的图像分类模型vgg16为例子。

可能看到图片上面一堆五颜六色的方块和一堆数字,看着就是一头雾水。
其实并不难理解,每一个方块代表卷积神经网络的1层,其中黑色方块是卷积层,红色方块是池化层,蓝色方块是全连接层(即全连接神经网络的部分),棕色部分严格来说不是一个层次,只是在最后添加了softmax激活函数用来规格化分类输出。
那旁边的数字是什么呢?类比输入的224x224x3的图像,每一个层次,其实都可以抽象为一组特征图。就比如输入图像是由3张224x224的特征图构成(分别是图片的RGB部分),最先出现的两个卷积层224x224x64,相当于这两层分别储存了64张224x224的特征图。第一次池化后,两层卷积层112x112x128,相当于这两层分别储存了128张112x112的特征图,以此类推。哪怕是全连接层,也可以抽象成4096张1x1的特征图。实际上,全连接层在工程实现上就是1x1卷积。
然后最难理解的地方来了,输入的3张224x224的特征图,进入卷积层是怎么变成64张224x224的特征图的?其实和我们想象的卷积操作略有区别,卷积核是3维的,并且卷积核不止一个。

(拿我答辩时的PPT偷懒,LOL)
在上图中,卷积核的尺寸是3x3x3,多出来的维度正好对应输入图像的RGB三个通道。但这个卷积核,在行为上还是2维卷积。
可以这样简单的理解,使用3个卷积核分别对原图的RGB通道卷积,得到三张图,然后将这三张图加起来,就得到了1张224x224的特征图。如果需要得到64张特征图,那就用64个3x3x3卷积核卷积,就得到了64x224x224的卷积层。
在卷积神经网络中,卷积核的大小是怎么决定的呢?卷积核的宽度,高度由模型设计者自行决定,在vgg16中使用的均为3x3卷积核。而卷积核的层数必须与输入的特征图个数匹配。还是以vgg16的第二个64x224x224的卷积层为例子,输入为第一个64x224x224的卷积层,则需要使用64个3x3x64的卷积核与第一层卷积得到第二层。
把卷积层搞懂了,池化就非常简单了。用人话来说就是把特征图的尺寸缩小了,就跟你在PS里调整图像大小是一个道理。通过池化,可以将之前卷积学到的特征整合并简化,以供后续的层次继续提取更宏观的特征,并过渡到全连接层。
卷积神经网络有很多优点,但其最伟大之处就是能大幅度减少参数数量,使得训练大型模型成为可能。其中,卷积核代替全连接构成了前后特征联系的桥梁。还是以vgg16的第一个224x224x64为例子,如果是全连接的,则参数个数是m*n,即224*224*3*224*224*64 = 4.83×10¹¹,而使用3x3卷积核代替全连接,只需要训练卷积核上的参数,参数个数仅有3x3x3x64=1728个,也能起到将特征A映射到特征B的作用。你可以尝试计算一下,vgg16虽然做了13次卷积映射,但参数量仅有1.47×10⁷个,还没达到最后3次全连接的参数量1.23×10⁸的零头。如果全换成全连接层,则参数数量会达到1.83×10¹³!需要使用66TB的空间存储参数!而VGG16这种能分1000多个类别的分类模型,仅仅需要500M左右的空间。所以卷积神经网络,可以说是人工智能领域最伟大的发明,没有之一。