卷积神经网络最清晰的理解 --上


视觉感知

一,画面识别是什么任务?

学习知识的第一步就是明确任务,清楚该知识的输入输出。卷积神经网络最初是服务于画面识别的,所以我们先来看看画面识别的实质是什么。

先观看几组动物与人类视觉的差异对比图。

  1. 苍蝇的视觉和人的视觉的差异

在这里插入图片描述
在这里插入图片描述

  1. 蛇的视觉和人的视觉的差异

在这里插入图片描述
在这里插入图片描述
通过上面的两组对比图可以知道,即便是相同的图片经过不同的视觉系统,也会得到不同的感知。

这里引出一条知识:生物所看到的景象并非世界的原貌,而是长期进化出来的适合自己生存环境的一种感知方式。 蛇的猎物一般是夜间行动,所以它就进化出了一种可以在夜间也能很好观察的感知系统,感热。

任何视觉系统都是将图像反光与脑中所看到的概念进行关联。

在这里插入图片描述
所以画面识别实际上并非识别这个东西客观上是什么,而是寻找人类的视觉关联方式,并再次应用。 如果我们不是人类,而是蛇类,那么画面识别所寻找的?就和现在的不一样。

画面识别实际上是寻找(学习)人类的视觉关联方式?,并再次应用。


二,图片被识别成什么取决于哪些因素?

下面用一张图片来体会识别结果取决于哪些因素。

老妇与少女:

在这里插入图片描述
请观察上面这张图片,你看到的是老妇还是少女? 以不同的方式去观察这张图片会得出不同的答案。 图片可以观察成有大鼻子、大眼睛的老妇。也可以被观察成少女,但这时老妇的嘴会被识别成少女脖子上的项链,而老妇的眼睛则被识别为少女的耳朵。

所以,识别结果受年龄,文化等因素的影响,换句话说:

  • 图片被识别成什么不仅仅取决于图片本身,还取决于图片是如何被观察的。

图像表达

我们知道了“画面识别是从大量的,数据中寻找人类的视觉关联方式?,并再次应用。 其中x是输入,表示所看到的东西,y是输出,表示该东西是什么。

在自然界中,x是物体的反光,那么在计算机中,图像又是如何被表达和存储的呢?

在这里插入图片描述
图像在计算机中是一堆按顺序排列的数字,数值为0到255。0表示最暗,255表示最亮。 你可以把这堆数字用一个长长的向量来表示,也就是tensorflow的mnist教程中784维向量的表示方式。 然而这样会失去平面结构的信息,为保留该结构信息,通常选择矩阵的表示方式:28x28的矩阵。

上图是只有黑白颜色的灰度图,而更普遍的图片表达方式是RGB颜色模型,即红(Red)、绿(Green)、蓝(Blue)三原色的色光以不同的比例相加,以产生多种多样的色光。

这样,RGB颜色模型中,单个矩阵就扩展成了有序排列的三个矩阵,也可以用三维张量去理解,其中的每一个矩阵又叫这个图片的一个channel。

在电脑中,一张图片是数字构成的“长方体”。可用 宽width, 高height, 深depth 来描述,如图。

在这里插入图片描述

画面识别的输入是shape为(width, height, depth)的三维张量。

接下来要考虑的就是该如何处理这样的“数字长方体”。


画面不变性

在决定如何处理“数字长方体”之前,需要清楚所建立的网络拥有什么样的特点。 我们知道一个物体不管在画面左侧还是右侧,都会被识别为同一物体,这一特点就是不变性(invariance),如下图所示。

在这里插入图片描述
我们希望所建立的网络可以尽可能的满足这些不变性特点。

为了理解卷积神经网络对这些不变性特点的贡献,我们将用不具备这些不变性特点的前馈神经网络来进行比较。


图片识别–前馈神经网络

方便起见,我们用depth只有1的灰度图来举例。 想要完成的任务是:在宽长为4x4的图片中识别是否有下图所示的“横折”。 图中,黄色圆点表示值为0的像素,深色圆点表示值为1的像素。 我们知道不管这个横折在图片中的什么位置,都会被认为是相同的横折。

