卷积运算
在通常形式中,卷积是对两个实值函数的一种数学运算。为了给出卷积的定义,我们从两个可能会用到的函数的例子出发。
假设我们正在用激光传感器追踪一艘宇宙飞船的位置。我们的激光传感器给出一个单独的输出x(t),表示宇宙飞船在时刻t的位置。x和t都是实值的,这意味着我们可以在任意时刻从传感器中读出飞船的位置。
现在假设我们的传感器含有噪声。为了得到飞船位置的低噪声估计,我们对得到的测量结果进行平均。显然,时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权值。我们可以采用一个加权函数w(a)来实现,其中a表示测量结果据当前时刻的时间间隔。如果我们对任意时刻都采用这种加权平均的操作,就得到了对于飞船位置的连续估计函数s:

这种运算就叫做卷积(convolution)。卷积运算通常用星号表示:

在我们的例子中,w 必须是一个有效的概率密度函数,否则输出就不再是一个加权平均。另外,w 在参数为负值时必须为0 ,否则它会涉及到未来,这不是我们能够做到的。但这些限制仅仅是对我们这个例子来说。通常,卷积被定义在满足上述积分式的任意函数上,并且也可能被用于加权平均以外的目的。
在卷积神经网络的术语中,第一参数(在上面这个例子中,函数x )叫做输入(input ),第二参数(函数w )叫做核函数(kernel function )。输出有时被称作特征映射(feature map)。
在我们的例子中,激光传感器能够在任意时刻给出测量结果的想法是不现实的。一般地,当我们用计算机处理数据时,时间会被离散化,传感器会给出特定时间间隔的数据。所以比较现实的的假设是传感器每秒给出一次测量结果,这样,时间t 只能取整数值。如果我们假设x 和w 都定义在整数时刻t 上,就得到了离散形式的卷积:

在机器学习的应用中,输入通常是高维数据数组,而核也是由算法产生的高维参数数组。我们把这种高维数组叫做张量。因为输入与核的每一个元素都分开存储,我们经常假设在存储了数据的有限点集以外,这些函数的值都为零。这意味着在实际操作中,我们可以统一地把无限的求和当作对有限个数组元素的求和来用。
最后,我们有时对多个维度进行卷积运算。例如,如果把二维的图像I作为输入,我们也相应的需要使用二维的核K:

卷积是可交换的 (commutative),我们可以等价地写作:

通常,下面的公式5在机器学习库中更方便应用,因为它在m 和n的有效范围内变化更少。
卷积运算可交换性的出现是因为我们相对输入翻转(flip)了核,这意味着当m增大时,输入的索引增大,但核的索引相应的减小。翻转核的唯一目的就是为了得到可交换性。尽管可交换性在证明时很有用,但在神经网络的应用中却不是一个重要的性质。与之不同的是,许多神经网络库会实现一个相关的函数,称为互相关函数(cross-correlation),和卷积运算几乎一样但是并不翻转核:

许多机器学习的库使用互相关函数但是叫它卷积。
在这里我们遵循把两种运算都叫做卷积的这个传统,只有在用到核的翻转时才会在上下文中特别指明区别。
在机器学习中,学习算法会在核合适的位置学得恰当的值,所以一个基于核翻转的卷积运算的学习算法所学得的核,是对未进行翻转的算法学得的核的翻转。
单独使用卷积运算在机器学习中是很少见的,卷积经常和其他的函数一起使用,无论卷积运算是否翻转了它的核,这些函数的组合通常是不可交换的。
图例1演示了一个在2维张量上的卷积运算(核没有翻转)的例子。
离散卷积可以看作矩阵的乘法,然而,这个矩阵的一些元素被限制为必须和另一些元素相等。
例如,对于单变量的离散卷积,矩阵的每一行都必须和上一行移动一个元素后相等。这种矩阵叫做Toeplitz矩阵(Toeplitz matrix )。
对于二维情况,卷积对应着一个双重块循环矩阵(doubly block circulant matrix )。
除了这些元素相等的限制以外,卷积通常对应着一个非常稀疏的矩阵(几乎所有的元素都为零)。这是因为核通常要远小于输入的图像。任何一个使用矩阵乘法但是并不依赖矩阵结构的特殊性质的神经网络算法,都适用于卷积运算,并且不需要对神经网络做出大的修改。典型的卷积神经网络为了更有效地处理大规模输入,确实使用了一些专门化的技巧,但这些在理论分析方面并不是严格必要的。