AI 课程网站首页
返回知识库

卷积网络:让网络自己学习滤波器

局部性与权重共享、通道、感受野、一个完整的分类器,以及一个学成 Sobel 滤波器的卷积核。

本篇目录
  1. 图像的两个性质
  2. 一维卷积
  3. 卷积层的反向传播
  4. 通道与二维卷积
  5. 感受野与下采样
  6. 一个完整的分类器
  7. 学习一个滤波器
  8. 卷积网络学到了什么,又有哪些不足
  9. 术语
  10. 小结
  11. 注释
  12. 练习
  13. 参考文献

第 2 篇让一个小卷积核(例如 Sobel 边缘核)在照片上滑动来计算图像特征,并指出每个卷积核都得靠人来设计。第 3 篇算过另一种做法的代价:把那张照片的 135,300 个像素送进一个全连接层,100 个隐藏单元就需要 1300 多万个参数。第 9 篇则说卷积层是图像上最强的正则化手段。本文把这三件事都讲清楚。卷积层是加了两条限制的全连接层:局部性和权重共享。这两条限制把参数从数百万个减到几百个,并把图像所具有的一个性质直接构建进去。它的权重就是第 2 篇的卷积核,只不过是学出来的。我们从一个一维例子推导出这种层,再推广到多通道的图像,追踪远处像素的信息如何到达深层,搭建一个完整的分类器并列出它的形状和开销,最后看一个卷积核如何通过学习变成 Sobel 滤波器。

1. 图像的两个性质

图像的两个事实决定了这种设计。第一是局部性:一个像素是否位于边缘上、是否在猫的胡须上,主要取决于它的邻居,而不是图像另一侧的像素。第二是平移:胡须出现在哪里看起来都一样,所以在左上角有效的检测器,在任何位置都应当有效。

全连接层对这两点都视而不见。每个隐藏单元对每个像素都有自己的权重,所以它必须从数据中分别学到:远处的像素关系不大,同一个图案在每个位置含义相同。无论有 20 张还是一百万张训练图像,这种学习都有很大一部分是浪费。

第二个性质可以精确表述。设 tt 是对输入的一种变换,例如把图像平移几个像素。如果 f(t(x))=f(x)f(t(\mathbf{x})) = f(\mathbf{x}),即输出不变,就称函数 ff 对 tt 不变。如果 f(t(x))=t(f(x))f(t(\mathbf{x})) = t(f(\mathbf{x})),即对输入做变换就相当于对输出做同样的变换,就称 ff 对 tt 等变。图像分类器应当对平移大致不变,因为平移后的猫仍然是猫。计算特征图的层(例如每个像素处的边缘强度)应当等变,因为猫移动时,它的边缘应当跟着移动。下面将说明,卷积对平移是严格等变的。

2. 一维卷积

我们从一维输入开始,比如一段很短的音频信号,有六个值 x1,…,x6x_1, \ldots, x_6。图像留到第 4 节。卷积核大小为 3 的卷积层,在每个位置 ii 计算:

zi=β+ω1xi−1+ω2xi+ω3xi+1(10.1)z_i = \beta + \omega_1 x_{i-1} + \omega_2 x_i + \omega_3 x_{i+1} \tag{10.1}

这个式子可以分成三部分。三个权重 ω1,ω2,ω3\omega_1, \omega_2, \omega_3 作用于位置 ii 及其左右两个邻居上的输入;加上一个偏置 β\beta;并且每个位置都使用同样的这四个参数。在两端,x0x_0 和 x7x_7 并不存在,我们把它们当作零,这称为零填充。用文字说:这一层让一个小的加权和沿着输入滑动,与第 2 篇式 2.1 的卷积核完全一样。和第 2 篇一样,严格说这是互相关,但深度学习称之为卷积。

