乘法的竖式运算与卷积→卷积的本质

您所在的位置:网站首页 列表法求卷积怎么求 乘法的竖式运算与卷积→卷积的本质

乘法的竖式运算与卷积→卷积的本质

2024-07-04 12:53| 来源: 网络整理| 查看: 265

乘法的竖式运算是非常有效的算法,其原理却让人捉摸不透,很难看出有什么几何意义。在看了《深入浅出通信原理》关于卷积的介绍后,才发现,原来它是一种卷积运算。卷积,对普通人来说是非常陌生的,即使对于学习过积分变换中的卷积定理的人而言,似乎也从未真正理解它的含义,仅仅是记住了公式然后去套用。所以,这篇文章希望通过类比的方式,告诉你卷积不过是竖式运算的一种抽象,在我们很小的时候就掌握了它的计算方法。

首先让我们回顾乘法的竖式运算,如下图所示

先用被乘数乘最右边的数,对应写下来,然后用被乘数乘右起第二个数,像左平移一位后对应写下来,这样直到把乘数的所有位乘一遍,最后把得到的这些数对应加起来,就得到了最终结果。整个计算过程中,我们都是在做平移,乘积,求和的简单步骤,一个复杂的大数乘积问题,就被分解为这样的基础运算,非常高效。

现在,换一个角度来看这个过程,由于数字是十进制的,所以总可以分解为这样的数字多项式,也就是一般的多项式,将未知数取为10。

123=1\times 100+2\times 10+3\times 1

123=1\times 10^2+2\times 10+3\times1

123=(1\times x^2+2\times x+3\times1)_{x=10}

既然当x=10的时候,我们可以这样来计算,x为其他的值的时候能否这样算呢?答案就在下面的图。

多项式的乘法也可以通过竖式运算来求结果,而且同样的简单。移位,乘积,求和。不过,也是有所区别的,就比如结果出现了超过10的数,之前是十进制的,满足关系

x=10\Rightarrow x\times 10=x^2

所以逢10进位,类似的对于其他进制的数,有类似的进位关系:

二进制

x=2\Rightarrow x\times 2=x^2

八进制

x=8\Rightarrow x\times 8=x^2

但是,现在,x是未知的,所以进位关系就不再成立了。于是出现了超过10的数,其实这个数可以任意大,因为x可以任意大。

好的,中间穿插了一些数制的讨论,现在回到正题。经过上面的讨论,我们发现竖式运算可以轻易推广到多项式的情形,那么再贪心一些,能不能将他推广到更一般的情形上呢?我们都知道,多项式是泰勒级数的特例,是有限项的泰勒级数。那么能否推广到泰勒级数的乘积上去呢?当然也是可以的,但是,对于无穷项书写起来就太麻烦了,所以还是选择另一个推广方向。傅里叶多项式是傅里叶级数的有限形式,所以,我们可以试着推广竖式运算到傅里叶多项式。

如图所示,竖式运算同样可以求解傅里叶多项式的乘法,不过,出现了新的变化,傅里叶多项式的基有正有负,所以逐位相乘的时候需要仔细确定他的平移位置,像这里,由于有一次的负基,所以整体向右平移了一位。

于是,竖式运算其实反映了这样的一种多项式乘法的本质,多项式的系数乘法往往被称为卷积,竖式运算就是这种系数乘法的表现形式。

于是,至少在有限情形下,对卷积的理解做了些探索,对于连续的情形,就涉及一些问题,收敛性,基之间的运算。姑且当作一种直观对应吧,

接下来是我尝试使用连续基向量空间模型来理解函数的卷积的内容。关于连续基向量空间模型的解释可以去看我之前写的线性算符和矩阵的四篇文章。

首先任意可测函数都可以视为连续基向量空间中的向量,这个向量空间的基可以取实数集中的任意点,也就是集合\lbrace\delta (x):x\in \mathbb R \rbrace,我们考虑的函数可以记为连续基的线性组合。f(x)=\sum_{x\in\mathbb R} f_x\delta(x)

于是通常的函数乘法,给出的是

f\times g = [\sum_{x\in \mathbb R}f_x\delta (x)]\times [\sum_{y\in \mathbb R}g_y\delta (y)]=\sum_{x\in \mathbb R}f_xg_x\delta (x)

也就是逐点乘积,两个基相同的时候才可以将系数相乘,基的作用可有可无。

而卷积则是

f*g =\sum_{x\in \mathbb R}[f(x)\times g(y-x)]=\sum_{y\in \mathbb R}\lbrace[\sum_{x\in \mathbb R}f_x\delta (x)]\times [\sum_{z\in \mathbb R}g_{z}\delta (y-z)]\rbrace =\sum_{y\in \mathbb R}\sum_{x\in \mathbb R}f_xg_{y-x}\delta(x)

