本文默认读者具备了简单的反向传播知识与对全连接神经网络的基本理解。

历史

卷积神经网络是深度学习中大名鼎鼎的一种神经网络结构,最早起源于Time Delay Neural Network(TDNN),目的是对具有移位不变性的模式进行分类、在网络的每一层对模型上下文进行分类。在1998年Yann LeCun提出的LeNet-5引入了卷积神经网络,用于手写数字识别。说句题外话,Yann LeCun后来也把手写数字识别的数据做成了数据库,那就是MNIST,被誉为机器学习的Hello World。

结构

言归正传,在经典的卷积神经网络结构中,一般有卷积层、池化层和全连接层三部分构成,这也是AlexNet网络结构的基本结构。让我们逐层了解一下:

卷积层

卷积(Convolution)这个词语其实是分析数学中的一个专业术语,常见用于信号与系统中的分析。在神经网络中,其实更准确地应该叫做“互相关(Cross-Correlation)”,关于卷积互相关的联系与区别,感兴趣的读者可以参考这篇博客,不了解也没有关系,只需理解卷积神经网络中的卷积操作即可。
为了体现本文的专业性装逼性,先贴一个不会有人看的互相关的数学公式好了:
\[S(i,j)=(I*K)(i,j)=\sum_m\sum_nI(i+m,j+n)K(m,n)\]
那么卷积操作到底是怎么样的一种操作呢?由于卷积神经网络主要用于CV、图像处理领域,所以我们有必要先了解一下人类是如何来通过识别识别物体的。

卷积神经网络受到大脑的启发。DH Hubel和TN Wiesel在20世纪50年代和60年代对哺乳动物大脑的研究提出了哺乳动物如何在视觉上感知世界的新模型。他们表明猫和猴的视觉皮层里包含了识别特定视觉信号的神经元。
在他们的论文中,他们描述了大脑中两种基本类型的视觉神经元细胞,每种细胞以不同的方式起作用:简单细胞(S细胞)和复杂细胞(C细胞)。
例如,当简单单元格将基本形状识别为固定区域和特定角度的线条时,它们就会激活。复杂细胞具有较大的感受野,其输出对感受野的特定位置不敏感。
复杂细胞继续对某种刺激做出反应,即使它在视网膜上的绝对位置发生变化。
在视觉中,单个感觉神经元的感受区域是视网膜的特定区域,其中某些东西将影响该神经元的发射(即将激活神经元)。每个感觉神经元细胞都有相似的感受野,它们的感受野是有交叠的。
除此之外,人的大脑对于视觉特征的提取是分层的,比如首先提取画面中的线条与色块,其次才是更高层次的轮廓,在卷积神经网络中,普遍地应用到了这样的原理。

说了这么多,举一个栗子🌰来看一下:

图中第一列是输入的数据(以一张RGB图片为例),它共有3个通道;中间的Filter W0和Filter W1被称为卷积核,本例中为一个3*3的卷积核,在卷积核中,每一个数字都是一个权重参数,因此在卷积神经网络中,需要学习的参数之一就是卷积核(其二是偏置),我们把卷积核和输入数据(卷积核大小)重叠,然后对应位置分别相乘,然后求和,得到一个数字,这就是此次卷积的结果;然后依次从左向右、从上到下对整个输入数据进行卷积操作,来得到新的输出矩阵,其中每次移动的距离叫做步幅(stride),上图中stride=2。
每一个卷积层中可以包含若干组卷积核,每组卷积核分别对应多个输入通道;输出通道数为卷积核的组数,如图中有两组卷积核,于是输出数据的通道为2。

卷积本身会因卷积核的尺寸和步幅而对输出数据的尺寸有缩减,并且在边缘的数据卷积的次数较少,也许会遗漏一些像素信息,因此卷积之前可以用0对边缘进行填充(padding),以此来减小误差。例如在一个32*32的图片中,使用尺寸为3*3的卷积核进行步幅为1的卷积操作,其结果应当得到尺寸为30*30的数据;若在卷积之前分别在外部加一圈0,则卷积后能得到32*32的输出数据。

最后,对卷积层的输出加一个偏置(也可以不加),就可以得到该层的输出啦!

其中,卷积核的值以及偏置为可以学习的参数,可以使用梯度下降法等方法迭代训练,最后得到可用的模型。

在一些文献中,我们可以看到1 * 1的卷积核,这种卷积核除了学习特征之外,还有其他的意义,想要了解的读者可以读这篇文章《如何理解卷积神经网络中的1*1卷积》

池化层

池化(Pooling)又名下采样(Down sampling),主要目的是为了缩小数据尺寸,在CV中一般有两种池化方式,分别称为最大池化(MaxPooling)和均值池化(AveragePooling),其操作如图所示:
Pooling
池化对于提升模型的精度来说作用不大,其功能主要是减参,控制过拟合、提高模型性能,节约计算力。

全连接层

在最简单的卷积神经网络中,我们通常会将卷积、池化后的数据拉成一条向量,然后接一个全连接层来进行分类操作,这在一些现代的复杂网络中可能有其他的结构,在此就不详细叙述了。

More

卷积神经网络由于其稀疏交互(Sparse Interactions)、参数共享(Parameter Sharing)、等变表示(Equivariant representations)等特点,多用于图像数据,即二维卷积(Conv2D),但是卷积也可以在一位数据或者更高维的数据上,只不过由于数据本身的性质,效果可能不太好。

另外本文介绍的只是最基础的卷积函数,其衍生了众多不同的卷积函数变体,例如非共享卷积(Unshared Convolution)、平铺卷积(Tiled Convolution)等,感兴趣的读者可以查阅相关资料了解。


*Reference:
Wikipedia - Convolutional neural network
Wikipedia - Time delay neural network
ImageNet Classification with Deep Convolutional Neural Networks
机器学习:最小二乘法和梯度下降法
最小二乘法的本质是什么?
图像分类中max-pooling和average-pooling之间的异同
《Deep Learning》
*