取输入 x=(0,1,3,2,0,0)\mathbf{x} = (0, 1, 3, 2, 0, 0)、卷积核 ω=(−1,0,1)\boldsymbol{\omega} = (-1, 0, 1)、β=0\beta = 0。这个卷积核计算右邻居与左邻居之差,是 Sobel 核一行的一维版本。位置 1 的输出是 z1=x2−x0=1z_1 = x_2 - x_0 = 1;位置 2 是 z2=x3−x1=3z_2 = x_3 - x_1 = 3;依此类推,得到 z=(1,3,1,−3,−2,0)\mathbf{z} = (1, 3, 1, -3, -2, 0)(图 10.1a)。信号上升处输出为正,下降处为负。在这一层后接 ReLU,h=ReLU(z)=(1,3,1,0,0,0)\mathbf{h} = \mathrm{ReLU}(\mathbf{z}) = (1, 3, 1, 0, 0, 0),只保留上升部分:它是一个“上升”检测器。

现在把输入右移一位,x′=(0,0,1,3,2,0)\mathbf{x}' = (0, 0, 1, 3, 2, 0)。输出为 z′=(0,1,3,1,−3,−2)\mathbf{z}' = (0, 1, 3, 1, -3, -2):同样的值,右移了一位(图 10.1b)。这就是等变性,而且对任何卷积核都成立,因为每个位置使用相同的权重。远离两端处它严格成立;在两端,零填充会稍微破坏它。

三幅图。a)灰色柱表示位置 1 到 6 上的输入,蓝色柱表示输出,在位置 1 到 3 为正,在 4 和 5 为负。b)输入右移一位后的同样图形,蓝色柱随之移动。c)一个 6 乘 6 的数字表,对角线正下方为 -1、对角线上为 0、正上方为 1,其余都是 0。

图 10.1 一维卷积。 a)输入 x=(0,1,3,2,0,0)\mathbf{x} = (0, 1, 3, 2, 0, 0)(灰色),以及用卷积核 (−1,0,1)(-1, 0, 1)、零填充时式 10.1 的输出(蓝色):z=(1,3,1,−3,−2,0)\mathbf{z} = (1, 3, 1, -3, -2, 0)。b)把输入右移一位,输出也右移一位。c)把同一层写成全连接层:一个 6×66 \times 6 权重矩阵,除三条对角线外都是零,每条对角线重复一个卷积核权重。

卷积是受限的全连接层

六个输入到六个输出的全连接层计算 z=β+Ωx\mathbf{z} = \boldsymbol{\beta} + \boldsymbol{\Omega}\mathbf{x},权重矩阵为 6×66 \times 6,有 36 个权重和 6 个偏置。式 10.1 是它的特例。Ω\boldsymbol{\Omega} 的第 ii 行是输出 ii 给各输入的权重,对卷积而言,第 i−1i - 1 列是 ω1\omega_1,第 ii 列是 ω2\omega_2,第 i+1i + 1 列是 ω3\omega_3,其余为零(图 10.1c)。两条限制把一般矩阵变成了这个矩阵:

  • **局部性:**离对角线超过一列的元素全为零。每个输出只依赖附近的输入。
  • **权重共享:**每条对角线上的元素相等。每个位置使用相同的权重。

只有局部性时还剩 16 个自由权重;共享把它们减到 3 个,把 6 个偏置减到 1 个。卷积层能算的,全连接层都能算,反之则不然。限制正是关键所在:它在训练开始之前,就排除了区别对待不同位置、或直接连接远处输入的那些函数,训练数据不必再去排除它们。这就是第 9 篇称卷积为正则化手段的原因。

卷积核大小、步幅、填充与膨胀

一维卷积由四个超参数描述:

  • 卷积核大小 KK,即权重个数(上例为 3);
  • 填充 PP,即两端各补多少个零(上例为 1);
  • 步幅 SS,即卷积核在相邻两个输出之间移动的距离(上例为 1);S=2S = 2 时只计算每隔一个位置的输出;
  • 膨胀 dd,即卷积核读取的输入之间的间隔:d=2d = 2 时,大小为 3 的卷积核读取 xi−2,xi,xi+2x_{i-2}, x_i, x_{i+2},跨越 5 个位置。

