王东
Published on 2025-02-26 / 6 Visits

【AI100问(72)】什么是卷积神经网络?

卷积神经网络是深度学习系统的重要组成部分,在图象识别、人脸识别、汉字识别,以及自然语言处理中,有很广泛的应用。那么,什么是卷积神经网络呢?

我们先来看看什么是卷积。

图1. 卷积示意图

上图是一个卷积示意图。输入是一个5*5的矩阵,中间是一个3*3的卷积核,输出是一个3*3的矩阵。首先设置一个与卷积核同样大小的窗口W,由于卷积核是3*3的,所以W也是3*3。将窗口W放置在输入矩阵的左上角,被窗口“罩住”的部分我们称为矩阵A, A中数字与卷积核相对应位置的数值相乘再求和,就得到了输出左上角第一个位置的数值-5。然后将窗口右移一个位置,得到了一个新的矩阵A,再次用A中数字与卷积核对应位置的数值相乘再求和,就得到了输出中第一行第二个位置的值0。依次进行此操作,直到窗口W右边到达输入的右边缘为止。然后将窗口下移一个位置并回到最左侧,继续进行如上的乘积求和操作。重复以上步骤,直到将输入矩阵“扫描”完毕,就得到了输出矩阵。这就是典型的卷积操作。因为边缘的关系,这样得到的输出矩阵会小于输入矩阵,为了使得输出矩阵与输入矩阵大小一样,可以对输入矩阵进行适应的扩展,如在四周填充适当的0元素。

这样的卷积操作具有什么功能呢?我们看看下图所示的卷积操作结果。下图(a)、(b)中,左侧的输入是一样的,中间的卷积核有所不同,通过卷积操作以后,可以看到右侧得到的结果也有不同。仔细观察一下,我们会发现,(a)中的输出提取了输入图的“横条”特征,原图中所有的“横条”元素都被保留了下来,其他元素被过滤了。而(b)则相反,保留了“竖条”元素,其他元素被过滤了。通过这个例子可以看出,卷积操作可以看作一个特征提取器,提取出不同的特征。多个卷积核同时使用,就可以提取出不同的特征。

图2. 卷积示意图

一般来说,一个卷积的后面会紧跟一个被称作激活函数的非线性函数,以提高网络的非线性拟合能力。Sigmoid函数是一种常用的激活函数,如图3所示。该函数将卷积的结果映射到0到1之间,可以认为是获取该特征的概率。

图3. Sigmoid函数

在卷积神经网络中还常常用到一种称为“池化”的操作,目的是对特征进行压缩并提高模型对抗噪声的能力。一种常见的池化方法是最大池化,它和卷积操作类似,也是用一个窗口对输入矩阵进行“扫描”,但是只保留窗口内的最大值。如图4所示,用一个窗口为2*2、步长为2的最大池化操作将原有输入压缩到四分之一。

图4. 最大池化

卷积加上激活函数称作一个卷积层,多个不同的卷积层串联起来,可以实现不同层次、不同类度的特征抽取,层次越深,提取到的特征越抽像。下图是一个基于深度卷积网络的人脸识别系统中,通过自动学习,不同层次的卷积核所代表的特征。我们可以看到,最下层抽取的都是一些细粒度的、辨识度不高的细节特征,中间部分则是抽取的眼睛、鼻子、嘴巴等形状的中粒度特征,最上层则是整个脸型的大粒度特征。可以发现,卷积神经网络系统可以在不同的层获取不同层次、不同粒度的特征。

图5. 卷积神经网络特征抽取可视化

深度卷积神经网络这种特有的特征提取能力具有重要意义。一方面,越抽象的特征,对事物的表达能力越深刻,对干扰因素的抵抗能力也越强,这是该模型在众多领域取得优异性能的原因之一。另一方面,这种层次性特征表达也是人类视觉系统的信息处理方式,从而部分揭示了深度学习和人类感知系统的相似性。

图6. 利用卷积神经网络进行数字识别示例

最后,我们给出一个用于数字识别的卷积神经网络,如图6所示。在该结构中,输入是一个28*28的图象,然后是6个5*5的卷积核,每个卷积核后面加sigmoid激活函数,在输入中加了填充,每个卷积核得到一个28*28的输出。然后用一个2*2、步长为2的最大池化,得到6个14*14的输出。接下来再连接16个5*5的卷积核,同样加sigmoid激活函数,这次没有使用填充,从而得到了16个10*10的输出。再接一个2*2、步长为2的最大池化,得到16个5*5的输出。后面连接2个分别是120、84个神经元的全连接层,每一层的激活函数都是sigmoid。最后经过一个全连接层输出10个神经元,经过softmax激活函数以后,在这些神经元上的激发值分别代表0~9十个数字的识别概率。当输入一个数字图像时,输出层即得到在各个数字上的识别概率,取概率最大的数字即为识别结果。

By清华大学  马少平 王东