在这里插入图片描述
若训练前馈神经网络来完成该任务,那么表达图像的三维张量将会被摊平成一个向量,作为网络的输入,即(width, height, depth)为(4, 4, 1)的图片会被展成维度为16的向量作为网络的输入层。再经过几层不同节点个数的隐藏层,最终输出两个节点,分别表示“有横折的概率”和“没有横折的概率”,如下图所示。

在这里插入图片描述
下面我们用数字(16进制)对图片中的每一个像素点(pixel)进行编号。 当使用右侧那种物体位于中间的训练数据来训练网络时,网络就只会对编号为5,6,9,a的节点的权重进行调节。 若让该网络识别位于右下角的“横折”时,则无法识别。

在这里插入图片描述
解决办法是用大量物体位于不同位置的数据训练,同时增加网络的隐藏层个数从而扩大网络学习这些变体的能力。

然而这样做十分不效率,因为我们知道在左侧的“横折”也好,还是在右侧的“横折”也罢,大家都是“横折”。 为什么相同的东西在位置变了之后要重新学习?有没有什么方法可以将中间所学到的规律也运用在其他的位置? 换句话说,也就是让不同位置用相同的权重。


举例补充说明一下 : 举例补充说明一下: 举例补充说明一下:

全连接神经网络(Fully Connected Neural Network,FCNN)在处理图像识别任务时,尤其是像手写数字识别这样的任务,存在一个显著的局限性:它不具备平移不变性。这意味着如果训练集中的图像特征(如数字)位于图像的某个固定位置(例如居中),而测试集中的图像特征位于不同的位置(例如右下角),全连接神经网络可能无法正确识别。

输入表示:

  • 全连接神经网络将输入图像展平为一个一维向量。例如,一个 28x28 的图像会被展平为长度为 784 的向量。
  • 每个像素的位置在输入向量中是固定的。例如,图像的左上角像素总是向量的第一个元素,右下角像素总是向量的最后一个元素。

权重学习:

  • 全连接神经网络的每个神经元学习输入向量中特定位置的权重。
  • 如果训练集中的数字总是位于图像的居中位置,网络会学习到这些位置的权重与数字类别之间的关系。

假设训练集中的手写数字图像如下:

  • 数字位于图像的居中位置。
  • 网络学习到居中的像素值与数字类别之间的关系。

测试集中的手写数字图像如下:

  • 数字位于图像的右下角。
  • 网络尝试使用居中的像素值来识别数字,但这些位置的像素值可能是空白或背景。

平移不变性:

  • 平移不变性是指模型能够识别图像中的特征,无论这些特征位于图像的哪个位置。
  • 卷积神经网络(CNN)通过卷积操作实现了平移不变性,因为卷积核可以在图像的不同位置滑动,提取相同的特征。

全连接神经网络的局限性:

  • 全连接神经网络没有平移不变性。它依赖于输入向量中特定位置的像素值。
  • 如果训练集中的数字总是居中,而测试集中的数字位于右下角,网络会尝试使用居中的像素值来识别数字,而右下角的像素值对网络来说是“未知”的。

图片识别–卷积神经网络

卷积神经网络就是让权重在不同位置共享的神经网络。

局部连接

在卷积神经网络中,我们先选择一个局部区域,用这个局部区域去扫描整张图片。 局部区域所圈起来的所有节点会被连接到下一层的一个节点上。

为了更好的和前馈神经网络做比较,我将这些以矩阵排列的节点展成了向量。 下图展示了被红色方框所圈中编号为0,1,4,5的节点是如何通过w1,w2,w3,w4连接到下一层的节点0上的。

在这里插入图片描述
这个带有连接强弱的红色方框就叫做 filter 或 kernel 或 feature detector。 而filter的范围叫做filter size,这里所展示的是2x2的filter size。

[ w 1 w 2 w 3 w 4 ] \begin{bmatrix} w1 & w2 \\ w3 & w4 \end{bmatrix} [w1w3w2w4]

第二层的节点0的数值就是局部区域的线性组合,即被圈中节点的数值乘以对应的权重后相加。 用 x 表示输入值,y 表示输出值,用图中标注数字表示角标,则下面列出了两种计算编号为0的输出值的表达式。

注:在局部区域的线性组合后,也会和前馈神经网络一样,加上一个偏移量 b0。