长度为 NN 的输入产生的输出长度为

Nout=⌊N+2P−d(K−1)−1S⌋+1(10.2)N_{\text{out}} = \left\lfloor \frac{N + 2P - d(K - 1) - 1}{S} \right\rfloor + 1 \tag{10.2}

其中 ⌊⋅⌋\lfloor \cdot \rfloor 表示向下取整。分子是卷积核的跨度可以移动经过的位置数,除以步幅就是实际用到的个数。对我们的输入,N=6N = 6、K=3K = 3:P=1P = 1、S=1S = 1 时输出长度为 6,与上面相同;S=2S = 2 时为 3;不填充时为 4;P=1P = 1、膨胀为 2 时为 4。

3. 卷积层的反向传播

训练卷积层需要损失对其权重和输入的梯度。第 2 节说明了这一层就是一个矩阵特殊的全连接层,所以第 8 篇已经回答了这个问题;不过权重共享让答案有一个有用的形式。

权重。 权重 ωm\omega_m 在每个位置都被使用,所以由式 8.5,它的梯度是对所有使用的求和。在位置 ii,它乘的是 xi+m−2x_{i+m-2},而损失对该输出的导数是 δi=∂ℓ/∂zi\delta_i = \partial\ell/\partial z_i:

∂ℓ∂ωm=∑i=1Nδi xi+m−2,∂ℓ∂β=∑i=1Nδi(10.3)\frac{\partial \ell}{\partial \omega_m} = \sum_{i=1}^{N} \delta_i\, x_{i+m-2}, \qquad \frac{\partial \ell}{\partial \beta} = \sum_{i=1}^{N} \delta_i \tag{10.3}

用文字说:每个卷积核权重的梯度,是误差信号与按该权重偏移量平移后的输入之间的相关。对我们的输入,取误差信号 δ=(0,1,0,−1,0,0)\boldsymbol{\delta} = (0, 1, 0, -1, 0, 0),梯度为 ∂ℓ/∂ω1=x1−x3=−3\partial\ell/\partial\omega_1 = x_1 - x_3 = -3,∂ℓ/∂ω2=x2−x4=−1\partial\ell/\partial\omega_2 = x_2 - x_4 = -1,∂ℓ/∂ω3=x3−x5=3\partial\ell/\partial\omega_3 = x_3 - x_5 = 3。每个位置都对每个权重有贡献,所以一个卷积核同时从所有训练图像的所有位置学习。这从另一个角度说明了卷积层为什么需要的数据少得多。

输入。 由式 8.8,对输入的梯度是 Ω⊤δ\boldsymbol{\Omega}^\top\boldsymbol{\delta}。把图 10.1c 的带状矩阵转置,得到另一个带状矩阵,其对角线上是倒序的卷积核,所以反向计算本身也是一次卷积,用的是翻转后的卷积核 (ω3,ω2,ω1)(\omega_3, \omega_2, \omega_1)。对我们的例子,结果为 (−1,0,2,0,−1,0)(-1, 0, 2, 0, -1, 0)。深度学习库把这两个梯度都实现为卷积,因此卷积层反向计算的开销与全连接层一样,约为前向计算的两倍。

4. 通道与二维卷积

图像有两个空间维度和若干通道:彩色照片有三个(红、绿、蓝),网络内部的特征图则多得多。一层通常也输出许多通道,每个通道有自己的卷积核,这样可以同时检测多种图案。

设输入有 CinC_\text{in} 个高为 HH、宽为 WW 的通道,记为 xc,i,jx_{c,i,j}。一个有 CoutC_\text{out} 个输出通道、卷积核为 K×KK \times K 的二维卷积层,对输出通道 cc 在位置 (i,j)(i, j) 计算:

