跳转至

卷积神经网络

卷积操作的基本概念

其核心是通过卷积核在输入数据上进行滑动计算,从而提取局部特征。

卷积实际上是把一个局部的特征聚合在一起,好处是用更少的参数来表示信息,且这个结果会更加平滑。代价是要损失一部分信息。

卷积的输出尺寸计算

对于二维输入数据,卷积操作的表达式为:(这个表达式有点太抽象了,其实就是局部矩阵做内积)

\[ y_{ij} = \sum^U_{u = 1} \sum^{V}_{v = 1} w_{uv} x_{i + u + 1, j + v + 1} \]

假设输入尺寸为 \(N \times N\),卷积核大小为 \(F \times F\),步幅为 \(S\),则输出尺寸的边长计算公式为

\[ \left \lfloor \frac{N - F}{S} \right \rfloor + 1 \]

[!note] 书上的这个写法有一定缺漏,它是默认上下和左右两个方向的步幅是一样的,也默认了输入尺寸和卷积核都是正方形。实际上,输入可以是长方形,卷积核也可以是长方形,我们也完全可以做一个非对称的步幅 \((s_1, s_2)\)。因此,上面的边长公式,其实更应该理解成某个方向上的边长,而不是整个输出的边长。

下面的讨论同理,如非特别说明,我们说的某个数字指的是某个方向上的长度。

填充

在卷积过程中,不可能保证卷积扫过某一方向的时候刚好全部扫完,比如输入为 7,卷积核为 3,步幅为 3,这个时候会漏两列的数据无法扫到。为了处理这种情况,我们的处理方式是在输入数据上补充数据维度,一般是补充 0。

另一个问题是,卷积核的计算会导致原图像维数下降,而且下降速度较快,填充维度也有利于缓解维度快速减少的问题。

\[ P = \frac{(S - 1)N + F - S}{2} \]

其中 \(P\) 表示填充数量,\(S\) 表示步幅,\(N\) 表示输入尺寸的边长,\(F\) 表示卷积核大小。

多通道卷积

对一张图片,最著名的是RGB图像,分别对应 Red, Green 和 Blue。这时,卷积核的深度必须与输入通道相匹配。

[!note] 实际上,一张图片应该是四个通道,还有一个通道是 \(\alpha\) 透明度。不过透明度一般并不能反映什么信息,我们常常直接将透明度作为系数乘到RGB三个通道里。

卷积神经网络CNN通过堆叠多个卷积层实现层次化特征提取。每个卷积层都对输入数据进行非线性变换,逐步提取更高级的特征。

特殊的 1x1 卷积

1x1 卷积不能改变特征图的维度,但能有效调整通道数量,在跨通道信息融合方面有重要应用价值。

池化层