理解卷积

原文作者: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 条评论
登录 后参与评论

相关文章

来自专栏数据科学与人工智能

决策树算法那些事--CART|机器学习

一、树算法介绍 当前数据挖掘领域中存在10个火热的算法、它们涉及到数据的聚类、分类、关联规则、排序等方面。今天就跟大家说说基于树的分类算法--决策树,决策树有非...

3655
来自专栏机器之心

如何解读决策树和随机森林的内部工作机制?

选自 Pivotal 机器之心编译 参与:Panda 随机森林在过去几年里得到了蓬勃的发展。它是一种非线性的基于树的模型,往往可以得到准确的结果。但是,随机森林...

31610
来自专栏算法channel

机器学习:提升树(boosting tree)算法的思想

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来...

3848
来自专栏量子位

超分辨率技术如何发展?这6篇ECCV 18论文带你一次尽览

在这篇文章中,亲历了ECCV 2018的机器学习研究员Tetianka Martyniuk挑选了6篇ECCV 2018接收论文,概述了超分辨率(Super-Re...

1.1K2
来自专栏AI研习社

如何使用高大上的方法调参数

本文主要介绍作者与 Elad Hazan, Adam Klivans 合作的最新论文: Hyperparameter Optimization: A Spec...

3659
来自专栏机器学习算法与Python学习

一文让你入门CNN,附3份深度学习视频资源

CNN简介 文末附三份深度学习视频资源 后台回复关键词(20180310) 目录: 一些视频资源和文章 CNN简介 图像即四维张量? 卷积的定义 CNN如何工作...

4257
来自专栏小小挖掘机

推荐系统遇上深度学习(六)--PNN模型理论和实践

推荐系统遇上深度学习(五)--Deep&Cross Network模型理论和实践

2782
来自专栏PPV课数据科学社区

干货:基于树的建模-完整教程(R & Python)

来源:“数盟社区” 原文链接:http://dataunion.org/23697.html 简介 基于树的学习算法被认为是最好的方法之一,主要用于监测学习方...

3897
来自专栏红色石头的机器学习之路

台湾大学林轩田机器学习基石课程学习笔记14 -- Regularization

上节课我们介绍了过拟合发生的原因:excessive power, stochastic/deterministic noise 和limited data。并...

2490
来自专栏AI研习社

一文读懂 CNN、DNN、RNN 内部网络结构区别

【AI研习社】关注AI前沿、开发技巧及技术教程等方面的内容。欢迎技术开发类文章、视频教程等内容投稿,邮件发送至:zhangxian@leiphone.com 从...

3906

扫码关注云+社区

领取腾讯云代金券