zc,i,j=βc+∑c′=1Cin∑m=1K∑n=1KΩc,c′,m,n  xc′, i+m−r, j+n−r(10.4)z_{c,i,j} = \beta_c + \sum_{c'=1}^{C_\text{in}} \sum_{m=1}^{K} \sum_{n=1}^{K} \Omega_{c,c',m,n}\; x_{c',\, i+m-r,\, j+n-r} \tag{10.4}

其中 r=(K+1)/2r = (K + 1)/2,对奇数 KK 使卷积核以 (i,j)(i, j) 为中心。这个式子可以分成三部分。里面两重求和是在一个输入通道内、(i,j)(i, j) 周围的 K×KK \times K 加权和,与第 2 篇相同。外层求和把所有输入通道的结果相加,所以一个输出通道会把红、绿、蓝等通道组合起来。最后,每个输出通道有自己的卷积核(一个 Cin×K×KC_\text{in} \times K \times K 的权重块)和自己的偏置。用文字说:每个输出通道是一个学习得到的检测器,它跨所有输入通道观察一个小邻域,并在每个位置上使用。

权重构成形状为 Cout×Cin×K×KC_\text{out} \times C_\text{in} \times K \times K 的四维数组 Ω\boldsymbol{\Omega},所以这一层有

Cout (CinK2+1)C_\text{out}\,(C_\text{in} K^2 + 1)

个参数,与图像大小无关。从 3 个颜色通道到 64 个通道的 3×33 \times 3 层有 64×28=1,79264 \times 28 = 1{,}792 个参数;从 64 到 128 个通道的有 128×577=73,856128 \times 577 = 73{,}856 个。作为对比,从一张 224×224224 \times 224 彩色图像到同样高宽、64 个通道的输出,全连接层需要约 4.8×10114.8 \times 10^{11} 个权重。

计算量则取决于图像大小:每个输出通道的 HoutWoutH_\text{out} W_\text{out} 个位置中,每一个都需要 CinK2C_\text{in}K^2 次乘加。在 224×224224 \times 224 的图像上,64 个输入通道、64 个输出通道的 3×33 \times 3 层需要 224×224×64×64×9≈1.85×109224 \times 224 \times 64 \times 64 \times 9 \approx 1.85 \times 10^9 次乘加。所以卷积网络参数少,但每个参数对应的计算量很大,这与全连接网络正好相反,后者每个权重对每个样本只用一次。

每个样本的激活值存为形状 C×H×WC \times H \times W 的数组,一批数据再加上最前面的一维:B×C×H×WB \times C \times H \times W。1×11 \times 1 卷积(K=1K = 1)是值得一提的特例:它在每个位置上独立地对通道向量施加同一个全连接层。它混合通道而不看邻居,用来低成本地改变通道数。

5. 感受野与下采样

3×33 \times 3 卷积核只能看到 3×33 \times 3 的小块。要认出一只猫,网络最终必须综合图像大部分区域的信息。它靠叠加多层来做到这一点,并在途中缩小特征图。

感受野

一个单元的感受野是输入中能够影响它的区域。第一个 3×33 \times 3 层中的单元,感受野是 3×33 \times 3。第二个 3×33 \times 3 层中的单元看到第一层的一个 3×33 \times 3 块,其中每个单元又看到 3×33 \times 3 个像素,合起来覆盖 5×55 \times 5 个像素。每增加一个步幅为 1 的层,每个维度上增加 K−1K - 1 个像素,所以 LL 个这样的层的感受野为 1+L(K−1)1 + L(K - 1):随深度线性增长。

下采样让它增长得更快。如果某层步幅为 SS,之后每一层的步长在输入像素中都放大 SS 倍。记 jkj_k 为第 kk 层相邻单元之间在输入像素中的距离(j0=1j_0 = 1),感受野 rkr_k 按下式增长:

rk=rk−1+(Kk−1) jk−1,jk=jk−1 Sk(10.5)r_k = r_{k-1} + (K_k - 1)\, j_{k-1}, \qquad j_k = j_{k-1}\, S_k \tag{10.5}

其中 KkK_k 和 SkS_k 是第 kk 层的卷积核大小和步幅。用文字说:每一层把感受野扩大“卷积核大小减一”,单位是它从前面各层继承来的步长。图 10.2 在一维中追踪了这一过程:两个 3×33 \times 3 卷积得到 5,一个大小为 2、步幅为 2 的最大池化得到 6 并把步长加倍,下一个卷积增加 2×2=42 \times 2 = 4,得到 10。

五排方格,从底部的输入到顶部的卷积层。顶排一个方格以橙色高亮。下面每一排都有一段越来越宽的方格被高亮:3 个、6 个、8 个,输入排中是 10 个,并标注为感受野 10。

图 10.2 感受野如何增长。 一维的层堆叠:从输入(底部)经过两个卷积核大小为 3 的卷积、一个大小为 2 且步幅为 2 的最大池化,再经过一个卷积(顶部)。每一排中高亮的方格,是能影响顶排高亮单元的那些单元。每个卷积让感受野增加 2,池化增加 1,之后的卷积增加 4,因为池化之后每一步覆盖两个输入位置(式 10.5)。

有两点补充能让这个图景更准确。感受野是能够影响一个单元的区域;在训练好的网络中,影响集中在中心附近,向边缘逐渐减弱,所以有效感受野更小 [11]。另外,叠加小卷积核比用大卷积核更经济:两个 3×33 \times 3 层与一个 5×55 \times 5 层的感受野同为 5×55 \times 5,但每对通道只用 2×9=182 \times 9 = 18 个而不是 25 个权重,还多了一个非线性。正是这个理由让 3×33 \times 3 卷积核成为标准 [7]。

池化与带步幅的卷积

大小为 2、步幅为 2 的最大池化把每个通道分成 2×22 \times 2 的块,每块只保留最大值,使高和宽减半、数值个数减为四分之一。对下面的块:

[1320421101522234] → 最大  [4225],→ 平均  [2.511.253.5]\begin{bmatrix} 1 & 3 & 2 & 0 \\ 4 & 2 & 1 & 1 \\ 0 & 1 & 5 & 2 \\ 2 & 2 & 3 & 4 \end{bmatrix} \ \xrightarrow{\ \text{最大}\ }\ \begin{bmatrix} 4 & 2 \\ 2 & 5 \end{bmatrix}, \qquad \xrightarrow{\ \text{平均}\ }\ \begin{bmatrix} 2.5 & 1 \\ 1.25 & 3.5 \end{bmatrix}

平均池化则保留均值。池化没有参数。取最大值使得特征在块内移动时输出不变,这是对平移的少量不变性。带步幅的卷积即 S=2S = 2 的卷积,在下采样的同时学习如何组合数值,许多现代网络用它代替池化。在分类器末端,全局平均池化把每个通道在所有位置上取平均,把 C×H×WC \times H \times W 的数组变成 CC 个数的向量,不再依赖任何东西的位置。

像第 1 篇的分割这样需要逐像素输出的任务,必须把特征图放大回输入的大小。转置卷积用学习得到的权重做到这一点;它是带步幅卷积所对应矩阵的转置,正如第 3 节的反向计算一样。U-Net [12] 等编码器–解码器网络先下采样以获取上下文,再上采样回去,并用跳跃连接把早期层的细节送到后面的层。

6. 一个完整的分类器

现在为 10 类、32×3232 \times 32 的彩色图像搭建一个小网络,这正是 CIFAR-10 基准的规模。它有三个阶段。每个阶段有两个填充为 1 的 3×33 \times 3 卷积,各接一个 ReLU,然后是一个 2×22 \times 2 最大池化;每个阶段把通道数加倍,池化把高和宽减半。最后用全局平均池化和一个全连接层输出 10 个分数:

层 输出形状 参数 乘加次数 感受野
输入 3×32×323 \times 32 \times 32 1
卷积 3×33 \times 3,3 → 32 32×32×3232 \times 32 \times 32 896 884,736 3
卷积 3×33 \times 3,32 → 32 32×32×3232 \times 32 \times 32 9,248 9,437,184 5
最大池化 2×22 \times 2 32×16×1632 \times 16 \times 16 0 6
卷积 3×33 \times 3,32 → 64 64×16×1664 \times 16 \times 16 18,496 4,718,592 10
卷积 3×33 \times 3,64 → 64 64×16×1664 \times 16 \times 16 36,928 9,437,184 14
最大池化 2×22 \times 2 64×8×864 \times 8 \times 8 0 16
卷积 3×33 \times 3,64 → 128 128×8×8128 \times 8 \times 8 73,856 4,718,592 24
卷积 3×33 \times 3,128 → 128 128×8×8128 \times 8 \times 8 147,584 9,437,184 32
最大池化 2×22 \times 2 128×4×4128 \times 4 \times 4 0 36
全局平均池化 128 0 整幅图像
全连接,128 → 10 10 1,290 1,280 整幅图像
合计 288,298 38,634,752

这张表展示了卷积网络的典型形态。空间尺寸从 32×3232 \times 32 缩小到 4×44 \times 4,通道数则从 3 增长到 128:网络用“在哪里”换取“是什么”。参数集中在通道多的后几层,而计算量分布均匀,因为每个阶段面积减半、通道加倍。到最后一个卷积时,感受野 32 已经覆盖整幅图像。整个网络有 288,298 个参数。从 3,072 个输入值出发的全连接层,只要 94 个隐藏单元就会达到这个数,后面还一层都没有。

实际网络在更大规模上遵循同样的模式。1998 年的 LeNet-5 [3] 用约 6 万个参数识别手写数字。AlexNet [4] 在 2012 年 ImageNet 竞赛中获胜,开启了计算机视觉中的深度学习时代,它有约 6000 万个参数,大部分在最后的全连接层。VGG-16 [7] 由堆叠的 3×33 \times 3 卷积构成,约有 1.38 亿个参数。第 11 篇介绍随后出现的残差网络 [6],它们更深,但借助全局平均池化和 1×11 \times 1 卷积,规模小得多。

7. 学习一个滤波器

卷积网络的卷积核与其他参数一样,通过对损失做梯度下降来训练。一个小实验能展示卷积核的学习过程,也能说明为什么这可能很慢。

我们取第 2 篇的灰度猫照片(像素值在 0 到 1 之间),让单个卷积层(一个 3×33 \times 3 卷积核加一个偏置)在每个位置上复现 Sobel 核 KxK_x 的输出。训练数据是卷积核能完整放进图像的 133,802 个位置,损失是该层输出与 Sobel 输出之间的均方误差。这是一个玩具实验:真实网络是用标签训练的,而不是用一个已知滤波器的输出。但它把单个卷积核的学习单独拿了出来。我们从随机权重出发,用最大的稳定学习率做全批量梯度下降。

图 10.3 是结果。卷积核确实精确收敛到了 Sobel 核,但很慢:100 步后看上去仍是随机的;1,000 步后出现了左右结构;10,000 步后损失为 0.00016,卷积核已经接近;100,000 步后权重与 KxK_x 在小数点后两位上一致。

六个 3 乘 3 的彩色数字小方格和一幅折线图。a)第 0、100、1,000、10,000 和 100,000 步的卷积核,以及 Sobel 核。早期的方格看上去是随机的;到第 100,000 步,左列为 -1、-2、-1,中列为零,右列为 1、2、1,与 Sobel 核完全相同。b)对数坐标下的损失:前一百步几乎不变,然后陡降到约一亿分之一。