y 0 = x 0 ∗ w 1 + x 1 ∗ w 2 + x 4 ∗ w 3 + x 5 ∗ w 4 + b 0 y0 = x0 * w1 + x1 * w2 + x4 * w3 + x5 * w4 + b0 y0=x0w1+x1w2+x4w3+x5w4+b0

y 0 = [ w 1 w 2 w 3 w 4 ] ∗ [ x 0 x 1 x 4 x 5 ] + b 0 y0 = \begin{bmatrix} w1 & w2 & w3 & w4 \end{bmatrix}* \begin{bmatrix} x0\\ x1\\ x4\\ x5 \end{bmatrix} + b0 y0=[w1w2w3w4] x0x1x4x5 +b0


空间共享

当filter扫到其他位置计算输出节点 y i y_{i} yi时,w1,w2,w3,w4,包括b0是共用的。

下面这张动态图展示了当filter扫过不同区域时,节点的链接方式。 动态图的最后一帧则显示了所有连接。 可以注意到,每个输出节点并非像前馈神经网络中那样与全部的输入节点连接,而是部分连接。 这也就是为什么大家也叫前馈神经网络(feedforward neural network)为fully-connected neural network。 图中显示的是一步一步的移动filter来扫描全图,一次移动多少叫做stride。

在这里插入图片描述

空间共享也就是卷积神经网络所引入的先验知识。


输出表达

如先前在图像表达中提到的,图片不用向量去表示是为了保留图片平面结构的信息。 同样的,卷积后的输出若用上图的排列方式则丢失了平面结构信息。 所以我们依然用矩阵的方式排列它们,就得到了下图所展示的连接。

在这里插入图片描述
这也就是你们在网上所看到的下面这张图。在看这张图的时候请结合上图的连接一起理解,即输入(绿色)的每九个节点连接到输出(粉红色)的一个节点上的。
在这里插入图片描述
经过一个feature detector计算后得到的粉红色区域也叫做一个“Convolved Feature” 或 “Activation Map” 或 “Feature Map”。


特征图的补充说明 : 特征图的补充说明: 特征图的补充说明:

特征图(Feature Map)中每个元素的值可以看作是特征关于特定卷积核(Filter)提取出来的强度。

特征图的定义:

  • 特征图 是卷积层的输出,表示输入图像经过卷积核滤波后的结果。
  • 每个特征图对应一个卷积核,卷积核提取的是某种特定的特征(如边缘、纹理、形状等)。
  • 特征图中的每个元素(即每个像素值)表示输入图像的某个局部区域与卷积核的匹配程度

卷积操作的本质是 局部区域的加权求和。具体来说:

  • 卷积核在输入图像上滑动,每次覆盖一个局部区域。
  • 卷积核的权重与局部区域的像素值进行逐元素相乘,然后求和,得到特征图中的一个元素。

特征强度:

  • 特征图中每个元素的值反映了输入图像的局部区域与卷积核的匹配程度
  • 值越大,表示该局部区域与卷积核所提取的特征越匹配,即特征强度越高

示例:

  • 如果卷积核用于检测水平边缘,那么特征图中高值的位置对应图像中的水平边缘。
  • 如果卷积核用于检测某种纹理,那么特征图中高值的位置对应图像中的该纹理区域。

补充说明部分为借助AI生成的问题回答补充,不一定正确,但是可以从某些角度帮助理解,如有错误,欢迎指出。


Depth维的处理

现在我们已经知道了depth维度只有1的灰度图是如何处理的。 但前文提过,图片的普遍表达方式是下图这样有3个channels的RGB颜色模型。 当depth为复数的时候,每个feature detector是如何卷积的?

在这里插入图片描述
现象:2x2所表达的filter size中,一个2表示width维上的局部连接数,另一个2表示height维上的局部连接数,并却没有depth维上的局部连接数,是因为depth维上并非局部,而是全部连接的

在2D卷积中,filter在张量的width维, height维上是局部连接,在depth维上是贯串全部channels的。


2 D 卷积与 3 D 卷积的补充说明 : 2D卷积与3D卷积的补充说明: 2D卷积与3D卷积的补充说明:

特性2D 卷积3D 卷积
输入数据2D 数据(如图像)3D 数据(如视频或体积数据)
输入形状[channels, height, width][channels, depth, height, width]
卷积核形状[kernel_height, kernel_width][kernel_depth, kernel_height, kernel_width]
输出形状[out_channels, height, width][out_channels, depth, height, width]
滑动方向高度和宽度方向深度、高度和宽度方向
应用场景图像处理任务视频分析、医学图像处理等

