1.通俗解释:
作者:周啸
链接:https://www.zhihu.com/question/22298352/answer/257790355
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
《卷积信号与moba游戏的伤害计算》
在打游戏的时候,假设你对敌方英雄造成了一次攻击。攻击的效果是,地方英雄会在接下来5秒内持续增长的掉血。每秒掉血分别为1 2 3 4 5;那么你在0秒的时候攻击了一下敌方英雄,敌方英雄的掉血情况为:
抽象一下。假设x[k]是一个单位信号(一次攻击),即仅当k=0时x(k) = 1.假设把这个信号输入到一个系统里面得到的响应为h[n]:
同样,假设你在第2秒对地方英雄进行了攻击,则敌方英雄会在地2-7秒持续掉血。
由于攻击不是在第0秒,而是在第二秒,因此,产生伤害也是从第二秒开始。使用函数位移的想法了解释,则本来第0秒产生的伤害右移了两个单位,变成了h[n-2]:
那么,如果第0秒和第2秒都进行了攻击,伤害是怎样的呢?当然是第0秒的伤害加上第2秒的伤害,即:
那么,对于任意形式的攻击x[k],很容易推广到,产生的伤害y[n]计算方法为:
这就是卷积的公式。解释很简单,就是对任意的攻击x[k],产生的伤害就是,把所有k时刻的攻击产生的伤害h[n-k]都叠加起来了。
那么,如果我想知道,对与任意的攻击方式,敌方英雄某一秒(比如第3秒)受到的伤害是怎样的呢?
即,对于输入x[k],任意一个y[n]点的伤害是怎样的呢?
我把不同k时候的关于n的函数h[n-k]全部画出来。如上图中不同的纵轴表示。那第三秒敌方英雄收到的伤害y[3]等于x(0) h(3)+ x(1) h(3-1)+ x(2) h(3-2)+ x(3) h(3-3).
注意!!!在上图的表示中,我并未直接计算 ,而是将其表示为不同的函数h[n-k]与不同的[k]的组合!!
------------学术的分割线--------------
也就是说,以离散信号为例,
卷积y[n] = x[n] * h[n],可以理解为,将y[n]分为不同的 分量为h[n-k]、系数为x[k]的线性组合。也就是说,y[n]是一系列关于h[n]移位后的h[n-k],每个函数h[n-k]乘上特定的系数x[k] 组合而成的函数。
这种 “用一组函数进行线性组合得到目标函数”的理念,在傅里叶分析中也有应用:将原始信号y[n],分为一系列谐波信号e^(jkwn)的函数的线性组合。
再来看这个图:
你想到了什么??
上图解释参见:如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧
到这里会发现,卷积和傅里叶分析的一个相同的理念:
用不同的函数的线性组合,表示原信号。
傅里叶分析用的是不同的正弦函数的线性组合;
而卷积,用的是h[n]移位不同的k得到的一系列h[n-k]的线性组合。
换个角度,你会看到更多。
2.卷积在图像上的使用,卷积神经网络实际上是在干什么?
作者:林扬飞
链接:https://www.zhihu.com/question/22298352/answer/27993829
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
卷积在信号与系统这门课程里面使用得比较多,可以说卷积就是信号与系统这门课程的一道坎,把卷积的概念弄清楚了,信号与系统其他一些概念都很明了了。因此,结合信号系统来更为形象地理解什么是卷积。
- 系统
从一些生活中的例子说起吧。往一片平静的水面投入一块石头,水面的涟漪随时间推移扩散开去,慢慢地水面又恢复平静。如果把水面看做一个“系统”的话,投入石块就相当于给这个“系统”一个“激励”,水面产生波纹就相当于这个“系统”的“响应”。又比如敲锣,当外力敲打锣面产生“激励”,锣面的“响应”就是产生振动发出声音,由于阻力作用,声音越来越弱。其实,系统在生活中无处不在,把这些例子抽象出来,就可以用这个图来表示:
- 响应
既然已经把系统抽象成这么一个接受输入,产生输出的“黑盒子”。那么,我们研究这个“黑盒子”特性一个很重要的办法就是给这个系统一个输入,然后去测量系统的输出是怎样的,进而分析出系统的特性。通常是在t=0时刻,往系统的输入断加入一个记为 单位冲激信号:
测得系统的响应为:
类似于敲锣的例子,敲打锣面就是上面第一幅图所示的冲激信号,锣面发生振动的幅度就如同上面第二幅图所示。 通过这种方法反映了系统的特性,如果用一个输入-输出对应的函数来表示系统,上面这个图形对应的函数就称为系统函数。当然,实际的系统输入并不是一个的单位冲激信号这么简单,但无论多么复杂的输入信号,我们都可以将其分解为一个个连续的冲激信号,下面3幅图就分别显示了t=0s,t=0.2s,t=0.4s时给系统输入单位冲激信号,系统的响应:
由于3个单位冲激信号有0.2s的延时,因此系统的3个响应图形也响应有0.2s的延时,最后我们将蓝、红、绿3个响应图形相加起来就得到了3个单位冲激信号通过系统的输出:
- 卷积
前面所讲从系统的抽象以及系统的响应都是概念性的,那么系统输入和输出的数值具体怎么计算,这时卷积就派上用场了。卷积可以理解为一种计算系统输入和输出数值的工具,用符号'*'表示卷积,那么就得到关系式:输入*系统=输出。上面的图2在t=0.4s时的数值,是由图1中蓝、红、绿分别对应的3个单位冲激响应相加得来,蓝、红、绿3个信号进入系统的时间分别为:t=0s,t=0.2s,t=0.4s,仔细观察,在图1中3个冲激信号对应系统响应的值分别为系统响应在t=0.4s,t=0.2s,t=0s的值,对应的时间顺序刚好相反,这就揭示的卷积的计算方法:翻转、平移、相乘、积分(或求和),(看到维基百科有个很好的动态图:http://zh.wikipedia.org/wiki/卷积)。归纳的讲,t时刻卷积的值就是t时刻以及t时刻之前信号对系统产生响应值的总和。
“卷积”这个词在很多领域都有出现和应用,比如统计学、声学、物理学、计算机科学等等,相信很多人第一次听到它时都是一脸懵逼的状态。在深度学习领域中,卷积是一个很常见的术语,我们常用的卷积神经网络就用到了卷积,而卷积也是卷积神经网络拥有良好的图像处理能力的关键。但可能很多人并没有很好地理解卷积,很长时间都处于似懂非懂的状况,今天我们就直观解释一下深度学习中的卷积。
什么是卷积?
你可以将卷积想象成一种混合信息的方法。想象有两个装满信息的桶,我们把它们都放到一个桶里,然后根据某种规则搅拌搅拌。每个信息桶都有它自己的配方,写明了桶里的信息该如何同另一个桶的信息混合在一起。所以卷积就是两个信息源混合在一起的有序过程。
我们也可以从数学上描述卷积,实际上卷积就是一种数学运算,和加减乘除差不多。虽然这种运算本身比较复杂,但非常有助于简化更为复杂的方程式。在物理和工程学中,卷积同样被广泛用于简化复杂的公式。
怎样将卷积应用到图像处理中?
我们在图像处理中应用卷积时,是将其应用在二维数据中——即图像的宽和高。还是用前面举的混合两个桶的比喻,第一个桶是输入图像,总共 3 个像素矩阵——每个矩阵对应红、绿、蓝 3 个颜色通道;每个通道中的每个像素都是 0-255 之间的一个整数。第二个桶是卷积核(kernel),它是一个浮点值矩阵,其中的数字模式和大小就相当于桶的配方,写明了应该怎样将输入图像和卷积核搅拌在一起,在卷积操作中就是将卷积核与输入图像混合在一起。卷积核的输出是一幅修改后的图像,在深度学习中常被叫做特征图谱(feature map)。每个颜色通道都会有一个特征图谱。
将图像和边缘检测器的卷积核混合的卷积操作
上图如何做到呢?我们现在就演示一下通过卷积将这两部分信息搅拌在一起。应用卷积的一种方法就是从输入图像中取出一个和卷积核大小相同的区块——这里我们的图像为 100 x 100,卷积核为 3 x 3,所以我们取得区块为 3 x 3——然后对图像区块和卷积核的每对相同位置的元素执行乘法后求和(即 element-wise 乘法,是两个相同大小的矩阵的“点乘”)。乘积的和会产生特征图谱中的一个像素。待特征图谱中的一个像素计算完毕后,图像区块提取器的中心会移动一个像素,对下个区块执行相同的操作,重复这个计算。直到按照这种方式计算出特征图谱中所有像素后计算才会停止。这个流程可以用如下的 GIF 演示:
上图为获得特征图谱中一个像素的卷积操作:RAM 表示输入图像,红色区域表示选取的图像区块,然后将其和卷积核相乘,得到的乘积和变为特征图谱(Buffer RAM)中的一个像素。
你可能注意到这里还有个正则化过程,以卷积核大小 9 作为正则化因子 m 将输出值进行正则化处理,这是为了保证图谱的整体亮度和特征图谱保持一致。
为何图像的卷积在机器学习中如此有用?
在机器学习图像处理中,图像可能含有很多对我们无用的噪声数据。比如有个机器学习项目,基于深度编码器的搜索引擎:上传一幅时尚服饰的图片,编码器自动找出款式类似的服饰。
集智此前也分享过一个类似项目:
景略集智:技术宅如何进化为女装大佬zhuanlan.zhihu.com
如果你只想区分衣服的样式,那么衣服的颜色就没那么重要了,像商标之类的细节更不重要。最重要的是衣服的外形。一般而言,女式衬衫的形状与衬衣、夹克和裤子的外观很不一样。假如我们的模型能过滤掉这些无用的噪声数据,那么模型就不会受到颜色、商标相关的数据信息的影响。而我们通过卷积就能轻松实现这种操作。
项目作者对数据进行了预处理,应用了一个 Sobel 边缘检测器(和上面的卷积核相似)来过滤图像中除了边缘外的所有信息——这也是为何卷积应用常被称作滤波(filtering)、卷积核常被称为滤波器(filter)的原因。边缘检测器生成的特征图谱对区分衣服类型作用很大,因为只有相关的外形信息被保留下来。
模型的输入和输出:左上图为搜索请求,其它图像为模型的输出结果。你可以看到模型真的只关注了衣服外形,而非颜色。
我们可以再深入一步:模型中有很多不同的卷积核,能够生成很多不同的特征图谱,比如锐化图像(细节更多),或模糊图像(细节更少),每个特征图谱都能帮算法更好的完成任务。
这里所用的“选取输入——转换输入——将转换后的输入喂给算法”就被叫做特征工程。特征工程非常困难,很少有人能熟练地在多个领域应用特征工程。它之所以很难是因为每种数据每种问题中,它的有用特征是不同的,非常依赖个人经验。
所以特征工程对新手来讲特别困难。不过对图像而言,是否能够做到用卷积核自动找出某个任务中最适合的特征?
估计你也猜到了,我们用的卷积神经网络就是干这个的。和前面使用固定大小的卷积核不同,我们会给卷积神经网络中的卷积核赋予参数,参数会在数据上得到训练。随着卷积神经网络的训练,卷积核为了得到有用信息,在图像或特征图谱上的滤波工作会越来越好。这个过程都是自动完成,我们只需在新数据上训练自动找出新的滤波器就行了,这也是为何卷积神经网络在图像处理中如此强大的原因。
参考资料:
http://timdettmers.com/2015/03/26/convolution-deep-learning/
http://weixin.qq.com/r/80QiOi3EDnBxrWlZ9xHh (二维码自动识别)
3.傅里叶变换、卷积、滤波三者之间的关系
卷积
卷积的概念我就不多说了,已有大把平庸的博文给大家做铺垫了。这里我只给大家提一个最最最核心的概念(也是这么多年过去了,我对信号系统留下的最最最深刻的概念)
时域卷积=频域相乘
重要的概念说三遍
时域卷积=频域相乘
时域卷积=频域相乘
这个概念的背后是一个严谨的推导过程,但这里我们略过(有兴趣的读者一定不要错过这个推导,可以阅读参考资料[1]),这里给大家通俗解释一下,假设两个时域信号f1和f2『卷积』的结果是f3,则f3的频谱,是f1的频谱函数和f2的频谱函数,对应频率『相乘』的结果
小小地拓展一下,与本文无关 这种频域相乘的特性可以用于快速求一些特定函数的积分,因为『卷积』的本质是积分,而很多特定函数存在傅里叶变换和反变换,所以与其直接求解积分函数,不如把他们变换到频域,直接进行频谱函数『相乘』,然后再反变换回来,就得到积分结果了
滤波器
滤波器这个名词想必大家也不陌生,比如带有『降噪』功能的麦克风,说白了就是把高频的噪音信号给过滤掉。更专业一点,滤波器是能过滤某些特定频段,留下需要信号的部件,比如低通滤波器(只留下低频分量)、高通滤波器(只留下高频分量)、带通滤波器(只留下特定范围内的分量)。这里就不展开讲了,免得大家回忆起那些年被『电子电路』『信号系统』等专业课所支配的恐惧。
那滤波跟卷积的有什么关系么?别忘了我们刚刚特别强调的概念
时域卷积=频域相乘
假设时域信号f1和f2做卷积,从f1的角度看,它的频谱函数要跟f2对应的频谱函数相乘,而如果f1的某些频率分量,在f2上是没有的,那么相乘之后的结果是0,所以得到的f3信号,在这些频率上值为0,于是对f1而言,f2把它的某些分量『过滤』掉了,所以f2是『滤波器』,f1是原始信号,f3是过滤之后的信号。
一个理想的低通滤波器如下所示
它的横坐标是频率,幅值为1,这是典型的『低通滤波器』,如果有信号跟它做卷积,那这个信号只会留下在0附近的低频信号,其他高频分量都被过滤掉了。
更形象一点,我们再回顾下刚刚的方波信号(注意,这里的方波信号横坐标是时间t,不是上面的低通滤波器)
它是由不同频率、相位、幅度的正弦信号组成。如果我们现在通过某种『低通滤波器』,过滤掉一些高频的正弦信号,则这个方波信号将变成下面的形状
我们发现,这个方形信号没那么『方』了,两边尖锐的『棱角』变缓和了,也没有棱角附近小幅度高频振动的波形了。我们继续加大滤波力度,将得到下面结果
我们可以看到,方形波的『棱角』基本被磨平了。所以
波形里的『棱角』其实是一种突变信号,它里面包含了很多高频分量
上面这个发现非常重要,将有助于我们后面理解图像的『卷积』和『滤波』。
二维空间
虽然我们一直在强调『时间信号』,但不知大家注意到没有,其实这里的时间t,完全可以换成其他符号比如x,从而所谓的时间信号f(t),可以写成f(x),进而,图像可以看成一个离散的二维函数f(x,y),x 和 y 决定了图像的像素点,f是像素点在该处的取值。更形象地理解,图像就仿佛是一个『水池』,像素点就是『水分子』,像素点的取值大小,从视觉上看代表图像亮度的强弱,而类比到水池里,就是不同位置水分子的运动幅度,在水池里泛起涟漪。
进而,我们很自然地想到,一维函数的『傅里叶变换』,能否扩展到二维呢?
答案是肯定的。不过二维空间的傅里叶变换公式我们就不贴出来了,大家有兴趣可以详细阅读参考资料[3]。一维函数f(x)的频谱函数F(w),是一维信号的不同频率分量,而二维函数f(x,y)的频谱函数,是一个二维函数F(w,v),也反应了二维函数的频率特性(不过理解起来不那么直观,这里略过,有兴趣的同学请阅读参考资料[2])。这里我们直接结合前面说的『滤波器』来理解卷积过程
卷积核本质上是一个二维函数,有对应的频谱函数,因而可以看成某种『滤波器』
下面是几种常见卷积核的频谱图像(摘自参考资料[4])
这是一个低通滤波器,频率接近原点附近的幅值很大(频率低的通过),越往两边越小(频率高的过滤)。下面这个高通滤波器恰恰相反
滤波器的概念有了,那么问题来了,我们该如何理解『图像卷积』和『滤波』的关系呢?
回顾下我们上节的发现——『波形里的「棱角」其实是一种突变信号,它里面包含了很多高频分量』。我们沿用上面『水池』的类比,图像像素值变化陡峭的地方,反映在图像上,就是那块区域明暗变化明显,而类比到『水池』里,就是水波在该区域快速振动,『棱角』分明。所以
当我们将图像跟『高通滤波器』做卷积时,明暗变化会被保留,而缓和的变化会被过滤
反映到图像上,就是『锐化』效果,即图像的边缘被加强,大色块的背景被过滤。同理,跟低通滤波器做卷积,效果相反。我们看看直观的效果(摘自参考资料[3])
当我们把图像跟多种卷积核作用时,就能得到不同频段的信号,这也就是卷积神经网络中,『卷积层』的本质作用。
至此,我们完美阐释了开篇提到的结论
图像卷积的本质,是提取图像不同『频段』的特征
参考资料
- <信号与系统> 郑君里 等
- <数字信号处理> 奥本海默
- http://www.robots.ox.ac.uk/~az/lectures/ia/lect2.pdf
- 10句话读懂图像频域滤波--不能不知道的信号与系统基本理论 - iracer的博客 - CSDN博客