图 10.3 一个卷积核学成 Sobel 滤波器。 用梯度下降训练单个 3×33 \times 3 卷积核(带偏置),使其在第 2 篇的灰度猫照片上复现 Sobel 输出 KxK_x。a)初始时以及 100、1,000、10,000、100,000 步后的卷积核,旁边是 Sobel 核;红色为正,蓝色为负。b)训练过程中的均方误差。卷积核最终精确达到 Sobel 权重,但需要数万步。

慢的原因与第 9 篇对提前停止的分析相同。损失是十个参数的二次函数,而它在不同方向上的曲率差别极大:二阶导数矩阵的最大特征值为 5.99,最小为 0.00026,相差 23,000 倍。高曲率方向是卷积核的总和,它乘的是每个小块的平均亮度。低曲率方向是相邻权重之间的差,它们乘的是相邻像素之间的差,而在自然图像中相邻像素几乎相等。学习率小到能在陡峭方向上保持稳定,在平坦方向上的进展就会慢约 23,000 倍。不巧的是,平坦方向恰恰是检测边缘的方向。从图像中减去平均亮度可以把比值降到约 7,700,但不能消除问题,因为问题来自相邻像素之间的相关,而不是它们的均值。

这是实际训练使用 Adam 等自适应优化器(对每个方向分别缩放)和归一化层(第 11 篇,让每一层的输入保持居中和合适的尺度)的原因之一。它也解释了关于训练好的网络的一个观察:大型图像分类器第一层的卷积核往往像有方向的边缘检测器和色块 [4]、[9]。去掉整体亮度之后,边缘正是图像之间的区别所在,用好的优化器训练足够久的网络会找到它们。

