Do not be afraid, "convolution" is actually very simple

Previous articles can not use the recommended card, which I wrote in 2017, re-published once, we review - review

My machine learning tutorials "US group" algorithm engineers take you on machine learning    has begun to update, and welcome to subscribe.

Any questions about algorithms, programming, AI industry knowledge or blog content, you can always scan the code number of public concern "Turing's Cat", adding "study groups", sand sculpture bloggers online Q ~ In addition, there are more in the public No. AI, algorithms, programming and knowledge sharing big data, as well as free SSR node and learning materials. Other platforms (know almost / B station) is also of the same name "Turing's cat," Oh do not get lost ~

 

Foreword

I believe that many times, when we see the "convolution", always forced to look ignorant state, not only because it is more difficult to understand the concept itself, but also because it plays out in the vagaries of different applications the role of people also often confused.

But these applications, in fact, are essentially the same thing, to understand the origin of convolution, you can learn by analogy. In fact, I personally convolution understanding, very long time in a state of half-comprehended, as some tricky points of the Fourier transform, not just mistakes in the application, without understanding. But if you really want to do research on machine learning, I think the real theoretical basis of learning before, the essence of the concept must be clear.

Therefore, this article is for students to engineering, science and other fields interested and finishing, in addition to their own understanding, and thank know almost, on the other watercress A main answers (authorized), popular content simple, easy to understand. In addition, although this article included into my machine learning columns, but because of the many examples cited, therefore only as free to share, not included in the subscription.


Foreword

So, in the end what is the convolution of it?

How volume?

Rolled what is the use?

Convolution kernel (involving derivation process can be skipped)

Convolution application

2 dimensional convolution

References

 


Convolution, most of the time we are in various engineering fields, signal fields have seen common nouns, such as system

Easy to understand, is that

* = Input Output System

While it might seem just a simple mathematical formula, but it has important physical significance, because such systems are ubiquitous in nature, the best way to calculate the output of a system is the use of convolution. More generally, we have many other application areas:

  • Statistics , the moving average is a weighted convolution.

  • Probability theory , the two statistically independent variables X and Y and the probability density function is the convolution of the probability density function of X and Y.

  • Acoustics , the echo sound source can be reflected with a reflection effect of the various functions represented by convolution.

  • Electronic Engineering and Signal Processing , any linear system can be output by the input signal and the system function (impulse response of the system) convolve obtained.

  • Physics , any of a linear system (in line with the principle of superposition) are present convolution.

  • Computer science , the convolutional neural network (CNN) is a deep learning algorithms, in recent years, is widely used in pattern recognition, image processing and other fields.

These six areas, convolution played a crucial role. In the face of complex cases, as a powerful approach, a convolution gives a simple but effective output. For the field of machine learning, especially in deep learning, most notably CNN convolutional neural network (Convolutional Neural Network, CNN), has achieved very good results in the actual image field, beginning a sweep of various algorithms will appear. CNN about the specific content and understanding will be explained later in the article, to stay here a suspense.

 

So, in the end what is the convolution of it?

First of all tell you a little story about convolution:

 

Xiao Ming is a giant of the Internet Hangzhou employees, 996 very hard every day, but recently fell in love with Xiao Ming billiards, frequent absences station.

 

That day, the director Xiao Ming let Xiaoming changed a demand, Xiao Ming was downstairs to find Products Mary billiards went, was in charge discovered that he was very angry, slapped Xiao Ming slap (note that this is the input signal, pulse) .

So Bob will gradually face (cheap cheap to) a bulging bag, Xiaoming face is a system, and the packet is bulging face Xiaoming response to the leg. Well, so the signal system and set up a corresponding sense of connection.

下面还需要一些假设来保证论证的严谨:假定小明的脸是线性时不变系统,也就是说,无论什么时候主管打一巴掌,打在小明脸的同一位置(这似乎要求小明的脸足够光滑,如果小明长了很多青春痘,甚至整个脸皮处处连续处处不可导,那难度太大了,我就无话可说了哈哈),小明的脸上总是会在相同的时间间隔内鼓起来一个相同高度的包来,并且假定以鼓起来的包的大小作为系统输出。

 

