卷积神经网络(CNN,Convolutional Neural Network)

515 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

LeCun等1987年提出了卷积神经网络 ( Convolutional Neural Network ,CNN) [LeCun and Bengio, 1995; LeCun et al., 1998] ,主要应用于计算机视觉和图像处理等研究领域。

LeCun Y,Boser B,Denker J S,et al. Backpropagation applied to handwritten zip code recognition[J]. Neural Computation,1989,1 ( 4) : 541-551.

CNN可视化网站:poloclub.github.io/cnn-explain…

CNN的好处:

  1. 相较于统识别算法中复杂的特征提取和数据重建的过程,CNN 网络可以直接输入图像。

  2. 相较于传统的MLP的优势在于,连接稀疏性( sparsity of connections ,以前多层感知机可能需要数十亿个参数来表示网络中的一层,现在卷积神经网络通常只需要几百个参数,而且不需要改变输入或隐藏表示的维数。权值数量减少,降低了复杂度,易于优化网络,同时过拟合的风险大大减小。

  3. 参数共享机制(parameters sharing 、权共享 (weight sharing) 让一组神经元使用相同的连接权,这策略节省训练开销。之所以有效是因为:

1)平移不变性(translation invariance :不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应(不管对图片哪个位置处理,都是用同一个卷积核)。即神经网络的前面几层只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系。毕竟,最终可以聚合这些局部特征,以在整个图像级别进行预测。

2)局部性( locality :意味着计算相应的隐藏表示(卷积核的大小)只需一小部分局部图像像素。

形象理解卷积

在下图中,输入是高度为3、宽度为3的二维张量(即形状为3×3)。卷积核的高度和宽度都是2,而卷积核窗口(或卷积窗口)的形状由内核的高度和宽度决定(即2×2)。

image.png

↑ 二维互相关运算。阴影部分是第一个输出元素,以及用于计算输出的输入张量元素和核张量元素:0×0+1×1+3×2+4×3=19.

在二维互相关运算中,卷积窗口从输入张量的左上角开始,从左到右、从上到下滑动。 当卷积窗口滑动到新一个位置时,包含在该窗口中的部分张量与卷积核张量进行按元素相乘,得到的张量再求和得到一个单一的标量值,由此我们得出了这一位置的输出张量值。 在如上例子中,输出张量的四个元素由二维互相关运算得到,这个输出高度为2、宽度为2。

注意,输出大小略小于输入大小。这是因为卷积核的宽度和高度大于1, 而卷积核只有在与图像匹配到的区域大小完全适合时才进行互相关运算。 所以,输出大小等于输入大小 image.png 减去卷积核大小 image.pngimage.png 即卷积的输出形状取决于输入形状和卷积核的形状。

上图中输出的卷积层有时被称为特征映射( feature map ,因为它可以被视为一个输入映射到下一层的空间维度的转换器。 在卷积神经网络中,对于某一层的任意元素x,其感受野( receptive field 是指在前向传播期间可能影响x计算的所有元素(来自所有先前层)。

一个理解卷积层的方法是想象一个手电筒照在图片的左上角。在机器学习术语中,这样一个手电筒被称为卷积核(或者说过滤器(kernel, filter,)。而它照到的区域被称为感知野 (receptive field) 。实际中,卷积核是一个数组,数被称为权重或者参数。很重要的一点就是卷积核的深度和输入图像的深度是一样的(这保证可它能正常工作)。手电筒当扫描完整张图片以后,会得到一组新的矩阵,称为激活图(activation map)或者特征图 (feature map)

当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。多通道输入和多输入通道卷积核之间进行二维互相关运算:对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和得到二维张量。

image.png

在最流行的神经网络架构中,随着神经网络层数的加深,常会追求增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。可将每个通道看作是对不同特征的响应。注意,多输出通道并不仅是学习多个单通道的检测器,每个通道不是独立学习,而是共同优化使用的。

↑,具体做法是采用多个三维卷积核,每个核生成一个输出通道

用ci和co分别表示输入和输出通道的数目,并让kh和kw为卷积核的高度和宽度。为了获得多个通道的输出,可以为每个输出通道创建一个形状为ci×kh×kw的卷积核张量,这样卷积核的形状是co×ci×kh×kw。

image.png

在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

1×1卷积层

卷积的本质是有效提取相邻像素间的相关特征,而1×1卷积显然没有此作用。 尽管如此,1×1仍然十分流行,经常包含在复杂深层网络的设计中。

1×1卷积唯一计算发生在通道上(通道信息融合),通常用于调整网络层的通道数量和控制模型复杂性。可以将1×1卷积层看作是在每个像素位置应用的全连接层,以ci个输入值转换为co个输出值。 因为这仍然是一个卷积层,所以跨像素的权重是一致的。同时,1×1卷积层需要的权重维度为co×ci,再额外加上一个偏置。

下图是使用1×1卷积核与3个输入通道的互相关计算, 得到2个输出通道。

image.png

等价于输入形状为nhnw×ci,权重为co×ci的全连接。