#前言
小林最初接触卷积这一概念是在学习图像的边缘化检测,对于这一抽象概念诱发出浓厚兴趣,决定深入探索,希望通过对于卷积概念的学习,提升自己的思维活跃性和发散性及对于抽象事物的理解概括能力,并且能将该知识的学习方法引申到其他方面。本文仅作为作者学习大佬思绪的学习笔记,供大家参考,如果想要更加生动的了解,可以移步b站大学,在文章末尾出也给大家提供了素材的出处,可直接食用。
#第一部分:
#走入卷积
啥是卷积?这里我们先直接上官方解释:卷积是一种在数学、工程和物理学等领域中常见的数学运算。在信号处理、图像处理、神经网络等领域中经常会涉及到卷积运算。在信号处理中,卷积可以用来计算两个函数之间的重叠积分,可以用来衡量信号与系统之间的关系,用于信号的滤波、平滑、特征提取等操作。在图像处理中,卷积可以用来进行图像的模糊、边缘检测、锐化等各种滤波操作。在神经网络中,卷积神经网络(CNN)使用卷积层来提取特征,通过将卷积核与输入数据进行卷积操作来实现特征的提取和组合。在数学中,卷积可以被定义为两个函数之间的积分,或者是两个离散序列之间的求和。
看完上述的文字,我相信很多小伙伴还是无法理解,下面我将采用大佬的例子为大家较为直观的呈现啥是卷积。
#蜡烛的故事
假设一根蜡烛燃烧需要10分钟,如果我们同时点燃两根相同的蜡烛,需要燃烧多久?如果我们同时点燃十根相同的蜡烛,需要燃烧多久?很多小伙伴会说,这不是废话,肯定还是10分钟。我们尝试将上述的蜡烛进行量化:m蜡=__la
也就是说,在十分钟内,十根蜡烛的质量由10la变为了0la,讲到这里我相信大家都还可以理解。
但如果现在我们将蜡烛分为四组,第一组一根,于0分钟时点燃;第二组四根,于三分钟时点燃;第三组三根,于五分钟时点燃;最后一组两根,于九分钟时点燃,那么问题来了:七分钟时十根蜡烛的质量还剩余多少?其实如果要解决这个问题,最好的办法就是拍摄一个视频,想要知道何时十根蜡烛的剩余质量,只需要将视频进度调节到该时刻即可。但是如何量化?
回到故事的开头,此时我们假设一共有t根蜡烛,于n时刻点燃,那么如果我们想要知道这t根蜡烛在在七分钟时还剩余多少质量,不难得出剩余的质量=t*(7-n)la,那如果我们将蜡烛数量设为函数f(t),燃烧时间7-t,单个蜡烛燃烧的剩余质量为函数g(7-t),我们很自然的可以得出,在七分钟时剩余蜡烛的总质量=f(t)*g(7-t)。现在我们再将该公式推广到多组蜡烛于不同时刻点燃,在7分钟时剩余的质量,我们是不是只需要对每一组蜡烛进行求和即可,即f(t)*g(7-t),最后我们再将7分钟推广至m分钟,此时剩余的质量公式就变为这样:
f(t)*g(m-t)
到这里,我们自然而然的推出来卷积的公式:
也许我们可以把这个公式升级一下,将求和转变为求积分,那么公式就变成了:
那么回顾一下刚刚我们的做法,本质上就是一个延迟,倍率,再叠加的过程
到这里,相信大家还有一个疑惑,不是卷积吗?你这样讲到底卷在哪里?为进一步直观呈现,我们进入下一个例子。
#红蓝房间:
我们回顾一下刚刚得出的式子:f(t)*g(m-t)。我们假设了某个时刻为t,那么-t是不是可以理解为逆转时间,如果你明白了这一点,那么我们接下来引出例子,希望你可以理解卷积是如何算的:
这是一个红色房间,在这里时间是正向的,通过黑色闸门,我们会来到蓝色房间。
这里是蓝色房间,这里的时间是逆向的,黑色闸门连接红色房间,而白色闸门则连接红色大厅。
这里是红色大厅,时间也是正向的,大厅的两侧是窗户,可以看到两侧房间中发生的事情。现在我们将刚刚的两个函数以列表的形式展开,就像这样:
每个房间会各自以时间顺序播放放两个函数的值(红房间为f,蓝房间为g),而我们要做的就是先后进入两个房间,将两个函数出现的值进行誊抄,最后我们做的就是来到红色大厅,将两个房间出现的函数值同时抄写下来进行组合
最终我们可以得到这样的组合:
我们计算出最终答案:7.1,这个就是在7分钟处卷积的值。如果我们将刚刚的行动动线直观的呈现出来,大体就是这样的:
虽然说不能是严格意义上的卷,但好歹也是折起来了。但是来自百度的官方解释,卷积也叫褶积,如果我们将蓝色房间与红色大厅互换位置,那么行动动线将变为折线,也就符合了褶积的命名。
#第二部分:数学量化
相信很多人在看完上面红蓝房间的例子后,还是无法理解,卷积为什么是那么计算的,那么接下来我会以数学的思考角度对其进行展开。
假定现在给你两个数组,让你组成一个新的数组,你会如何做?大概率你会采取以下的方法:无外乎就是相加或者相乘
m = [1,2,3]
n = [4,5,6]
new = m+n = [5,7,9]
或者:
m = [1,2,3]
n = [4,5,6]
new = m*n = [4,10,18]
但是还有一种全新的方法就是卷积,基于已经在红蓝房间的例子中展示了如何计算卷积,这里我先展示一下卷积的计算过程:
m = [1,2,3]
n = [4,5,6]
n‘ = [6,5,4] 将数组n进行倒置
new = m*n‘ = 1*6+2*5+3*4 = 6+10+12 = 28
如何理解?相信大家都投过骰子,投掷两枚骰子一共有36种可能,有10种点数和。
如何计算各种点数和的概率,只要细心观察我们不难发现,每一条对角线上的点数和都相等,只要我们数一数对角线上有格,只需要用格数/36就可以得出该点数和被投掷出的概率。
那么有没有其他的呈现方式呢?我们将投掷骰子可能出现的情况排成一行(点数由一到六)。因为我们需要投掷两枚骰子,所以我们排出两行可能性,然后我们再将第二排骰子翻转(点数由六到一),与第一排对其,这是我们发现,上下两排每一种组合的点数都是7。
我们将第二排的骰子的最后一个与第一排骰子的第一个对齐,再依次向右移动,像下图这样:
是不是会惊奇的发现,每当上下骰子对齐时,每一列的点数和都是相等的,而对齐的组数,恰好就是该点数和可能出现的情况。
以上我们所讨论的前提就是,骰子点数被投掷出的概率是相等的,但是如果我们假设骰子点数被投掷出的概率不同,像这样:
那我们再计算某个点数和被投掷出的概率是,就应该是各种组合概率之积的加和。说到这里你是不是有点明白卷积到底是个啥以及卷积该如何计算了。
#第三部分:实际应用--图像处理
首先我们需要引入一个例子:滑动平均
我们将上方的数组与一个数组和为1的数组经过卷积处理后,我们可以发现,我们得到的新数组是上方数组的平滑版本,从图上也可以很直观的看出。当数组和为1的数组完全进入上方数组的范围后我们不难发现,每次都是将上方数组各个数值乘以0.5后相加得到的结果,自然也就缩小了各个数值的差距,也就实现了平滑处理。
接下来请看一下下面这个图像处理过程:
如果我们进行放大可以看到这样:
右侧每一个像素格的得出都是由左侧(即放大后的九宫格)每一个像素值乘以1/9再加和后得到的结果,但是我们需要注意,卷积是由纯数学语境下引申出的概念,在使用时必须严格按照其计算方式,即倒置后再相乘求和,但是由于这里我们所使用的是一个数值相等的九宫格,故倒置后与倒置前无异。此时我们可以说右侧的马里奥是由左侧马里奥与一个3*3的数组经过卷积计算后的结果,从而实现了图像的虚化
当然我们也可以使用数值不同的数组来进行卷积计算,此时右边的像素值会由左侧数组中占比较大的数值决定。这样的处理方式也有其自己的名称:高斯模糊。
可能上述的还是不够直观,那么我们可以再举个例子:
与上述的滑动平均一样,这里的九宫格的数组的和也是1,我们将左侧图与其进行卷积运算。由于我们选取数组的特殊性,可以对左侧的图片进行虚化并且突出边缘,也就是所谓的边缘化处理。
当计算至边缘时,由于黑色的像素值为零,而白色的像素值为一,当九宫格所涵盖的色块都想同时,像素值为零,也就是黑色。而我们这里规定,当卷积结果为正时,输出的像素颜色为蓝色,当卷积结果为负时,输出的像素颜色为红色,像下面这样,我们就实现了简单的边缘化处理。
#后言
以上是我现阶段的学习结果,有许多地方表述可能不是非常清楚明了,也请大家见谅!
这些也都是最入门的知识,如果大家对卷积感兴趣,还是得多去看看相关资料,将这一抽象知识内化,形成自己的独到理解。
#素材来源
感谢b站大佬的详细讲述,为小白们较为直观的呈现出卷积这一抽象的数学概念
【卷积究竟卷了啥?——17分钟了解什么是卷积-哔哩哔哩】 https://b23.tv/0avieaO
【【官方双语】那么……什么是卷积?-哔哩哔哩】 https://b23.tv/gUkKDl3