五分钟教你读懂卷积神经网络【CNN】

上期回顾:以RBN(径向基函数)神经网络为例,简要介绍了前馈型神经网络中,“神经元”到底是如何进行“曲线拟合”的。详情可回顾:

 

神经网络如何从入门到精通?(请戳我)

 

在理论上RBF神经网络和BP神经网络能以任意精度逼近任何非线性函数,且Poggio和Girosi已经证明,RBF网络是连续函数的最佳逼近,并且具有良好的泛化能力。

 

但是,生活中绝大多数的问题,并不是简单的曲线拟合问题。

 

因此CNN、DCNN、RNN、LSTM、GAN等等众多的神经网络,为了更好地解决不同方向的实际问题应运而生。

 

本期,将以图像识别的常用方法CNN(卷积神经网络)进行介绍。

 

▐ CNN卷积神经网络

 

卷积神经网络(CNN)是神经网络的一种,它在图像识别和分类等领域已经被证明非常有效。

 

卷积神经网络可以有效识别人脸、物体和交通标志,以及辅助自动驾驶汽车进行路径规划。

 

▐ 为什么需要卷积神经网络?

 

以下图为例,简单绘制了常规的前馈型神经网络的网络结构。图中神经元之间的连线,都是需要学习的权重w和偏置b。

 

随着图像分辨率的不断增大,以1080P的手机拍摄的灰度图像为例:1920*1080 =2073600,就拥有约两百万个像素点。

 

如果隐藏层仅仅只有1000个神经元,需要学习的参数就有20亿个参数,学习难度较高。

 

彩色图像由于具有RBG三个通道的信息,需要学习的参数就更多了。

 

Fig.1 前馈型神经网络结构

 

研究发现,图像的下采样对人进行图像识别的影响较小。

 

以下图为例,高分辨率的X,经简化为9*9的像素点图像。我们依然可以清晰地辨认出字母“X”。

 

Fig.2“X”的下采样

 

Fig.3 局部特征识别

 

同时,根据人类图像识别的知识,人在识别图片特征时,并不需要同时获取整张图的所有特征。

 

例如,我们可能只需识别右边小图的局部特征,就能辨别出这是“鸟嘴”而不需要获取完整的图片特征。

 

卷积神经网络实际上,就是应用上述思想。

 

利用人类在图像识别过程中的知识,只用比较少的参数进行图像数据的处理,简化神经网络的结构,提高图像识别的效率和精准度。

 

▐ 如何理解卷积神经网络?

 

理解卷积神经网络时,我们可以先把卷积神经网络拆分为:卷积神经网络

 

Fig.4 数字“8”的卷积神经网络历程

 

如上的卷积神经网络结构图,分为左边红框的[“卷积”-“池化”]特征提取区,以及右边蓝框的全连接神经网络区。下文着重介绍卷积区:

 

(1)卷积层Convolution Layers

 

在矩阵运算中,卷积是一种常用的局部特征提取方法。

 

下图是“X”图像经垂直梯度卷积核的卷积结果。

 

Fig.5矩阵数据局部特征提取

 

其中(a)为原数据矩阵,(b)为垂直梯度卷积核,(c)为原数据矩阵以垂直梯度算子为卷积核的卷积结果。

 

下公式为图(a)左上角九个元素的卷积结果。

 

1*1+0*0+0*(-1)+0*1+1*0+0*(-1)+0*1+0*0+1*(-1)=0

 

下面的动图更为清晰地演示了卷积运算的计算过程。

 

原数据矩阵上,以滑动窗口内的9个值,和卷积核的值,一一对应相乘相加,其结果就是该窗口的卷积值。

 

Fig.6 卷积动画演示

 

而我们平时熟知的图像,在计算机中的表示,其实也是一个如上述图像的矩阵,矩阵中每一个元素的取值分别对应了图像在该像素位置的颜色。

 

Fig.7 手写数字图像“8”及其对应的矩阵表示

 

因此,我们对图像同样可以采取卷积的操作,在大大减少图像维度的同时,提取图像的有效局部特征信息。

 

(2)池化层 Pooling Layers

 

由于图像的维度一般较大,为了进一步减少图像的尺寸,一般在进行“卷积”特征提取后,还会进行一步“池化”操作。

 

池化(pool)即下采样(downsamples),目的是为了进一步减少特征图(Feature Map)的尺寸。

 

卷积层基于不同的特征提取目标,会采用不同的卷积核;而池化层则具有以下特性:

 

  • 特征不变性。也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片。

     

    这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

 

 

  • 特征降维。我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。

 

  • 在一定程度上防止过拟合,更方便优化

 

池化层进行的运算一般有以下几种:

 

  • 最大池化(Max Pooling)。取不重叠的4个点的最大值。 

 

  • 均值池化(Mean Pooling)。取不重叠的4个点的均值。 

 

  • 高斯池化。借鉴高斯模糊的方法。(不常用)

 

  • 可训练池化。训练函数 ff ,接受不重叠的4个点为输入,出入1个点。(不常用)

 

池化层最常用的方法是MaxPooling,其思想非常简单,为了与卷积过程区分,最大池化的计算例子如下:

 

Fig.8 最大池化演示

 

其中,池化窗口filters的大小和步长stride的长度一般保持一致。

 

如图所示,最大池化的目标是,特征降维,在图像压缩的过程中保留最能表达图像的特征。

 

图像之间的尺寸并不一致,因此可以选择多次卷积、池化操作,直至所提取的Feature Map变为所需要的尺寸。

 

至此,我们就实现了图像数据的特征提取,并避免了“亿万”级别的像素数据带来的数据维度问题。

 

通常,全连接层在卷积神经网络的尾部。该层的连接方式与传统的神经网络中神经元的连接方式一致。

 

Fig.9 卷积神经网络的整体结构

 

简单概括就是:卷积神经网络(CNN),通过卷积(Convolution)、池化(Pooling)等操作对图像信息进行降维和特征提取,并把提取的多个Feature Map以作为输入进行全连接神经网络学习。

 

参考资料:

 

https://www.bilibili.com/video/av44989461 李宏毅讲解CNN神经网络

https://poloclub.github.io/cnn-explainer/ CNN解释器

https://arxiv.org/abs/2004.15004 佐治亚理工中国博士的CNN解释器论文

想了解更多关于人工智能的资讯

欢迎关注普适极客