8. 卷积网络学到了什么,又有哪些不足

对训练好的网络的可视化 [9]、[10] 显示出随深度的递进。前面的层响应边缘和颜色对比,中间的层响应纹理和简单形状,后面的层响应物体的部件,如眼睛、车轮或文字,乃至整个物体。这种层次不是谁规定的,而是从带标签的训练中涌现出来的,它是第 2 篇人工设计流程的“学习版”。这是对典型网络学到什么的经验描述,不是保证。

有三个局限值得了解。

平移不变性只是近似的。 卷积对平移是等变的,但步幅和池化在粗网格上对特征图采样,平移一个像素就可能让某个特征跨过块的边界。训练好的分类器可能因为图像平移了一个像素而改变预测 [13]。像经典信号处理那样在下采样前先做模糊,可以减弱这种效应 [14]。

重纹理而轻形状。 在 ImageNet 上训练的网络比人更依赖纹理:给它看一张形状是猫、纹理是大象皮的图像,它往往回答“大象” [15]。网络学到什么,取决于训练数据中什么能预测标签,而不是人认为什么是决定性特征。

对抗样本。 对图像做小到人察觉不到的改动,只要沿着损失对输入的梯度方向选取(第 3 节说明了如何计算它),就能把网络的预测改成几乎任何类别 [16]。这种敏感性并非卷积网络独有,其原因也尚未完全弄清。

