卷积神经网络

6

  • 图像数据的每个样本都由一个二维像素网格组成, 每个像素可能是一个或者多个数值,取决于是黑白还是彩色图像。
  • 卷积神经网络(convolutional neural network,CNN)是一类强大的、为处理图像数据而设计的神经网络。
  • 卷积神经网络需要的参数少于全连接架构的网络,而且卷积也很容易用GPU并行计算。 因此卷积神经网络除了能够高效地采样从而获得精确的模型,还能够高效地计算。

6.1

之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。

卷积神经网络(convolutional neural networks,CNN)是机器学习利用自然图像中一些已知结构的创造性方法。

  • 假设我们想从一张图片中找到某个物体。 合理的假设是:无论哪种方法找到这个物体,都应该和物体的位置无关。卷积神经网络正是将空间不变性(spatial invariance)的这一概念系统化,从而基于这个模型使用较少的参数来学习有用的表示。
    • 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
      输入X中的平移,应该仅导致隐藏表示H中的平移。
    • 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。
      卷积神经网络是包含卷积层的一类特殊的神经网络。 在深度学习研究社区中,V被称为卷积核(convolution kernel)或者滤波器(filter),亦或简单地称之为该卷积层的权重,通常该权重是可学习的参数。
  • 卷积是当把一个函数“翻转”并移位x时,测量f和g之间的重叠。
    ( f ∗ g ) ( x ) = ∫ f ( z ) g ( x − z ) d z (f * g)(x) =\int f(z) g(x-z)dz (fg)(x)=f(z)g(xz)dz(卷积的定义)

小结

  • 图像的平移不变性使我们以相同的方式处理局部图像,而不在乎它的位置。
  • 局部性意味着计算相应的隐藏表示只需一小部分局部图像像素。
  • 在图像处理中,卷积层通常比全连接层需要更少的参数,但依旧获得高效用的模型。
  • 卷积神经网络(CNN)是一类特殊的神经网络,它可以包含多个卷积层。
  • 多个输入和输出通道使模型在每个空间位置可以获取图像的多方面特征。

6.2

  • 卷积核窗口(或卷积窗口)的形状由内核的高度和宽度决定。
  • 输出大小略小于输入大小。这是因为卷积核的宽度和高度大于1, 而卷积核只与图像中每个大小完全适合的位置进行互相关运算。 所以,输出大小等于输入大小 x h × n w x_h \times n_w xh×nw减去卷积核大小 k h × k w k_h \times k_w kh×kw,即: ( n h − k h + 1 ) × ( n w − k w + 1 ) (n_h - k_h + 1)\times(n_w - k_w + 1) (nhkh+1)×(nwkw+1)
  • 卷积层中的两个被训练的参数是卷积核权重和标量偏置。
  • 高度和宽度分别为h和w的卷积核可以被称为
    h × w h \times w h×w卷积或 h × w h \times w h×w卷积核。 我们也将带有
    卷积核的卷积层称为 h × w h \times w h×w卷积层。

图像中目标的边缘检测

  • 卷积层的一个简单应用:通过找到像素变化的位置,来检测图像中不同颜色的边缘。

互相关和卷积

  • 互相关:输出大小等于输入大小 x h × n w x_h \times n_w xh×nw减去卷积核大小 k h × k w k_h \times k_w kh×kw,即: ( n h − k h + 1 ) × ( n w − k w + 1 ) (n_h - k_h + 1)\times(n_w - k_w + 1) (nhkh+1)×(nwkw+1)
  • 卷积: ( f ∗ g ) ( x ) = ∫ f ( z ) g ( x − z ) d z (f * g)(x) =\int f(z) g(x-z)dz (fg)(x)=f(z)g(xz)dz

特征映射和感受野

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

小结

  • 当需要检测输入特征中更广区域时,我们可以构建一个更深的卷积网络。

6.3

卷积的输出形状取决于输入形状和卷积核的形状。
还有什么因素会影响输出的大小呢?本节我们将介绍填充(padding)和步幅(stride)。

