《动手学》打卡挑战-task05

简介

ElitesAI·动手学深度学习PyTorch版
《动手学深度学习PyTorch版》在线书籍
本部分为Task05:卷积神经网络基础leNet;卷积神经网络进阶,这一task都是卷积方面的,这是我比较熟的,所以我只要记一下一些基础,仍然会进阶方面的之后在整体写一份。

二维互相关运算

二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。
Image Name
二维卷积层将输入和卷积核做互相关运算,并加上一个标量偏置来得到输出。卷积层的模型参数包括卷积核和标量偏置,其中偏置为一个卷积核一个偏置。

特征图与感受野

二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某一级的表征,也叫特征图(feature map)。影响元素$x$的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做$x$的感受野(receptive field)。
以上图为例,输入中阴影部分的四个元素是输出中阴影部分元素的感受野。我们将图中形状为$2 \times 2$的输出记为$Y$,将$Y$与另一个形状为$2 \times 2$的核数组做互相关运算,输出单个元素$z$。那么,$z$在$Y$上的感受野包括$Y$的全部四个元素,在输入上的感受野包括其中全部9个元素。可见,我们可以通过更深的卷积神经网络使特征图中单个元素的感受野变得更加广阔,从而捕捉输入上更大尺寸的特征。

填充和步幅

填充和步幅是卷积层的两个超参数,它们可以对给定形状的输入和卷积核改变输出形状。

填充

填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素),下图里我们在原输入高和宽的两侧分别添加了值为0的元素。
Image Name
如果原输入的高和宽是$n_h$和$n_w$,卷积核的高和宽是$k_h$和$k_w$,在高的两侧一共填充$p_h$行,在宽的两侧一共填充$p_w$列,则输出形状为:

我们在卷积神经网络中使用奇数高宽的核,比如$3 \times 3$,$5 \times 5$的卷积核,对于高度(或宽度)为大小为$2 k + 1$的核,令步幅为1,在高(或宽)两侧选择大小为$k$的填充,便可保持输入与输出尺寸相同。

步幅

在互相关运算中,卷积核在输入数组上滑动,每次滑动的行数与列数即是步幅(stride)。此前我们使用的步幅都是1,下图展示了在高上步幅为3、在宽上步幅为2的二维互相关运算。
Image Name
一般来说,当高上步幅为$s_h$,宽上步幅为$s_w$时,输出形状为:

如果$p_h=k_h-1$,$p_w=k_w-1$,那么输出形状将简化为$\lfloor(n_h+s_h-1)/s_h\rfloor \times \lfloor(n_w+s_w-1)/s_w\rfloor$。更进一步,如果输入的高和宽能分别被高和宽上的步幅整除,那么输出形状将是$(n_h / s_h) \times (n_w/s_w)$。
当$p_h = p_w = p$时,我们称填充为$p$;当$s_h = s_w = s$时,我们称步幅为$s$。

多输入通道和多输出通道

之前的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是$h$和$w$(像素),那么它可以表示为一个$3 \times h \times w$的多维数组,我们将大小为3的这一维称为通道(channel)维。

多输入通道

卷积层的输入可以包含多个通道,下图展示了一个含2个输入通道的二维互相关计算的例子。
Image Name
假设输入数据的通道数为$c_i$,卷积核形状为$k_h\times k_w$,我们为每个输入通道各分配一个形状为$k_h\times k_w$的核数组,将$c_i$个互相关运算的二维输出按通道相加,得到一个二维数组作为输出。我们把$c_i$个核数组在通道维上连结,即得到一个形状为$c_i\times k_h\times k_w$的卷积核。即:输出的有几个通道的图片,卷积核就需要几个,简单地说就是一个卷积核对应一个维度。

多输出通道

卷积层的输出也可以包含多个通道,设卷积核输入通道数和输出通道数分别为$c_i$和$c_o$,高和宽分别为$k_h$和$k_w$。如果希望得到含多个通道的输出,我们可以为每个输出通道分别创建形状为$c_i\times k_h\times k_w$的核数组,将它们在输出通道维上连结,卷积核的形状即$c_o\times c_i\times k_h\times k_w$。
对于输出通道的卷积核,我们提供这样一种理解,一个$c_i \times k_h \times k_w$的核数组可以提取某种局部特征,但是输入可能具有相当丰富的特征,我们需要有多个这样的$c_i \times k_h \times k_w$的核数组,不同的核数组提取的是不同的特征。

1x1卷积层

最后讨论形状为$1 \times 1$的卷积核,我们通常称这样的卷积运算为$1 \times 1$卷积,称包含这种卷积核的卷积层为$1 \times 1$卷积层。图5展示了使用输入通道数为3、输出通道数为2的$1\times 1$卷积核的互相关计算。
Image Name
$1 \times 1$卷积核可在不改变高宽的情况下,调整通道数。$1 \times 1$卷积核不识别高和宽维度上相邻元素构成的模式,其主要计算发生在通道维上。假设我们将通道维当作特征维,将高和宽维度上的元素当成数据样本,那么$1\times 1$卷积层的作用与全连接层等价。
1×1卷积核作用:

  • 1.放缩通道数:通过控制卷积核的数量达到通道数的放缩。
  • 2.增加非线性。1×1卷积核的卷积过程相当于全连接层的计算过程,并且还加入了非线性激活函数,从而可以增加网络的非线性。
  • 3.计算参数少

    池化

    二维池化层

    池化层主要用于缓解卷积层对位置的过度敏感性。同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出,池化层直接计算池化窗口内元素的最大值或者平均值,该运算也分别叫做最大池化或平均池化。下图展示了池化窗口形状为$2\times 2$的最大池化。
    Image Name

二维平均池化的工作原理与二维最大池化类似,但将最大运算符替换成平均运算符。池化窗口形状为$p \times q$的池化层称为$p \times q$池化层,其中的池化运算叫作$p \times q$池化。

池化层也可以在输入的高和宽两侧填充并调整窗口的移动步幅来改变输出形状。池化层填充和步幅与卷积层填充和步幅的工作机制一样。

在处理多通道输入数据时,池化层对每个输入通道分别池化,但不会像卷积层那样将各通道的结果按通道相加。这意味着池化层的输出通道数与输入通道数相等。

0%