理解卷积

原文作者:Christopher Olah

原文地址:http://colah.github.io/posts/2014-07-Understanding-Convolutions/

之前的文章中,我们在没有提及任何高深数学的前提下,初步认识了卷积神经网络。不过更进一步的,我们需要去理解卷积。

如果我们只是想了解卷积神经网络,那么大致理解卷积便已足矣。但这个系列的目的是要引领我们走到卷积神经网络的前沿,并进一步探索新的选择。要做到这一点,我们需要非常深入地去理解卷积。

借助一些例子,我们能让卷积变得通俗易懂。

落球的启迪

假设我们从某一高度扔一个小球到地上,小球在地上只能在一个维度上移动。如果球落下后,再从落点上方把球扔下,那么球总计移动的距离c是多少?

让我们分解这个问题。在首次下落后,小球会以概率f(a)落在距离起点a单位远的地方,其中f是概率分布。

之后我们重新拾起并从另一高度抛出小球,那么其落在距起点b单位远的概率为g(b),鉴于其从不同的高度落下,g可能是一个不同的概率分布。

如果我们固定第一次下落的结果,即我们知道了小球移动的确切距离a,那么第二次移动的距离b也被固定了下来,因为总距离c=a+b是确定的。并且该事件发生的概率是f(a)\cdot g(b)1

来看一个离散情况下的具体例子。我们想让总距离c=3。如果第一次小球滚了a=2,那么第二次必定是b=1,因为必须满足总距离a+b=3。那么该情况发生的概率是f(2)\cdot g(1)

31203ab3

上述情况的概率分别为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)

原来我们所做的正是卷积!特别的,fg的卷积在c处被定义为

(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)

这便是卷积的标准定义2。

为了更具体地说明上式,我们可以从小球的落点来考虑。在第一次下落后,小球先会以概率f(a)落在一个中途位置a。既然其先落在了a,那么它之后落在c的概率便是g(c-a)

为了得到卷积,我们需要考虑所有的中途位置。

可视化卷积

有一个不错的小技巧可以帮助人们更容易地思考卷积。

首先假设一个球落到距起点x处的概率为f(x),那么其从落点x处返回到起点的概率为f(-x)

如果我们知道小球在第二次下落后落到c处,那么其之前在a处的概率是多少呢?

故之前位置为a的概率是

g(-(a-c)) = g(c-a)

如果球最终落到c,现在来考虑所有可能的中途位置的概率。我们已经知道小球第一次下落到中途位置a的概率是f(a),也知道从a出发最终落到c的概率是g(c-a)

累加所有的a,我们便得到了卷积。

这种方法的好处在于,我们能够用图画来可视化一个卷积在c处的求值过程。这能帮助我们从整体上去理解卷积。

例如,我们可以看到,当两个分布对齐时,卷积达到最大值

以及随着分布间交集的减少,卷积也会变小

若在动画中应用该技巧,则能够可视化地来理解卷积。

如下示的动画,我们能够可视化两个框函数的卷积。

来自维基百科

持有这个观点的话,很多事情都会变得更加直观。

现在让我们思考一个非概率性的例子。卷积有时也被用于音频处理。比如我们可以用一个双尖峰函数来创造回声效果。当这个双尖峰函数滑动的时候,一个尖峰会首先到达某个时间点,并将该处信号添加到声音输出中,而另一个尖峰也随之到达并输出带有延迟的信号副本。

高维卷积

卷积是一个极其常见的想法,当然我们也能在更高的维度上使用卷积。

让我们再来看看小球掉落的例子。现在,当小球掉落时,其在地面上可以有两个维度的位置变化。

那么还是像之前那样做卷积

(f\ast g)(c) = \sum_{a+b=c} f(a) \cdot g(b)

唯一不同的是,现在a,b,c都是向量;写得更详细一点就是

(f\ast g)(c1, c2) = \sum_{\begin{array}{c}a1+b1=c1\\a2+b2=c2\end{array}}f(a1,a2) \cdot g(b1,b_2)

或者是按照标准定义的写法

(f\ast g)(c1, c2) = \sum_{a1, a2} f(a1, a2) \cdot g(c1-a1,~ c2-a_2)

就像一维的卷积那样,我们可以把二维卷积理解成一个函数在另一个函数上滑动,然后相乘并累加。

二维卷积的一个常见应用便是图像处理,因为我们可以把一张图片视为一个二元函数。很多重要的图像变换都是将图像和一个小的局部函数(称为核,kernel)做卷积来实现的。

来自River Trail文档 http://intellabs.github.io/RiverTrail/tutorial/

核函数滑动到原图的每个位置,并加权累加其所覆盖的像素值来作为新的像素点。

比如通过对3\times 3区域内的像素取平均值,我们能够模糊一幅图像。而要做到这一点,核函数对区域内每个像素的取值为1/9

Gimp文档 http://docs.gimp.org/en/plug-in-convmatrix.html

我们还知道,通过在两个相邻的像素点上取值-11,而在另外置0,可以实现边缘检测。这相当于我们在对两个相邻的像素点做减法,当相邻的像素相似的时候,得到的结果接近零;但在垂直于边缘的方向上,相邻的像素差别会变得很大。

Gimp文档 http://docs.gimp.org/en/plug-in-convmatrix.html

gimp文档中还有很多其他的例子

卷积神经网络

所以卷积到底是怎么和卷积神经网络扯上关系的呢?

让我们考虑一个一维卷积层,其输入\{x_n\}输出\{y_n\},就和我们在之前那篇文章中讨论过的那样:

就像我们看到的那样,我们能够用输入项来表示输出

y_n = A(x_{n}, x_{n+1}, ...)

一般来说,A会是一个多神经元,不过这里暂时先把它当做是个单神经元。

回忆一下,神经网络中一个典型的神经元是长这样的:

\sigma(w_0x_0 + w_1x_1 + w_2x_2 ~...~ + b)

其中x_0,x_1,...是输入,而权重w_0,w_1,...则描述了神经元是如何连接到输入的。负权重意味着输入抑制了神经元的发射,而正权重则激励其发射。权重是神经元的核心,其控制着后者的行为3。当我们说多重神经元是一样的,等价于说他们的权重是一样的。

这便是神经元的连线,其描述了所有的权重以及相同性,而这些都会通过卷积来处理。

通常来讲,我们会一次性去描述某一层上全部的神经元,而不是单个地去分别描述。技巧在于使用权重矩阵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_0x_0 + W_1x_1 -b)\\y_1 = \sigma(W_0x_1 + W_1x_2 -b)

尽管通常来讲,一个权重矩阵会通过不同的权重来将每个神经元连接到其输入

W = \left[\begin{array}{ccccc} 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{array}\right]

但像之前所说的卷积层矩阵却看起来很不一样。相同的权重出现在了很多位置上;以及由于单个神经元并没有连接很多的输入,所以矩阵中有很多零

W = \left[\begin{array}{ccccc} w_0 & w_1 & 0 & 0 & ...\\ 0 & w_0 &w_1 & 0 & ...\\ 0 & 0 & w_0 & w_1 & ...\\ 0 & 0 & 0 & w_0 & ...\\... & ... & ... & ... & ...\\ \end{array}\right]

与如上所示的矩阵相乘等价于和[...0, w_1, w_0, 0...]做卷积,这个在不同位置上滑动的函数对应着这些位置上的神经元。

那么二维卷积层又是如何呢?

一个二维卷积层上的连线对应着一个二维卷积。

回想下之前用卷积来检测图像边缘的例子,我们通过滑动内核来将其应用于每一小块覆盖的图像上。就像这样,一个卷积层能够把一个神经元应用到图像上的每一块覆盖。

结论

在这篇文章中,我们介绍了很多数学工具,尽管我们从中的收获可能并不明显。卷积显然是概率论和计算机图形学中的一个有用工具,但我们用卷积能从卷积神经网络中获得些什么呢?

第一个好处在于我们能有一些很强大的语言来描述网络的连线。我们目前处理的例子还不够复杂到足以清晰地体现出这个好处,但卷积确实能够为我们摆脱掉大量的簿记工作。

此外,卷积在实现上有着显著的优势,很多库都提供了高效率的卷积例程。更进一步的,尽管卷积表面上看起来是O(n^2)的,但通过一些深入的数学分析,可以将其优化到O(n\log(n))的实现复杂度。我们会在以后的文章中更详细地讨论这个问题的细节。

事实上,GPU上高性能并行卷积的实现,对于计算机视觉领域的最新进展至关重要的。

本系列的下一篇文章

本文是“卷积神经网络及其推广”系列的一部分。前两篇文章对于熟悉深度学习的人来说,不过是个小小回顾;不过之后的文章应该能够引发所有人的兴趣。要想获得最新资讯,请订阅作者的RSS摘要!

请在下方或旁边留言,想要pull requests可以到github

致谢

我十分感激Eliana Lorch对卷积的广泛讨论和对本文写作的帮助

我也很感谢Michael Nielsen和Dario Amodei的评论和支持。

1:

我们想要得到求第一次滚动a单位和第二次滚动b单位的概率。概率分布 P(A)=f(a)P(b)=g(b)是独立的,且分布都以0为中心,故P(a,b)=P(a)\ast P(b)=f(a)\cdot g(b)

2:

我以前从来没见过这个看起来不错非标准定义。在之后的文章中,我们会发现这种定义非常有用,因为其能推广到新的代数结构。并且它还使得卷积的很多代数性质变得十分明显。

比如说,卷积遵循交换律,即f\ast g = g \ast f,为什么呢?

\sum_{a+b=c} f(a) \cdot g(b) ~~=~ \sum_{b+a=c} g(b) \cdot f(a)

卷积还遵循结合律,即(f\ast g)\ast h = f\ast (g\ast h),因为

\sum_{(a+b)+c=d} (f(a) \cdot g(b)) \cdot h(c) ~~=~ \sum_{a+(b+c)=d} f(a) \cdot (g(b) \cdot h(c))

3:

关于神经元的触发条件还存有偏颇,但这里的解释更为简单,以及我不想把它混在这一节中来讨论

本文的版权归 Dappur 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 浅谈用Python计算文本BLEU分数

    BLEU,全称为Bilingual Evaluation Understudy(双语评估替换),是一个比较候选文本翻译与其他一个或多个参考翻译的评价分数。

    人工智能资讯小编
  • 具有张量流的混合密度网络

    不久之前,Google开源了TensorFlow,这是一个旨在简化图表计算的库。 主要的应用程序是针对深度学习,将神经网络以图形形式显示。 我花了几天的时间阅读...

    人工智能资讯小编
  • 机器学习教程:最大熵文本分类器

    在本教程中,我们将讨论最大熵文本分类器,也称为MaxEnt分类器。最大熵分类器是自然语言处理,语音和信息检索问题中常用的判别分类器。使用像JAVA...

    人工智能资讯小编
  • 卷积为什么如此强大?理解深度学习中的卷积

    译自Tim Dettmers的Understanding Convolution in Deep Learning。有太多的公开课、教程在反复传颂卷积神经网络的...

    机器人网
  • 卷积,特征图,转置卷积和空洞卷积的计算细节

    最近在做姿态估计的项目,在定制和实现卷积网络的时候发现自己对里面的一些计算细节还不够了解,所以整理了该文章,内容如下:

    用户1332428
  • ​卷积神经网络

    原文:https://maoli.blog.csdn.net/article/details/88777955

    润森
  • 图像处理论文详解 | Deformable Convolutional Networks | CVPR | 2017

    这个核心贡献在于,为什么卷积过程中卷积核一定要是正方形的?我的检测目标各种形状都有,为什么卷积核一定要是正方形的呢?

    机器学习炼丹术
  • 简谈卷积—幽默笑话谈卷积

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。...

    FPGA技术江湖
  • 吃透空洞卷积(Dilated Convolutions)

    空洞卷积在图像分割需要增加感受野同时保持特征图的尺寸的需求中诞生,本文详细介绍了空洞卷积的诞生、原理、计算过程以及存在的两个潜在的问题,帮助大家将空洞卷积这一算...

    公众号机器学习与生成对抗网络
  • 【综述】卷积神经网络(CNN)综述

    人工神经网络(Artificial Neural Networks,ANN)是一种模拟生物神经系统的结构和行为,进行分布式并行信息处理的算法数学模型。ANN通过...

    yuquanle

扫码关注云+社区

领取腾讯云代金券