目录
首先图像分类是对输入图像的操作,最终输出一组最好地描述了图像内容的分类(如猫、狗等)或分类的概率。当计算机看到一张图像(输入一张图像)时,它看的是一大堆像素值。根据图片的分辨率和尺寸,它将看到一个数组。当我们人类对图像进行分类时,这些数字毫无用处,可它们却是计算机可获得的唯一输入。
我们想要计算机能够区分开所有提供给它的图片,以及搞清楚各自的特有特征。这也是我们人类的大脑中不自觉进行着的过程。当我们看到一幅狗的图片时,如果有诸如爪子或四条腿之类的明显特征,我们便能将它归类为狗。同样地,计算机也可以通过寻找诸如边缘和曲线之类的低级特点来分类图片,继而通过一系列卷积层级建构出更为抽象的概念。这是 CNN(卷积神经网络)工作方式的大体概述。
更为详细的 CNN 工作概述指的是挑一张图像,让它历经一系列卷积层、非线性层、池化(下采样)层和完全连接层,最终得到输出。
下面是对各个层的详细介绍。
卷积层
单次的卷积运算,即为左边红色框内的数字(感受野)与卷积核(kernel)/过滤器(filter)中对应位置的数字相乘再求和,其结果为右边红色框内示出的值(0)。可以看到,框的大小,即卷积核的大小是人为设定的,直观地,可以将卷积核的大小与“时间分辨率”类比,卷积核越大,分辨率越低。
然后,将红色框向右移动一个单位(即滑动步长stride=1),再次进行卷积运算。
每个过滤器可以被看成是特征标识符。这里的特征指的是例如直边缘、原色、曲线之类的东西。假设第一组过滤器是 7 x 7 x 3 的曲线检测器,作为曲线过滤器,它将有一个像素结构,在曲线形状旁时会产生更高的数值。
当我们将过滤器置于输入内容的左上角时,它将计算过滤器和这一区域像素值之间的点积。拿一张需要分类的照片为例,将过滤器放在它的左上角。如下图
我们要做的是将过滤器与图像的原始像素值相乘。
如果输入图像上某个形状看起来很像过滤器表示的曲线,那么所有点积加在一起将会得出一个很大的值,下面移动过滤器。
这是因为图像的这一部分和曲线检测器过滤器不存在对应。这个卷积层的输出是一个激活映射(activation map)。因此,在这个带有一个过滤器卷积的例子里(曲线检测器),激活映射将会显示出图像里最像曲线的区域。激活映射的左上角的值为 6600,高数值意味着很有可能是输入内容中的曲线激活了过滤器。激活地图右上角的值将会是 0,因为输入内容中没有任何东西能激活过滤器。更简单地说,原始图片中的这一区域没有任何曲线。
这仅仅是一组检测右弯曲线的过滤器。还有其它检测左弯曲线或直线边缘的过滤器。过滤器越多,激活映射的深度越大,我们对输入内容的了解也就越多。
在下图中是网络中第一个卷积层的过滤器的实际可视化。当在输入内容中寻找特定特征时,第一层上的过滤器在输入图像上进行卷积运算和「激活」(即计算高数值)。
激活函数层
如果不用激活函数,在这种情况下每一层输出都是上层输入的线性函数。容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当。因此引入非线性函数作为激活函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。
ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。
池化层
池化即下采样,目的是为了减少特征图,主要作用是通过减少网络的参数来减小计算量,并且能够在一定程度上控制过拟合。通常在卷积层的后面会加上一个池化层。池化操作对每个深度切片独立,规模一般为 2*2,池化层进行的运算一般有以下几种
大多数情况下我们使用前两种最大池化和均值池化。最大池化就是去其中最大的值,均值池化就是取其平均值。
以上是以单通道(即一个“图像”)为例,在实际应用中,CNN中往往用到多个通道的情形,以三个通道的情形为例,卷积运算过程如下图所示:
可以看出,此时依旧是对应位置的数字相乘然后再求和。
全连接层
卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。将“分布式特征表示”映射到样本标记空间的作用。
假设我们现在的任务是去识别一张图片是不是猫。
假设这个神经网络模型已经训练到此阶段,如图:
经过卷积,池化,激活等层,现已提取了上图所示的局部特征,且已到达了第一层全连接层并激活符合特征存在的部分神经元,该连接层是一维的,而这个层的作用就是根据提取到的局部特征进行相关操作进行组合并输出到第二个全连接层的某个神经元处,如上图,经过组合我们可以知道这是个喵头。
那我们现在往后走一层,到第二层全连接层,假设猫的身体其他部位特征也都被上述类似的操作提取和组合出来,则
当我们找到这些特征,神经元就被激活了(上图红色圆圈)。
此时,再将上图中的特征进行组合并输出到输出层,经过softmax函数进行分类,得出结论,这是只猫。
一个典型的 CNN 结构看起来是这样的:
以二分类问题为例,下图展示了CNN所涉及的主要环节: