序言
在探索深度学习尤其是计算机视觉领域的奥秘时,卷积神经网络( Convolutional Neural Networks, CNNs \text{Convolutional Neural Networks, CNNs} Convolutional Neural Networks, CNNs)无疑占据了核心地位。而卷积运算,作为 CNN \text{CNN} CNN中最基础也是最关键的组成部分,更是其能够高效提取图像特征、实现卓越性能的关键所在。卷积运算不仅深刻影响了 CNN \text{CNN} CNN的架构设计,也为我们理解图像数据、构建更加智能的视觉系统提供了有力的工具。
卷积运算的核心思想在于利用一个可学习的卷积核(或称为滤波器)在输入图像上进行滑动,通过计算卷积核与图像局部区域的点积来提取该区域的特征。这一过程模拟了生物视觉系统中神经元对视觉刺激的局部响应机制,使得 CNN \text{CNN} CNN能够自动学习到图像中的边缘、纹理、形状等低层特征,并通过多层的卷积操作逐步构建出更高层次的抽象特征表示。
在卷积运算中,卷积核的大小、步长以及填充方式等参数对提取特征的效果具有重要影响。通过调整这些参数,我们可以控制卷积层输出的特征图的尺寸和感受野的大小,从而实现对不同尺度图像特征的有效提取。此外,卷积运算还具有权值共享和局部连接的特点,这些特点极大地减少了网络参数的数量,降低了计算复杂度,并增强了模型的泛化能力。
随着深度学习技术的不断发展,卷积运算也在不断创新和演进。从传统的二维卷积到三维卷积、可分离卷积、空洞卷积等新型卷积方式的出现,不仅丰富了卷积运算的形式和内涵,也为 CNN \text{CNN} CNN在处理不同类型的数据和任务时提供了更多的选择和灵活性。这些新型卷积方式在提升模型性能、降低计算成本等方面展现出了巨大的潜力。
卷积运算
- 在通常形式中,卷积是对两个实值函数的一种数学运算。为了给出卷积的定义,我们从两个可能会用到的函数的例子出发。
- 假设我们正在用激光传感器追踪一艘宇宙飞船的位置。我们的激光传感器给出一个单独的输出 x ( t ) x(t) x(t),表示宇宙飞船在时刻 t t t的位置。 x x x和 t t t都是实值的,这意味着我们可以在任意时刻从传感器中读出飞船的位置。
- 现在假设我们的传感器含有噪声。为了得到飞船位置的低噪声估计,我们对得到的测量结果进行平均。显然,时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权值。我们可以采用一个加权函数
w
(
a
)
w(a)
w(a)来实现,其中
a
a
a表示测量结果据当前时刻的时间间隔。如果我们对任意时刻都采用这种加权平均的操作,就得到了对于飞船位置的连续估计函数
s
s
s:
s ( t ) = ∫ x ( a ) w ( t − a ) d a s(t)=\displaystyle\int x(a)w(t-a)da s(t)=∫x(a)w(t−a)da — 公式1 \quad\textbf{---\footnotesize{公式1}} —公式1 - 这种运算就叫做卷积(
convolution
\text{convolution}
convolution)。卷积运算通常用星号表示:
s ( t ) = ( x ∗ w ) ( t ) s(t)=(x\ast w)(t) s(t)=(x∗w)(t) — 公式2 \quad\textbf{---\footnotesize{公式2}} —公式2 - 在我们的例子中, w w w必须是一个有效的概率密度函数,否则输出就不再是一个加权平均。另外, w w w在参数为负值时必须为 0 0 0,否则它会涉及到未来,这不是我们能够做到的。但这些限制仅仅是对我们这个例子来说。通常,卷积被定义在满足上述积分式的任意函数上,并且也可能被用于加权平均以外的目的。
- 在卷积神经网络的术语中,第一参数(在上面这个例子中,函数 x x x)叫做输入( input \text{input} input),第二参数(函数 w w w)叫做核函数( kernel function \text{kernel function} kernel function)。输出有时被称作特征映射( feature map \text{feature map} feature map)。
- 在我们的例子中,激光传感器能够在任意时刻给出测量结果的想法是不现实的。一般地,当我们用计算机处理数据时,时间会被离散化,传感器会给出特定时间间隔的数据。所以比较现实的的假设是传感器每秒给出一次测量结果,这样,时间
t
t
t只能取整数值。如果我们假设
x
x
x和
w
w
w都定义在整数时刻
t
t
t上,就得到了离散形式的卷积:
s ( t ) = ( x ∗ w ) ( t ) = ∑ a = − ∞ ∞ x ( a ) w ( t − a ) s(t)=(x\ast w)(t)=\sum\limits_{a=-\infty}^\infty x(a)w(t-a) s(t)=(x∗w)(t)=a=−∞∑∞x(a)w(t−a) — 公式3 \quad\textbf{---\footnotesize{公式3}} —公式3 - 在机器学习的应用中,输入通常是高维数据数组,而核也是由算法产生的高维参数数组。我们把这种高维数组叫做张量。因为输入与核的每一个元素都分开存储,我们经常假设在存储了数据的有限点集以外,这些函数的值都为零。这意味着在实际操作中,我们可以统一地把无限的求和当作对有限个数组元素的求和来用。
- 最后,我们有时对多个维度进行卷积运算。例如,如果把二维的图像
I
I
I作为输入,我们也相应的需要使用二维的核
K
K
K:
S ( i , j ) = ( I ∗ K ) ( i , j ) = ∑ m ∑ n I ( m , n ) K ( i − m , j − n ) S(i,j)=(I\ast K)(i,j)=\sum\limits_m\sum\limits_n I(m,n)K(i-m,j-n) S(i,j)=(I∗K)(i,j)=m∑n∑I(m,n)K(i−m,j−n) — 公式4 \quad\textbf{---\footnotesize{公式4}} —公式4 - 卷积是可交换的 (commutative),我们可以等价地写作:
S ( i , j ) = ( K ∗ I ) ( i , j ) = ∑ m ∑ n I ( i − m , j − n ) K ( m , n ) S(i,j)=(K\ast I)(i,j)=\sum\limits_m\sum\limits_n I(i-m,j-n)K(m,n) S(i,j)=(K∗I)(i,j)=m∑n∑I(i−m,j−n)K(m,n) — 公式4 \quad\textbf{---\footnotesize{公式4}} —公式4 - 通常,下面的公式5在机器学习库中更方便应用,因为它在 m m m和 n n n的有效范围内变化更少。
- 卷积运算可交换性的出现是因为我们相对输入翻转(
flip
\text{flip}
flip)了核,这意味着当
m
m
m增大时,输入的索引增大,但核的索引相应的减小。翻转核的唯一目的就是为了得到可交换性。尽管可交换性在证明时很有用,但在神经网络的应用中却不是一个重要的性质。与之不同的是,许多神经网络库会实现一个相关的函数,称为互相关函数(
cross-correlation
\text{cross-correlation}
cross-correlation),和卷积运算几乎一样但是并不翻转核:
S ( i , j ) = ( I ∗ K ) ( i , j ) = ∑ m ∑ n I ( i + m , j + n ) K ( m , n ) S(i,j)=(I\ast K)(i,j)=\sum\limits_m\sum\limits_n I(i+m,j+n)K(m,n) S(i,j)=(I∗K)(i,j)=m∑n∑I(i+m,j+n)K(m,n) — 公式5 \quad\textbf{---\footnotesize{公式5}} —公式5 - 许多机器学习的库使用互相关函数但是叫它卷积。
- 在这里我们遵循把两种运算都叫做卷积的这个传统,只有在用到核的翻转时才会在上下文中特别指明区别。
- 在机器学习中,学习算法会在核合适的位置学得恰当的值,所以一个基于核翻转的卷积运算的学习算法所学得的核,是对未进行翻转的算法学得的核的翻转。
- 单独使用卷积运算在机器学习中是很少见的,卷积经常和其他的函数一起使用,无论卷积运算是否翻转了它的核,这些函数的组合通常是不可交换的。
- 图例1演示了一个在 2 2 2维张量上的卷积运算(核没有翻转)的例子。
- 离散卷积可以看作矩阵的乘法,然而,这个矩阵的一些元素被限制为必须和另一些元素相等。
- 例如,对于单变量的离散卷积,矩阵的每一行都必须和上一行移动一个元素后相等。这种矩阵叫做 T o e p l i t z \bold{Toeplitz} Toeplitz矩阵( Toeplitz matrix \text{Toeplitz matrix} Toeplitz matrix)。
- 对于二维情况,卷积对应着一个双重块循环矩阵( doubly block circulant matrix \text{doubly block circulant matrix} doubly block circulant matrix)。
- 除了这些元素相等的限制以外,卷积通常对应着一个非常稀疏的矩阵(几乎所有的元素都为零)。这是因为核通常要远小于输入的图像。任何一个使用矩阵乘法但是并不依赖矩阵结构的特殊性质的神经网络算法,都适用于卷积运算,并且不需要对神经网络做出大的修改。典型的卷积神经网络为了更有效地处理大规模输入,确实使用了一些专门化的技巧,但这些在理论分析方面并不是严格必要的。
- 图例1:一个2维卷积的例子(核没有翻转)
-
一个2维卷积的例子(核没有翻转)
-
说明:
- 我们限制只对核完全处在图像中的位置输出,在一些上下文中称为“有效”卷积。
- 我们用画有箭头的盒子说明输出张量的左上角元素是如何通过对输入张量相应的左上角区域使用核进行卷积得到的。
-
总结
卷积运算作为卷积神经网络的核心组成部分,其重要性不言而喻。通过模拟生物视觉系统中的局部响应机制,卷积运算使得CNN能够自动学习和提取图像中的层次化特征表示,为图像识别、视频分析等领域提供了强大的技术支持。在卷积运算中,卷积核的大小、步长以及填充方式等参数对提取特征的效果具有重要影响,通过合理设置这些参数可以实现对不同尺度图像特征的有效提取。
同时,随着深度学习技术的不断进步和创新,卷积运算也在不断演进和发展。新型卷积方式的出现不仅丰富了卷积运算的形式和内涵,也为CNN在处理不同类型的数据和任务时提供了更多的选择和灵活性。这些创新不仅推动了CNN技术的进一步发展,也为计算机视觉乃至整个人工智能领域带来了新的机遇和挑战。
总之,卷积运算是卷积神经网络中不可或缺的重要组成部分,其独特的优势和广泛的应用前景使得它成为人工智能领域研究的热点之一。我们有理由相信,在未来的发展中,卷积运算将继续发挥重要作用,推动CNN技术的不断创新和进步,为人类社会的进步和发展贡献更大的力量。