本文涉及到的均为2D卷积。


类比:想象在切蛋糕的时候,不管这个蛋糕有多少层,通常大家都会一刀切到底,但是在长和宽这两个维上是局部切割。

下面这张图展示了,在depth为复数时,filter是如何连接输入节点到输出节点的。 图中红、绿、蓝颜色的节点表示3个channels。 黄色节点表示一个feature detector卷积后得到的Feature Map。 其中被透明黑框圈中的12个节点会被连接到黄黑色的节点上。

  • 在输入depth为1时:被filter size为2x2所圈中的4个输入节点连接到1个输出节点上。
  • 在输入depth为3时:被filter size为2x2,但是贯串3个channels后,所圈中的12个输入节点连接到1个输出节点上。
  • 在输入depth为n时:2x2xn个输入节点连接到1个输出节点上。

在这里插入图片描述
注意:三个channels的权重并不共享。 即当深度变为3后,权重也跟着扩增到了三组,如式子(3)所示,不同channels用的是自己的权重。 式子中增加的角标r,g,b分别表示red channel, green channel, blue channel的权重。

[ w r 1 w r 2 w r 3 w r 4 ] , [ w g 1 w g 2 w g 3 w g 4 ] , [ w b 1 w b 2 w b 3 w b 4 ] ( 3 ) \begin{bmatrix} wr1&wr2 \\ wr3&wr4 \end{bmatrix},\begin{bmatrix} wg1&wg2 \\ wg3&wg4 \end{bmatrix},\begin{bmatrix} wb1&wb2 \\ wb3&wb4 \end{bmatrix}(3) [wr1wr3wr2wr4][wg1wg3wg2wg4][wb1wb3wb2wb4](3)


多输入多输出通道补充说明 : 多输入多输出通道补充说明: 多输入多输出通道补充说明:

当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为 C i C_{i} Ci,那么卷积核的输入通道数也需要为 C i C_{i} Ci。如果卷积核的窗口形状是 K h ∗ K w K_{h} * K_{w} KhKw,那么当 C i = 1 C_{i} = 1 Ci=1时,我们可以把卷积核看作形状为 K h ∗ K w K_{h} * K_{w} KhKw的二维张量。

然而,当时 C i > 1 C_{i} > 1 Ci>1,我们卷积核的每个输入通道将包含形状为 K h ∗ K w K_{h} * K_{w} KhKw的张量。将这些张量 C i C_{i} Ci连结在一起可以得到形状为 K h ∗ K w ∗ C i K_{h} * K_{w} * C_{i} KhKwCi的卷积核。由于输入和卷积核都有 C i C_{i} Ci个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将 C i C_{i} Ci的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。

在这里插入图片描述
具体可阅读动手学习深度学习: 多输入多输出通道一章进行学习

例如: 当输入是 RGB 三通道图像 时,卷积核需要为每个通道都单独分配一组权重,这是因为 每个通道代表不同的颜色信息,而卷积操作需要同时考虑所有通道的信息来提取特征。原因如下:

每个通道代表不同的信息:

  • RGB 图像的三个通道分别表示红色、绿色和蓝色的强度。
  • 不同通道可能包含不同的特征信息(例如,某个物体的边缘可能在 R 通道中更明显,而在 B 通道中不明显)。
  • 为了充分提取图像的特征,卷积核需要分别处理每个通道的信息,也就需要为不同的通道分配一组不同的权重进行对应的特征提取。
  • 这里无法在不同的通道上使用一组相同的权重进行特征提取,所以也是上文为什么说depth维上是全部连接的。

通道间的相关性:

  • 图像的特征通常是由多个通道共同决定的。
  • 例如,某个物体的颜色可能是红色和绿色的组合,卷积核需要同时考虑 R 通道和 G 通道的信息。

计算例子:用 x r 0 x_{r0} xr0表示red channel的编号为0的输入节点, x g 5 x_{g5} xg5表示green channel编号为5个输入节点。 x b 1 x_{b1} xb1表示blue channel。如式子(4)所表达,这时的一个输出节点实际上是12个输入节点的线性组合。

在这里插入图片描述
当filter扫到其他位置计算输出节点 y i y_{i} yi时,那12个权重在不同位置是共用的,如下面的动态图所展示。 透明黑框圈中的12个节点会连接到被白色边框选中的黄色节点上。

在这里插入图片描述

每个filter会在width维, height维上,以局部连接和空间共享,并贯串整个depth维的方式得到一个Feature Map。


Zero padding

细心的读者应该早就注意到了,4x4的图片被2x2的filter卷积后变成了3x3的图片,每次卷积后都会小一圈的话,经过若干层后岂不是变的越来越小? Zero padding就可以在这时帮助控制Feature Map的输出尺寸,同时避免了边缘信息被一步步舍弃的问题

例如:下面4x4的图片在边缘Zero padding一圈后,再用3x3的filter卷积后,得到的Feature Map尺寸依然是4x4不变。

在这里插入图片描述
通常大家都想要在卷积时保持图片的原始尺寸。 选择3x3的filter和1的zero padding,或5x5的filter和2的zero padding可以保持图片的原始尺寸。 这也是为什么大家多选择3x3和5x5的filter的原因。 另一个原因是3x3的filter考虑到了像素与其距离为1以内的所有其他像素的关系,而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。

尺寸:Feature Map的尺寸等于(input_size + 2 * padding_size − filter_size)/stride+1。

注意:上面的式子是计算width或height一维的。padding_size也表示的是单边补零的个数。例如(4+2-3)/1+1 = 4,保持原尺寸。

不用去背这个式子。其中(input_size + 2 * padding_size)是经过Zero padding扩充后真正要卷积的尺寸。 减去 filter_size后表示可以滑动的范围。 再除以可以一次滑动(stride)多少后得到滑动了多少次,也就意味着得到了多少个输出节点。 再加上第一个不需要滑动也存在的输出节点后就是最后的尺寸。


形状、概念抓取

知道了每个filter在做什么之后,我们再来思考这样的一个filter会抓取到什么样的信息。

我们知道不同的形状都可由细小的“零件”组合而成的。比如下图中,用2x2的范围所形成的16种形状可以组合成格式各样的“更大”形状。

卷积的每个filter可以探测特定的形状。又由于Feature Map保持了抓取后的空间结构若将探测到细小图形的Feature Map作为新的输入再次卷积后,则可以由此探测到“更大”的形状概念

  • 通过多层卷积,网络可以从简单的局部特征逐步提取出复杂的全局特征

举例说明 : 举例说明: 举例说明:

在深度网络的发展趋势中,提升网络的宽度和深度已经是常规操作,能够解决过拟合,但同时也带来了大量参数的问题,所以减少网络参数也是必要的。在很多网络中,都使用了3个3x3卷积核来代替7x7卷积核,或者使用了2个3x3卷积核来代替5x5卷积核,这样做的主要目的是:

  1. 在保证具有相同感受野Receptive Field的条件下,增加网络的深度,进而在一定程度上提升神经网络的效果;
  2. 减少网络的计算参数量。

在这里插入图片描述
假设图片尺寸为28x28,首先,使用5x5卷积核对其进行卷积,且stride=1,得到特征图尺寸为:(28-5)/1+1=24。然后,使用2个3x3卷积核(这里的两个是指2层),stride=1,有:

  • 第一层3x3:得到的结果是(28-3)/1+1=26
  • 第二层3x3:得到的结果是(26-3)/1+1=24

所以,2个3x3卷积后的最终结果和1个5x5的卷积核是一样的。说明一下减少网络参数的作用:

  • 对于2个3x3卷积核,所用的参数总量为2x(3x3)xchannels, 对于1个5x5卷积核为5x5xchannels, 因此可以显著地减少参数的数量,可以减少约30%的参数数量。

使用小卷积代替大卷积的好处:

  • 保证具有相同感受野的条件下,提升了网络的深度,在一定程度上提升了网络效果(从这点来说,也说明了ResNet的巨大作用)
  • 保证具有相同感受野的条件下,减少了计算量和参数量

比如下图的第一个“大”形状可由2,3,4,5基础形状拼成。第二个可由2,4,5,6组成。第三个可由6,1组成。