f*g=\sum_{y\in \mathbb R}\sum_{x\in \mathbb R}f_xg_{y-x}\delta(x)=\sum_{x\in \mathbb R}[\sum_{y\in \mathbb R}f_xg_{y-x}]\delta(x)

这就是一种高明的向量运算,利用到了连续基的运算性质\delta(x)\delta(y-x)=\delta(y),这种性质可以类比傅里叶级数中的复指数基e^{ix}e^{i(y-x)}=e^{iy},因为连续基可以视为复指数基的极限情形。

这样看来,卷积是一种更加自然的运算,有着更好的性质,本质上就是有限维向量空间上乘法的一种推广,还是多项式乘法。而函数的乘法则是一种粗糙的运算,丢失了很多向量空间的性质。

这篇文章,有点久了,没有发出来,是因为后面的部分有一些错误,而且感觉并没有找到卷积的本质。

最近在看信号与系统,响应信号的卷积求法,又借助于看广义函数论的一些认识,总算是明白了卷积的本质。

下面就是我的理解,可能需要对测度有一定了解。

广义函数作用于函数,表现为积分的形式,比如狄拉克分布,int[f(x)*δ(x)]dx=f(0),\int f(x)\delta(x)dx=f(0)可以视为对函数f的定义域空间定义了一个测度,仅在原点处质量为1,其他部分均为零,这只是一种形象的描述,这种描述的正式定义还是比较复杂的。

类比考虑广义函数的卷积形式,int[f(x)δ(t-x)]dx,\int f(x)\delta(t-x)dx也就是发生了一些变化,测度还是一样的,但是原点位置却随着参数t的变化而不断变化,于是从点变成了函数。

所以卷积就是一种带参数的广义函数作用,他给出了一种带权值的测量网格,随参数的改变,网格的位置发生变化。

可以考虑卷积神经网络,也就是图像处理中的卷积运算,虽然是离散情形,却给出了本质特征,他就是一个权值网格,比如3*3的卷积模板,就是对这九个像素分别赋予一个权值,然后对初始像素反转后加权求和,而参数就是起到了移动模板的作用,一次移动一个像素,直到计算完所有的像素,就得到了输出,输入一个像素矩阵,卷积后输出一个像素矩阵。

解释:右图是离散卷积模版的权值,对应的像素要乘上相应的倍数,然后相加,左图的圆圈代表卷积模板的中心,参数的作用就是移动这个中心,计算每一个像素的值。

对于信号处理中涉及的连续情形,其实是一样的道理,这里的像素就是冲激信号,任何信号都可以表示为冲激信号的线性组合。这种表示,可以理解为函数空间的连续基。其实也可以这样理解,函数是定义在实数集上的,对于可测函数而言,每一个实数上的取值都是独立的,所以,对每一个实数对应一个冲激信号,就可以将函数变成不可数个冲激信号乘上对应函数值之和,一般可简化为积分。卷积就是利用这样的连续性的模板,进行加权求和,也就是加权积分,其实就是泛函作用,或者说广义函数作用。而参数则是起到移动这个连续性模板的作用,直到计算完所有的实数。就得到了输出,输入一个实函数,输出一个实函数。

解释:右图是连续性卷积模版的权值分布,竖线是连续性卷积模版的中心,参数的作用同样是移动这个中心,计算每一个实数的值。

至此,卷积的本质可以说被完全的揭示出来了。它是一种含参数的泛函作用,也就是说定义域每一点都对应一个泛函,每一个点的输出就是对应泛函与输入函数的作用。

值得注意的是,卷积不仅包括这种泛函作用及参数平移,还有一个翻转的运算,将图像矩阵,或者信号先翻转过来,然后再进行这种运算,这也是他的重要特征。所以理解卷积,首先要知道这种作用,这种作用有正有反,采用原始输入就是正作用,采用翻转后的原始输入就是反作用,卷积就是反作用。

通过卷积模版,也可理解为什么具紧支集的连续函数或可测函数非常重要,因为,这样的函数,往往可以保证卷积积分的收敛,也就是卷积的存在,所以也可是认为是可进行卷积运算的恰当的函数集。预先给出这个假设,就可以毫无顾忌的使用卷积运算了。

这个问题总算是得到了解决,确实不容易,求随机变量函数的概率分布,时域卷积与频域乘积,图像处理的卷积模板,信号处理中响应的卷积算法,积分变换里面的卷积定理,多项式乘积的卷积本质,卷积确实是无处不在,可是,却很难找到一个合理的解释。要么就太过唯象了,试图使用图片来解释这个抽象概念,要么太过理论化了,数学的描述非常正确,却无法给出图像。不过,我感觉,我给出的这个解释还是比较难以理解的。不过,对我而言,却是足够清晰了,将一个运算的大杂烩,拆分成了有明确意义的两步操作,如此简单,却是几年都未曾发觉。只能说世事奇妙,没有如此多的对比与积累,这种本质还是很难发现的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3