0%

理解卷积

本文的目的是深入的理解卷积,通过一些示例,卷积将会成为一个非常简单的想法.

抛球的经验

想象一下,我们将一个球从某个高度掉落到地面上,球在该地面只能在一个方向上运动,如果您将球放下然后从其着陆点上方再次放下,球可能会前进的距离$c$是多少?
让我们分解一下。在第一次下落之后,它将以概率$f(x)$降落距起点$a$个单位,其中$f$是概率分布。
现在,在第一次下落之后,我们将球捡起并从其首次着陆点上方的另一个高度下落。球从新起点滚动$b$单位的概率为$g(b)$,其中$g$如果从不同高度掉落,则可能是不同的概率分布。

如果我们确定了第一个的结果,我们就知道了球的移动距离$a$,对于球的总距离为$c$,第二个球的移动距离也固定为$b$,其中$a+b=c$。因此发生这种情况的可能性就是$f(a)\cdot g(b)$。

让我们考虑一个具体的离散示例。 我们希望总距离$c$为$3$。如果它第一次滚动$a=2$,则第二次它必须滚动$b=1$,才能达到我们的总距离$a+b=3$。 这个概率是$f(2)\cdot g(1)$。

但是,这不是我们达到$3$的总距离的唯一方法。球第一次可以滚动$1$个单位,第二次可以滚动$2$个单位。 或第一次为$0$,第二次为$3$。 只要将$a$和$b$加和等于$3$,它就可以取任意值。

这个概率分别是$f(1)\cdot g(2)$和$f(0)\cdot g(3)$。

为了找出球到达总距离$c$的总可能性,我们不能仅考虑一种到达$c$的可能方式。 相反,我们考虑将$c$划分为两个球$a$和$b$的所有可能方法,并对每种方法的概率求和。
$$…f(0)\cdot g(3)+f(1)\cdot g(2)+f(2)\cdot g(1)…$$
我们已经知道,对于每种情况,$a+b=c$的概率就是$f(a)\cdot g(b)$。 因此,对$a+b=c$的每个解求和,我们可以将总似然表示为:
$$\sum_{a+b=c}f(a) \cdot g(b)$$
事实证明,我们正在做卷积! 特别地,定义在$c$处的$f$和$g$的卷积定义为:
$$(f\ast g)(c) = \sum_{a+b=c} f(a) \cdot g(b)$$
如果我们用$b = c−a$代替,我们得到:
$$(f\ast g)(c) = \sum_a f(a) \cdot g(c-a)$$
这是卷积的标准定义。
为了更具体一点,我们可以考虑球可能着陆的位置。 在第一次下降之后,它将以概率$f(a)$降落在中间位置$a$。 如果它降落在$a$处,则它有概率$g(c-a)$降落在位置$c$处。

为了得到卷积,我们考虑所有中间位置。

可视化卷积

有一个很好的技巧,可以帮助人们更轻松地思考卷积。

首先,观察。 假设一个球从其起点降落一定距离$x$的概率为$f(x)$。 然后,此后,它从着陆点开始的距离为$x$的概率为$f(-x)$。

果我们知道球在第二次下降后落在位置$c$上,那么前一个位置是$a$的概率是多少?

因此,先前位置为$a$的概率为$g(-(a-c))=g(c-a)$。

现在,考虑每个中间位置有助于球最终降落在$c$的概率。 我们知道第一滴将球放到中间位置$a$的概率是$f(a)$。 我们还知道,如果它降落在$c$上,它进入$a$的概率为$g(c-a)$。

对所有$a$求和,我们得到了卷积。

这种方法的优点是,它使我们可以在单个图片中可视化卷积在值$c$处的评估。 通过移动下半部分,我们可以评估其他$c$值的卷积。 这使我们能够从整体上理解卷积。

例如,我们可以看到分布对齐时达到峰值。


且随着分布之间的交点变小而缩小。

过在动画中使用此技巧,实际上可以从视觉上理解卷积。

下面,我们可以看到两个框函数的卷积:

有了这种观点,很多事情就会变得更加直观。

让我们考虑一个非概率示例。 卷积有时在音频处理中使用。 例如,一个函数可能会使用其中有两个尖峰但在其他所有地方为零的函数来创建回波。 当我们的双尖峰功能滑动时,一个尖峰首先击中一个时间点,将该信号添加到输出声音中,然后又出现另一个尖峰,并添加第二个延迟副本。

高维卷积

卷积是一个非常笼统的想法。我们还可以将它们用于更大的尺寸。
让我们再次考虑一个落球的例子。现在,随着位置的下降,它的位置不仅在一维,而在二维。

卷积与以前相同:
$$(f\ast g)(c) = \sum_{a+b=c} f(a) \cdot g(b)$$
除了,现在$a$,$b$和$c$是向量。更明确地说,
$$(f\ast g)(c_1, c_2) = \sum_{\begin{array}{c}a_1+b_1=c_1\\a_2+b_2=c_2\end{array}} f(a_1,a_2) \cdot g(b_1,b_2)$$