在这里插入图片描述
除了基础形状之外,颜色、对比度等概念对画面的识别结果也有影响。卷积层也会根据需要去探测特定的概念。

可以从下面这张图中感受到不同数值的filters所卷积过后的Feature Map可以探测边缘,棱角,模糊,突出等概念。

在这里插入图片描述
如我们先前所提,图片被识别成什么不仅仅取决于图片本身,还取决于图片是如何被观察的。

filter内的权重矩阵W是网络根据数据学习得到的,也就是说,我们让神经网络自己学习以什么样的方式去观察图片。

拿老妇与少女的那幅图片举例,当标签是少女时,卷积网络就会学习抓取可以成少女的形状、概念。 当标签是老妇时,卷积网络就会学习抓取可以成老妇的形状、概念。

下图展现了在人脸识别中经过层层的卷积后,所能够探测的形状、概念也变得越来越抽象和复杂。

在这里插入图片描述
卷积神经网络会尽可能寻找最能解释训练数据的抓取方式。


多filters

每个filter可以抓取探测特定的形状的存在。 假如我们要探测下图的长方框形状时,可以用4个filters去探测4个基础“零件”。

在这里插入图片描述
因此我们自然而然的会选择用多个不同的filters对同一个图片进行多次抓取。 每增加一个filter,就意味着你想让网络多抓取一个特征。

这样卷积层的输出也不再是depth为1的一个平面,而是和输入一样是depth为复数的长方体。

如下图所示,当我们增加一个filter(紫色表示)后,就又可以得到一个Feature Map。 将不同filters所卷积得到的Feature Maps按顺序堆叠后,就得到了一个卷积层的最终输出。

在这里插入图片描述

卷积层的输入是长方体,输出也是长方体。

这样卷积后输出的长方体可以作为新的输入送入另一个卷积层中处理。


补充说明 : 补充说明: 补充说明:

卷积层输出的 n 个 Feature Map 组合为 n 个输出通道,并传入下一层继续卷积,从而实现更高维度的特征提取。这种层次化的特征提取方式是卷积神经网络(CNN)的核心机制之一。以下是详细的解释:

  1. 浅层卷积: 提取简单的局部特征(如边缘、线条、颜色)。例如,第一层卷积可能生成 16 个 Feature Map,每个 Feature Map 对应一种简单的特征。

  2. 深层卷积: 将浅层卷积的输出作为输入,进一步提取更复杂的特征。例如,第二层卷积可能生成 32 个 Feature Map,每个 Feature Map 对应一种由简单特征组合而成的复杂特征。

  3. 层次化特征提取: 通过多层卷积,CNN 可以逐步提取从低级到高级的特征。例如:

    • 第一层卷积提取边缘。
    • 第二层卷积提取由边缘组成的简单形状。
    • 第三层卷积提取由简单形状组成的复杂物体。

上面补充的是AI生成的回答,下面补充一些我个人的理解:

  • 假设输入一张RGB三通道图像,那么我们可以使用10个卷积核从10个不同的角度对输入图像进行特征提取,生成10个特征图,同时每个卷积核大小为 W ∗ H ∗ 3 W * H * 3 WH3 , 3表示每个卷积核depth为3,为RGB三通道中每个通道提供不同的filter提取特征,最后再将多个通道提取得到的信息量叠加在一起,得到对应元素位置最终输出。
  • 生成的10个特征图组成了下一层卷积的输入,这10个特征图在下一个卷积层看来,又可以看做一个具有10通道的输入图像,不同的通道含有原始输入图像不同维度的特征信息 。
  • 因此,我们需要第二层的卷积层的每个卷积核的depth就为10,需要从10个不同的维度去借助卷积提取对应的信息,最后再叠加在一起。
  • 第一层卷积是在原始输入图像上提取出的特征图,可能是通过一个类似检测边缘的filter扫描原始图像得到一个特征图,该特征图可视化效果类似标注出了图像中的边缘线条部分,同时借助池化层过滤掉不重要信息,只保留每个小区域中强度最大的输出结果,用来近似代替当前区域所体现出的特征强度。
  • 第二层卷积会基于第一层卷积输出结果继续做特征提取,在已经提取出一层浅层特征的特征图上继续进行特征提取操作,那么一个小区域中包含的信息量继续增多,基于这些信息量提取出的特征就会更加抽象,就类似从一堆线条抽取出了眼睛鼻子的形状。
  • 卷积层越深,通道数越多,那么单个小区域中包含的信息量越丰富越抽象,对原始图像信息压缩提取的越厉害,从而实现基于主要的,核心的特征进行如图像分类任务等,这一过程替代了传统机器学习中手动特征工程的过程,通过CNN自动完成提取最适合用于图像分类的一些高纬度抽象特征信息组成一组特征向量,最后将该特征向量传入全连接层实现拟合任务,通过softmax回归预测类别概率。