9. 术语

  • 卷积层执行式 10.4。它的卷积核也叫滤波器,是它学到的权重;每个输出通道有一个。
  • 一个通道在每个位置上的输出构成一张特征图。数组的通道是它的第一个维度;彩色图像有三个。
  • 填充、步幅和膨胀控制卷积核在哪里施加(式 10.2)。
  • 单元的感受野是能影响它的输入区域(式 10.5)。
  • 池化层(最大、平均、全局平均)不带参数地汇总一块数值。下采样减小高和宽;上采样(例如用转置卷积)增大它们。
  • 卷积神经网络(convolutional neural network,CNN)是主要由卷积层构成的网络,用于分类时通常以全局池化和全连接层结束。

小结

卷积层是受两条限制的全连接层:每个输出只依赖输入的一个小邻域,并且每个位置使用相同的权重。这种限制把参数从数百万个减到几百个,把对平移的等变性构建进来,并让每个卷积核从每张图像的每个位置学习。它的梯度本身也是卷积。有多个输入和输出通道时,每个输出通道是一个跨所有输入通道施加的、学习得到的检测器。叠加多层使感受野变宽,池化或带步幅的卷积让它变宽得更快,同时用空间分辨率换取更多通道。完整的分类器遵循这一模式,并以全局平均池化结束。卷积核通过梯度下降学习;在自然图像上,由于相邻像素高度相关,类似边缘的方向学得很慢,这是使用自适应优化器和归一化的动机之一。训练好的网络学到从边缘到物体的层次,但它对平移的不变性只是近似的,而且可能依赖人不会使用的线索。第 11 篇说明如何训练有数百层的这类网络。