好了,那么,下面可以进入核心内容——卷积了! 

如果小明每天都到公司楼下去打台球,那么主管每天都要扇小明一巴掌,不过当主管打小明一巴掌后,小明5分钟就消肿了,所以时间长了,他甚至就适应这种生活了……如果有一天,主管忍无可忍,叫上公司的251个保安,站成一个圈围住小明,以0.5秒的间隔开始不间断的扇小明的过程,这样问题就来了,第一次扇小明鼓起来的包还没消肿,第二个巴掌就来了,小明脸上的包就可能鼓起来两倍高,大家不断扇小明,脉冲不断作用在小明脸上,效果不断叠加了,这样这些效果就可以求和了,结果就是小明脸上的包的高度随时间变化的一个函数了(注意理解)


如果主管再狠一点,频率越来越高,以至于小明都辨别不清时间间隔了,那么,求和就变成积分了。可以这样理解,在这个过程中的某一固定的时刻,小明的脸上的包的鼓起程度和什么有关呢?和之前每次打小明都有关!但是各次的贡献是不一样的,越早打的巴掌,贡献越小,所以这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是小明脸上的包的大小随时间变化的函数。
​本来小明的包几分钟就可以消肿,可是如果连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?反映到剑桥大学的公式上,f(a)就是第a个巴掌,g(x-a)就是第a个巴掌在x时刻的作用程度,乘起来再叠加就ok了
 

又比如,小明因为被主管虐待,所以一怒之下还手,结果被保安驾出了公司,还没有拿到N+1赔偿。他只好通过理财的方式来达到财务自由,希望出任CEO赢取白富美走上人生巅峰,于是他把所有存款100元钱存入了XXP2P理财,年利率是5%,按复利计算(即将每一年所获利息加入本金,以计算下一年的利息),那么在五年之后他能拿到的钱数是

如下表所示


将这笔钱存入银行的一年之后,小明又往银行中存入了100元钱,年利率仍为5%,那么这笔钱按复利计算,到了第五年,将收回的钱数是

我们将这一结果作为新的一行加入上面的表格中:

以此类推,如果小明每年都往银行中存入新的100元钱,那么这个收益表格将是这样的:
可见,最终小明拿到的钱将等于他各年存入的钱分别计算复利之后得到的钱数的总和,即:

用求和符号来简化这个公式,可以得到:


在上式中f(i)为小明的存钱函数,g(i)为存入银行的每一笔钱的复利计算函数。在这里,小明最终得到的钱就是他的存钱函数和复利计算函数的卷积。

为了更清晰地看到这一点,我们将这个公式推广到连续的情况,也就是说,小明在从0t的这一段时间内,每时每刻都往银行里存钱,他的存钱函数为

而银行也对他存入的每一笔钱按复利公式计算收益:

则小明到时间t将得到的总钱数为:

这也就是卷积的表达式了,上式可以记为

 

相信通过上面这个例子,大家应该能够很清晰地记住卷积公式了。下面我们再展开说两句:
如果我们将小明的存款函数视为一个信号发生(也就是激励)的过程,而将复利函数

视为一个系统对信号的响应函数(也就是响应),那么二者的卷积

就可以看做是在t时刻对系统进行观察,得到的观察结果(也就是输出)将是过去产生的所有信号经过系统的「处理/响应」后得到的结果的叠加,这也就是卷积的物理意义了。

通过这个通俗化的例子我们从基本概念上了解了卷积,那么更严格的定义是怎样的呢?

从数学上讲,卷积只不过是一种运算,对于很多没有学过信号处理,自动控制的同学来说各种专业的名词可以不做了解,我们接着继续。本质上卷积是将二元函数卷成一元函数 ,俗称降维打击。

 

 

怎么卷?

考虑到函数 f 和 g 应该地位平等,或者说变量 x 和 y 应该地位平等,一种可取的办法就是沿直线