即使可以可视化CNN每一层卷积的输出结果,但是整体看来我们仍然无法解释为什么要这样去提取图片特征信息,为什么这些特征对图像分类任务会更加有效,毕竟这些特征提取过程是机器完成的,而不是我们人工特征工程实现的,因此具有不可解释性。

在这里插入图片描述


加入非线性

和前馈神经网络一样,经过线性组合和偏移后,会加入非线性增强模型的拟合能力。

将卷积所得的Feature Map经过ReLU变换(elementwise)后所得到的output就如下图所展示。

在这里插入图片描述


输出长方体

现在我们知道了一个卷积层的输出也是一个长方体。 那么这个输出长方体的(width, height, depth)由哪些因素决定和控制。

这里直接用CS231n的Summary:

在这里插入图片描述

计算例子:请体会CS231n的Convolution Demo部分的演示。


Max pooling

在卷积后还会有一个pooling的操作,尽管有其他的比如average pooling等,这里只提max pooling。

max pooling的操作如下图所示:整个图片被不重叠的分割成若干个同样大小的小块(pooling size)。每个小块内只取最大的数字,再舍弃其他节点后,保持原有的平面结构得出output。

在这里插入图片描述
max pooling在不同的depth上是分开执行的,且不需要参数控制。 那么问题就max pooling有什么作用?部分信息被舍弃后难道没有影响吗?

在这里插入图片描述
Max pooling的主要功能是downsamping,却不会损坏识别结果。 这意味着卷积后的Feature Map中有对于识别物体不必要的冗余信息。 那么我们就反过来思考,这些“冗余”信息是如何产生的。

直觉上,我们为了探测到某个特定形状的存在,用一个filter对整个图片进行逐步扫描。但只有出现了该特定形状的区域所卷积获得的输出才是真正有用的,用该filter卷积其他区域得出的数值就可能对该形状是否存在的判定影响较小。 比如下图中,我们还是考虑探测“横折”这个形状。 卷积后得到3x3的Feature Map中,真正有用的就是数字为3的那个节点,其余数值对于这个任务而言都是无关的。 所以用3x3的Max pooling后,并没有对“横折”的探测产生影响。 试想在这里例子中如果不使用Max pooling,而让网络自己去学习。 网络也会去学习与Max pooling近似效果的权重。因为是近似效果,增加了更多的parameters的代价,却还不如直接进行Max pooling。

在这里插入图片描述
Max pooling还有类似“选择句”的功能。假如有两个节点,其中第一个节点会在某些输入情况下最大,那么网络就只在这个节点上流通信息;而另一些输入又会让第二个节点的值最大,那么网络就转而走这个节点的分支。

但是Max pooling也有不好的地方。因为并非所有的抓取都像上图的例子。有些周边信息对某个概念是否存在的判定也有影响。 并且Max pooling是对所有的Feature Maps进行等价的操作。就好比用相同网孔的渔网打鱼,一定会有漏网之鱼。


全连接层

当抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 全连接层(也叫前馈层)就可以用来将最后的输出映射到线性可分的空间。 通常卷积网络的最后会将末端得到的长方体平摊(flatten)成一个长长的向量,并送入全连接层配合输出层进行分类。

卷积神经网络大致就是covolutional layer, pooling layer, ReLu layer, fully-connected layer的组合,例如下图所示的结构。

在这里插入图片描述

这里也体现了深层神经网络或deep learning之所以称deep的一个原因:模型将特征抓取层和分类层合在了一起。 负责特征抓取的卷积层主要是用来学习“如何观察”。

下图简述了机器学习的发展,从最初的人工定义特征再放入分类器的方法,到让机器自己学习特征,再到如今尽量减少人为干涉的deep learning。

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值