或在标准定义中:
$$(f\ast g)(c_1, c_2) = \sum_{a_1, a_2} f(a_1, a_2) \cdot g(c_1-a_1,~ c_2-a_2)$$
就像一维卷积一样,我们可以将二维卷积视为将一个函数滑动到另一个函数之上,相乘和相加。
一种常见的应用是图像处理。我们可以将图像视为二维函数。许多重要的图像转换都是卷积,您可以在其中将图像函数与一个非常小的局部函数(称为“卷积核”)进行卷积。

卷积核滑动到图像的每个位置,并计算一个新像素作为其浮动像素的加权和。
例如,通过平均3x3像素矩阵,我们可以使图像模糊。 为此,我们的内核在框中的每个像素上取值$\frac{1}{9}$,

我们还可以通过在两个相邻像素上取值$-1$和$1$,在其他所有位置取零来检测边缘。 也就是说,我们减去两个相邻像素。 当并排像素相似时,这大约等于零。 然而,在边缘上,相邻像素在垂直于边缘的方向上有很大不同。

卷积神经网络

那么,卷积与卷积神经网络有何关系?

考虑一个具有输入${x_n}$和输出${y_n}$的一维卷积层,就像这样:

正如我们观察到的,我们可以用输入来描述输出:
$$y_n = A(x_{n}, x_{n+1}, …)$$
通常,A将是多个神经元。 但是假设它只是一个神经元。
回想一下,神经网络中的典型神经元描述为:
$$\sigma(w_0 x_0 + w_1 x_1 + w_2 x_2 … + b)$$
其中$x_0,x_1…$是输入。 权重$w_0,w_1……$描述了神经元如何连接到其输入。 负权重表示输入抑制神经元的激活,而正权重则鼓励神经元激活。 权重是神经元的心脏,控制神经元的行为。说多个神经元是相同的,这与说权重相同是一回事。
卷积将为我们处理的是神经元的这种连线,描述了所有权重以及哪些权重相同。
通常,我们一次而不是单独描述一个层中的所有神经元。 诀窍是要有一个权重矩阵$W$:
$$y = \sigma(Wx + b)$$
例如,我们得到:
$$y_0 = \sigma(W_{0,0} x_0 + W_{0,1} x_1 + W_{0,2} x_2 …)$$
$$y_1 = \sigma(W_{1,0} x_0 + W_{1,1} x_1 + W_{1,2} x_2 …)$$
矩阵的每一行都描述了将神经元连接到其输入的权重。
但是,返回到卷积层,因为同一神经元有多个副本,所以许多权重出现在多个位置。

对应于等式:
$$y_0 = \sigma(W_0 x_0 + W_1 x_1 -b)$$
$$y_1 = \sigma(W_0 x_1 + W_1 x_2 -b)$$
因此,通常,权重矩阵会将每个输入连接到具有不同权重的每个神经元:
$$
W = \begin{bmatrix}
W_{0,0} & W_{0,1} & W_{0,2} & W_{0,3} & …\\
W_{1,0} & W_{1,1} & W_{1,2} & W_{1,3} & …\\
W_{2,0} & W_{2,1} & W_{2,2} & W_{2,3} & …\\
W_{3,0} & W_{3,1} & W_{3,2} & W_{3,3} & …\\
… & … & … & … & …\\
\end{bmatrix}
$$
像上面的卷积层的矩阵看起来很不一样。 相同的权重出现在多个位置中。 而且由于神经元没有连接到许多可能的输入,因此存在很多零。
$$
W = \begin{bmatrix}
w_0 & w_1 & 0 & 0 & …\\
0 & w_0 & w_1 & 0 & …\\
0 & 0 & w_0 & w_1 & …\\
0 & 0 & 0 & w_0 & …\\
… & … & … & … & …\\
\end{bmatrix}
$$
与上述矩阵相乘与与$[… 0,w_1,w_0,0 …]$卷积相同。 滑动到不同位置的功能对应于在那些位置具有神经元。
二维卷积层呢?

二维卷积层的布线对应于二维卷积。
考虑上面的示例,通过使用卷积来检测图像边缘,方法是在周围滑动一个内核并将其应用于每个面片。 就像这样,卷积层会将神经元应用于图像的每个patch。

结论

我们在此博客文章中介绍了许多数学机制,但是获得的结果可能并不明显。 卷积显然是概率论和计算机图形学中的有用工具,但是从卷积的角度说卷积神经网络有什么好处呢?

第一个优点是我们拥有一些非常强大的语言来描述网络的布线。 到目前为止,我们所处理的示例还不够复杂,以至于无法清楚地看到这种好处,但是通过卷积可以使我们摆脱大量令人不快的簿记工作。

其次,卷积具有明显的实施优势。 许多库提供高效的卷积例程。 此外,尽管卷积天真地看起来是$O(n2)$运算,但使用一些相当深的数学见解,就有可能创建$O(nlog(n))$实现。 我们将在以后的文章中对此进行更详细的讨论。

实际上,在GPU上使用高效并行卷积实现对于计算机视觉的最新进展至关重要。

写文不易,感谢支持!
Writing is not easy. Thank you for your support.