卷起来

 

卷了有什么用?

可以用来做多位数乘法,比如:

注意第二个等号右边每个括号里的系数构成的序列 (14,34,14,4),实际上就是序列 (2,4) 和 (7,3,1) 的卷积。在乘数不大时这么干显得有点蛋疼,不过要计算很长很长的两个数乘积的话,这种处理方法就能派上用场了,因为你可以用快速傅立叶变换 FFT 来得到卷积,比示例里的硬乘要快多啦
 

 

有一个不太严格的理解:


其中,X是“基”,a是在这个基上的展开系数。两个多项式乘积的在基上展开的系数就是两个多项式各自在基上展开系数的卷积。
a对应着频率不同的exp(ikt),系数对应着其傅里叶变换。自然就是乘积的傅里叶变换等于傅里叶变换的卷积了。

 

卷积的内核(涉及推导过程,可以跳过)

 

首先我们要理解这样一个概念:内积、积分、投影这三者其实从某个角度上讲是一个意思

定义一组向量另一组向量

那么内积可以表达为:

瞧,这即是内积,也是累加(积分)。投影的概念则可以理解为向量a在基向量b上的一组投影,坐标为

这和一个点在3D欧几里得空间的三轴投影坐标是一个道理。

这样,我们可以顺便先来看看Fourier变换在做什么:

再引入一个完美的式子,欧拉公式:

从Fourier的定义式可以看出是对f(t)和exp(-jwt)相乘后在无穷域上对其进行积分,那么其实就是将f(t)投影在exp(-jwt)上,如果不理解是什么鬼就变换为两个正交的三角函数(欧拉公式就在这里起作用啦~)。所以这就明朗了:Fourier把f(t)投影到了两个为正交关系的正弦和余弦空间中。也可以从周期信号的Fourier级数分解表达式更容易看出这个投影关系。

看完Fourier再看来控制论领域的Laplace变换在做什么:

首先,控制领域里面经常用到阶跃信号,不幸的是它不满足狄利克雷第三条件,因此它对Fourier变换魔法免疫(劳资就要跳变,你咋地!),所以聪明的Laplace用了一个衰减因子将其进行衰减后再做Fourier变换(很暴力有木有)。But,到了负无穷的区域这衰减因子可就成了递增因子,所以Laplace变换仅限于大于0的区域,对于小于0的区域用系统初始状态表达就好了。从这点角度上讲,Laplace变换相当于做了一个单边Fourier变换。

然后,分析方法同上,可以看到Laplace把f(t)投影到了exp(-st)空间,这就是s平面啦。它比Fourier更厉害的地方是不仅可以看到虚轴上的成分,还可以在实轴上看到Fourier看不到的衰减因子成分,这是Fourier做不到的。所以Laplace在Fourier的基础上把信号拓展到了衰减因子实轴上,这个衰减因子和系统的阻尼,自然震荡角频率密切相关,直接影响了系统的调节时间。

学过自控原理的同学应该知道在频域章节,我们得到系统的频域响应曲线都是通过传递函数来直接转化的,公式就是s=jw。这也就是说Fourier活在一维虚轴空间,Laplace活在二维平面空间,想要得到一维空间上关于w的表达形式,只需要在s平面上做降维处理即可。

回过头来再来看看卷积投影:

这个投影有点奇怪,它在投影之前先把g(T)做了一个反对称,然后再投影。对应到前面推导的系统卷积表达式:

相当于在投影之前,先把输入信号r(t)在时间轴上翻转了180°,然后与系统f(t)进行投影。投影的概念我们可以很好理解,无论是向量内积运算相当于线投影,或者空间的一个多面体在三维空间平面上的投影面,这种投影运算就相当于一种重合面积。如果从这个角度去看输入、系统和输出三者之间的关系,那么就可以从图形角度去理解为什么一个一阶系统在阶跃响应输出下是一条单调上升的曲线了。这里用一张wikipedia里关于卷积的一张图形化解释,想要了解更多的同学可以自行跳转:Convolution