填充

  • 在应用多层卷积时,我们常常丢失边缘像素。 由于我们通常使用小卷积核,因此对于任何单个卷积,我们可能只会丢失几个像素。 但随着我们应用许多连续卷积层,累积丢失的像素数就多了。 解决这个问题的简单方法即为填充(padding):在输入图像的边界填充元素(通常填充元素是0)。

  • 通常,如果我们添加 p h p_h ph行填充(大约一半在顶部,一半在底部)和 p w p_w pw列填充(左侧大约一半,右侧一半),则输出形状将为 ( n h − k h + p h + 1 ) × ( n w − k w + p w + 1 ) (n_h - k_h + p_h +1) \times (n_w - k_w + p_w +1) (nhkh+ph+1)×(nwkw+pw+1)

  • 在许多情况下,我们需要设置 p h = k h − 1 p_h = k_h -1 ph=kh1 p w = k w − 1 p_w = k_w -1 pw=kw1,使输入和输出具有相同的高度和宽度。 这样可以在构建网络时更容易地预测每个图层的输出形状。假设 k h k_h kh是奇数,我们将在高度的两侧填充 p h / 2 p_h/2 ph/2行。 如果 k h k_h kh是偶数,则一种可能性是在输入顶部填充 ⌈ p h ⌉ \lceil p_h \rceil ph行,在底部填充 ⌈ p h ⌉ \lceil p_h \rceil ph行。同理,我们填充宽度的两侧。

  • 在计算互相关时,卷积窗口从输入张量的左上角开始,向下、向右滑动。我们默认每次滑动一个元素。 但是,有时候为了高效计算或是缩减采样次数,卷积窗口可以跳过中间位置,每次滑动多个元素。

  • 通常,当垂直步幅为 s h s_h sh、水平步幅为 s w s_w sw时,输出形状为 ⌊ ( n h − k h + p h + s h ) / s h ⌋ × ⌊ ( n w − k w + p w + s w ) / s w ⌋ \lfloor(n_h- k_h + p_h+s_h)/s_h\rfloor \times \lfloor(n_w-k_w+p_w+s_w)/s_w\rfloor ⌊(nhkh+ph+sh)/sh×⌊(nwkw+pw+sw)/sw
    如果输入的高度和宽度可以被垂直和水平步幅整除,则输出形状将为 ( n h / s h ) × ( n w / s w ) (n_h/s_h)\times(n_w/s_w) (nh/sh)×(nw/sw)

在这里插入图片描述
小结

  • 填充可以增加输出的高度和宽度。这常用来使输出与输入具有相同的高和宽。
  • 步幅可以减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的1/n(n是一个大于的整数)。

6.4

当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有 3 × h × w 3 \times h \times w 3×h×w的形状。我们将这个大小为3的轴称为通道(channel)维度。

多输入通道

  • 当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。
  • 假设输入的通道数为 c i c_i ci,那么卷积核的输入通道数也需要为 c i c_i ci。如果卷积核的窗口形状是 k h × k w k_h \times k_w kh×kw,那么当 c i = 1 c_i=1 ci=1时,我们可以把卷积核看作形状为 k h × k w k_h \times k_w kh×kw的二维张量。
  • 然而,当 c i > 1 c_i>1 ci>1时,我们卷积核的每个输入通道将包含形状为 k h × k w k_h \times k_w kh×kw的张量。将这些张量 c i c_i ci连结在一起可以得到形状为 c i × k h × k w c_i \times k_h \times k_w ci×kh×kw的卷积核。
    在这里插入图片描述
  • 简而言之,对于多输入通道互相关运算。我们所做的就是对每个通道执行互相关操作,然后将结果相加。

多输出通道

  • 在最流行的神经网络架构中,随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。
  • 我们可以将每个通道看作对不同特征的响应。而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。
  • c i c_i ci c o c_o co分别表示输入和输出通道的数目,并让 k h k_h kh k w k_w kw为卷积核的高度和宽度。为了获得多个通道的输出,我们可以为每个输出通道创建一个形状为 c i × k h × k w c_i \times k_h\times k_w ci×kh×kw的卷积核张量,这样卷积核的形状是 c o × c i × k h × k w c_o \times c_i \times k_h\times k_w co×ci×kh×kw。在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

1x1卷积层

  • 卷积的本质是有效提取相邻像素间的相关特征,而1x1卷积显然没有此作用。
  • 我们可以将1x1卷积层看作在每个像素位置应用的全连接层,以 c i c_i ci个输入值转换为 c o c_o co个输出值。
    互相关计算使用了具有3个输入通道和2个输出通道的 1x1卷积核。其中,输入和输出具有相同的高度和宽度。在这里插入图片描述
    小结
  • 多输入多输出通道可以用来扩展卷积层的模型。
  • 当以每像素为基础应用时,1x1卷积层相当于全连接层。
  • 1x1卷积层通常用于调整网络层的通道数量和控制模型复杂性。

6.5

  • 通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率、聚集信息,这样随着我们在神经网络中层叠的上升,每个神经元对其敏感的感受野(输入)就越大。
  • 我们最后一层的神经元应该对整个输入的全局敏感。
  • 汇聚(pooling)层有双重目的:降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。

最大汇聚层和平均汇聚层

  • 不同于卷积层中的输入与卷积核之间的互相关计算,汇聚层不包含参数。
    相反,池运算是确定性的,我们通常计算汇聚窗口中所有元素的最大值或平均值。这些操作分别称为最大汇聚层(maximum pooling)和平均汇聚层(average pooling)。
  • 汇聚窗口形状为pxq的汇聚层称为pxq汇聚层,汇聚操作称为pxq汇聚。

填充和步幅

  • 与卷积层一样,汇聚层也可以改变输出形状。和以前一样,我们可以通过填充和步幅以获得所需的输出形状。
  • 默认情况下,深度学习框架中的步幅与汇聚窗口的大小相同。

多个通道
在处理多通道输入数据时,汇聚层在每个输入通道上单独运算,而不是像卷积层一样在通道上对输入进行汇总。 这意味着汇聚层的输出通道数与输入通道数相同。

小结

  • 使用最大汇聚层以及大于1的步幅,可减少空间维度(如高度和宽度)。

6.6

LeNet

  • 卷积编码器:由两个卷积层组成;
  • 全连接层密集块:由三个全连接层组成。
    在这里插入图片描述
  • 每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值