注释

历史。 福岛邦彦的 Neocognitron [2](1980)受视觉皮层启发,堆叠了带下采样的局部、共享特征检测器层,但不是用梯度下降训练的。LeCun 等人用反向传播训练卷积网络来识别手写邮政编码 [5],后来又用于识别银行支票上的数字 [3]。Krizhevsky、Sutskever 和 Hinton [4] 2012 年在 ImageNet 上的成果,结合了大型卷积网络、ReLU 激活、dropout、数据增强和 GPU 训练。

卷积的算术。 Dumoulin 和 Visin [8] 用图示说明了填充、步幅、膨胀和转置卷积如何相互作用,每种情形都有示意图。

其他维度与数据。 一维卷积处理音频和其他时间序列,三维卷积处理视频和医学体数据。图的节点没有固定的邻居网格,需要另一种推广(图神经网络)。Transformer(第 12 篇)完全去掉了局部性,让每个位置关注所有其他位置;用于图像时,它需要大数据集或强数据增强来弥补失去的限制。

延伸阅读。 Understanding Deep Learning [1] 第 10 章讲解了一维和二维数据上的卷积网络,包括第 1 节关于不变性与等变性的论证。

练习

练习 10.1 用零填充,把卷积核 (−1,0,1)(-1, 0, 1) 作用于 x=(2,2,2,5,5,5)\mathbf{x} = (2, 2, 2, 5, 5, 5)。输出检测到了什么?(答案:(2,0,3,3,0,−5)(2, 0, 3, 3, 0, -5)。在信号内部,只有从 2 跳到 5 的台阶附近不为零;两端的值来自零填充。)

练习 10.2 从 16 个通道到 32 个通道的 5×55 \times 5 卷积层有多少个参数?在 28×2828 \times 28 的输出上需要多少次乘加?(答案:32×(16×25+1)=12,83232 \times (16 \times 25 + 1) = 12{,}832;28×28×32×16×25=10,035,20028 \times 28 \times 32 \times 16 \times 25 = 10{,}035{,}200。)

练习 10.3 用式 10.2,长度为 32 的输入在 K=3K = 3、P=1P = 1、S=2S = 2 时输出长度是多少?(答案:⌊(32+2−2−1)/2⌋+1=16\lfloor (32 + 2 - 2 - 1)/2 \rfloor + 1 = 16。)

练习 10.4 计算四个步幅为 1 的 3×33 \times 3 卷积的感受野,以及“卷积 3、步幅为 2 的卷积 3、卷积 3、卷积 3”这一序列的感受野。(答案:9;第二种情况 r=3,5,9,13r = 3, 5, 9, 13,因为带步幅的层之后每一步覆盖两个像素。)

练习 10.5 对输入 x=(0,1,3,2,0,0)\mathbf{x} = (0, 1, 3, 2, 0, 0) 和误差信号 δ=(1,0,0,0,0,0)\boldsymbol{\delta} = (1, 0, 0, 0, 0, 0),用式 10.3 计算三个卷积核权重的梯度。(答案:∂ℓ/∂ω1=x0=0\partial\ell/\partial\omega_1 = x_0 = 0,∂ℓ/∂ω2=x1=0\partial\ell/\partial\omega_2 = x_1 = 0,∂ℓ/∂ω3=x2=1\partial\ell/\partial\omega_3 = x_2 = 1。)

练习 10.6 证明当填充采用循环方式(即 x0=x6x_0 = x_6、x7=x1x_7 = x_1)时,在每个位置施加式 10.1 的层对循环平移是等变的。(提示:把平移后的输入写成 xi′=xi−1x'_i = x_{i-1},下标按模 6 取,再代入式 10.1。)

参考文献