(感谢知乎学霸王尼莫和马同学的帮助)

 

 

卷积的应用

用一个模板和一幅图像进行卷积,对于图像上的一个点,让模板的原点和该点重合,然后模板上的点和图像上对应的点相乘,然后各点的积相加,就得到该点的卷积值。对图像上的每个点都这样处理。

由于多数模板都对称,所以模板不旋转。卷积是一种积分运算,用来求两个曲线重叠区域面积。可以看作加权求和,可以用来消除噪声、特征增强。把一个点的像素值用它周围的点的像素值的加权平均代替。

卷积也可以理解为一种线性运算,图像处理中常见的mask运算都是卷积,广泛应用于图像滤波。 卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。

利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。

下面是来自sselssbh博客的一个例子,非常形象的解释了卷积在图像领域的作用

 

有这么一副图像,可以看到,图像上有很多噪点: 

 

高频信号,就好像平地耸立的山峰: 

看起来很显眼。平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去。用数学的话来说,就是把山峰周围的高度平均一下。

平滑后得到

卷积可以帮助实现这个平滑算法。

有噪点的原图,可以把它转为一个矩阵: 

然后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)来平滑图像:

记得刚才说过的算法,把高频信号与周围的数值平均一下就可以平滑山峰。比如我要平滑a1,1 点,就在矩阵中,取出a1,1点附近的点组成矩阵 f ,和 g 进行卷积计算后,再填回去 

 

要注意一点,为了运用卷积, g虽然和f同维度,但下标有点不一样: 

 

写成卷积公式就是:

要求的话,一样可以套用上面的卷积公式。这样相当于实现了 g 这个矩阵在原来图像上的划动(准确来说,下面这个二维卷积的例子把 g 矩阵旋转了180∘ )

 

 

2维卷积

2 维卷积是一个相当简单的操作:从卷积核开始,这是一个小的权值矩阵。这个卷积核在 2 维输入数据上「滑动」,对当前输入的部分元素进行矩阵乘法,然后将结果汇为单个输出像素。

立体的角度来看,二维层面的卷积就是移动和映射(自上而下)

 

而从平面展开则是如下的过程,每一个蓝色9宫格的数字都对应了一个绿色各自的数字,这个对应过程就是卷积的具体计算。

 

 

再比如做馒头

楼下早点铺子生意太好了,供不应求,就买了一台机器,不断的生产馒头。 

假设馒头的生产速度是 f(t) ,那么一天后生产出来的馒头总量为: 

馒头生产出来之后,就会慢慢腐败,假设腐败函数为 g(t) ,比如,10个馒头,24小时会腐败:

想想就知道,第一个小时生产出来的馒头,一天后会经历24小时的腐败,第二个小时生产出来的馒头,一天后会经历23小时的腐败。 如此,我们可以知道,一天后,馒头总共腐败了: 

 

参考材料

1. CSDN:最容易理解的对卷积(convolution)的解释http://blog.csdn.net/bitcarmanlee/article/details/54729807

2. 知乎:如何通俗易懂的解释卷积?https://www.zhihu.com/question/22298352

3. 卷积为什么叫卷子?https://www.zhihu.com/question/54677157

4. 果壳:关于卷积的一个血腥讲解 https://www.guokr.com/post/342476/

5. 小木虫:https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E5%AE%9A%E7%90%86 

 

 

>>>关于作者

CSDN 博客专家,2019-CSDN百大博主,计算机(机器学习方向)博士在读,业余Kaggle选手,有过美团、腾讯算法工程师经历,目前就职于Amazon AI lab。喜爱分享和知识整合。

关注微信公众号,点击“学习资料”菜单即可获取算法、编程资源以及教学视频,还有免费SSR节点相送哦。其他平台(微信/知乎/B站),欢迎关注同名公众号「图灵的猫」~

发布了319 篇原创文章 · 获赞 1554 · 访问量 192万+

Guess you like

Origin blog.csdn.net/qq_39521554/article/details/103801861