3.2 卷积层

卷积是信号处理中的一种典型运算,它表示两个函数如何相互修改并创建第三个函数。卷积层实际上是在实现一种自相关运算,但在我们的例子中卷积和自相关是相同的,因为它们可以通过简单的旋转操作互换。

我们将输入称为x,通过的权重集为w,输出信号为s,时间为t。我们希望对最近的输入赋予更高的重要性,因此将使用函数w(a)定义权重,a是用于步幅的测度。卷积运算是将信号s与权重集组合的过程,也称为核。由于我们处理的数据来自真实的应用程序,而不只是匹配抽象,所以时间必须是离散的。在数学上,卷积的定义如下:

在深度学习中,我们所说的输入通常是一个矩阵,权重集也是如此。因此,我们只需要计算有限项集合的总和。大多数实现不使用卷积运算,而是首选互相关。这两种运算对于我们这里而言没有区别,只需在卷积中翻转核即可,这意味着你需要将核旋转180度(见图3-2)。

图3-2 核旋转

和以前一样,我们的训练目标是找到一组权重,在这个例子中是核。在CNN中,卷积从来都不是单独使用的,而是与其他运算一起使用(见图3-3)。

图3-3 相关计算示例

通常,CNN具有稀疏权重,也称为稀疏连接,这意味着每层之间只有很少的连接。

有一种方法可以减少网络中的参数数量,并减少训练和使用网络所需的计算负载。这可以通过使核的大小远远小于输入的大小实现,输入的大小是可以调小的。

通过图3-4可以看出,该方法在计算方面做出了非常大的改进。

图 3-4

该方法的另一优势是权重共享。以图像检测问题为例,我们知道,要识别一个物体,算法应该专注于图像的特定特征,比如边缘。数据的这种特性已经被利用了很多年,而且用不同的方法提供特征的各种算法,也明确地旨在识别这些特性。

为了达到相同的目的,CNN会使用不同的核来计算多个卷积,这些也称为过滤器。过滤器通常很小,例如用于彩色图像的过滤器的大小是5×5×3像素,并且每一层都有许多这样的过滤器。我们将在每个过滤器和上一层的输出之间应用卷积,形成点积。与前面解释的FFNN过程不同的是滑动部分,过滤器会在整个输入集移动,而移动之前,只有一组权重。如图3-5所示。

图 3-5

这样,每个过滤器都被训练以识别某一特定的特征。离输入越近,特征越简单(如方向和颜色),而离输出越近,特征就会越复杂(如最后一层中的过滤器可以检测出车轮状图案)。每个过滤器将生成一个二维激活映射,对这些过滤器进行点乘操作,将产生检测特征输出卷。

有时,权重共享不一定是获得良好预测性能的最佳方法。当我们期望特征是图像的一部分,且可以位于输入中的任何位置时,权重共享才是有意义的,但有时一些特征必须非常具体。以面部识别为例,我们要使用一些非常独特的形状(比如眼睛的形状)来区分。

目前已经完成了该过程的第一阶段,卷积创建了一组可以线性激活的过滤器。然后,这组过滤器将作为非线性函数的输入,非线性函数通常是第2章中看到的修正线性单元(ReLU)函数。这是实际检测的附加阶段,因此这一阶段也被称为detector阶段。

现在让我们看一个更直观的示例。我们有两个矩阵,第一个是一幅较大图像的一部分,第二个是我们正在使用它来进行卷积的过滤器。两个矩阵之间的卷积如图3-6所示。

在这个例子中,两个矩阵之间的卷积的数会很大,因为两个矩阵的形状非常相似。这意味着过滤器可以识别图像的特征,因此它将让信号通过。

图 3-6