“卷积”其实没那么难以理解

机器学习算法与Python实战

共 2074字,需浏览 5分钟

 ·

2022-03-15 20:51

↓↓↓击关注,回复资料,10个G的惊喜

作者:J Pan  来源:知乎
链接:https://zhuanlan.zhihu.com/p/41609577
著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理

狄拉克函数从何而来?卷积是怎么回事?卷积定理又是什么?如果你对卷积公式不甚了解,亦或是想对其有更深的认知,那么本文便是一份优秀的科普材料。

傅里叶变换拉普拉斯变换自(互)相关卷积是线性系统分析里面最重要的四个数学工具,可以毫不夸张的说,自动控制、信号处理等课程几乎所有内容都是这几个公式组合排列的结果。四个公式中的三个已经介绍过了。今天我们就来讨论一下最后一个:卷积公式




一、狄拉克何许人也?





保罗·狄拉克(Paul Adrien Maurice Dirac,1902-1984),出生在瑞士,后移居英国,著名理论物理学家。通过几个场景来认识一下(故事来源于网络,版权归原作者所有)。
镜头一:
1933年狄拉克获诺贝尔物理奖(与薛定谔共享)。当时他私下对学术老前辈卢瑟福(也是诺奖得主)说,对于获诺奖这个事他很苦恼,他不想成为新闻人物,更不想出名,这样会打断他平静的生活,打算拒绝接受这个荣誉。卢瑟福对他说:“如果你这样做,你会更出名。”于是狄拉克同意领奖。

镜头二:
狄拉克在美国威斯康辛大学作报告。期间,有一位听众说 :“您写在黑板右上方的那个方程我看不懂。”狄拉克听后一言不发,让当时的场面相当尴尬。主持人试图打破僵局,说狄拉克教授刚才那个问题您还没回答呢。狄拉克喃喃地回应道:“刚才那个不是一个疑问句,那是一个陈述句啊。”

镜头三:
位于英国伦敦的威斯敏斯特教堂(Westminster Abbey),是英国国王登基和皇室举行婚礼的地方。这里长眠着许多伟大人物,如牛顿、达尔文、狄更斯、邱吉尔、弥尔顿。牛顿墓旁放置有一块石碑,上面镌刻着保罗• 狄拉克的名字以及他那优美的方程式。
狄拉克最早是从事相对论动力学的研究,1925年海森堡访问剑桥大学,狄拉克深受影响,把精力转向量子力学的研究。1928年他把相对论引进了量子力学,建立了相对论形式的薛定谔方程,也就是著名的狄拉克方程。1930年狄拉克出版了他的量子力学著作著作《量子力学原理》,这是物理史上重要的里程碑,至今仍是量子力学的经典教材。
在他的教材里面,他提出了一个怪异的函数,一般被叫做狄拉克  函数:
并且满足
狄拉克δ函数在概念上,它是这么一个“函数”:在除了零以外的点函数值都等于零,而其在整个定义域上的积分等于1。严格来说δ函数不能算是一个函数,因为满足以上条件的函数是不存在的。但是为什么狄拉克还要这么干呢?
百度百科上对于狄拉克函数有如下描述:
物理学中常常要研究一个物理量在空间或时间中分布的密度,例如质量密度、电荷密度、每单位时间传递的动量(力)等等,但是物理学中又常用到质点、点电荷、瞬时力等抽象模型,他们不是连续分布于空间或时间中,而是集中在空间中的某一点或者时间中的某一瞬时,那么它们的密度应该如何表示呢?——δ函数!
还记得我们之前说过得赫维赛德函数吗?就是简化了原始麦克斯韦方程组的那个人?
这个函数的导数就是δ函数哦!δ函数有很多用处,本身蕴藏的数学和物理含义很值得去挖掘,今天我们就先说一下它在工程中一般干什么用。
我们先研究一个简单的函数:一个矩形信号宽度是  ,高度是  ,总的面积是1。这个矩形信号可以变形——可胖可瘦,但是要保证面积不变。

这个函数的傅里叶变换长什么样呢?也很简单:

前面说了,这个信号可胖可瘦,那胖瘦的时候有什么规律呢?
clc; clear all; close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=10000;                                     % sampling numbers
Tau0=1;                                      % define initial Tau
for i=1:100
    Tau=Tau0/i
    TimeRange=linspace(-10*Tau,10*Tau,N);        % display time range
    FreqRange=linspace(-200*pi/i,200*pi/i,N);    % display frequency range
    Half_Tau=Tau/2;                              % -0.5 Tao ==> 0.5 Tao
    RECT=1/Tau*double(abs(TimeRange)% one rectangular pulse

    SINC=sinc(FreqRange*Tau*pi);                 % sinc pulse, Xtra
    
    subplot(2,1,1);
    plot(TimeRange,RECT,'LineWidth',1.5); grid on;
    xlim([-1 1]); ylim([-0.5 120]);
    xlabel('Time'); ylabel('Amplitude');
    title('Made by J Pan')
    
    subplot(2,1,2);
    plot(FreqRange,SINC,'LineWidth',1.5); grid on; 
    xlim([-200*pi/i 200*pi/i]);ylim([-0.5 1.5]); 
    xlabel('Frequency'); ylabel('Amplitude');
    title('Made by J Pan')
    drawnow;   
end

假设这个信号也有爱美之心,以瘦为荣,天天不吃饭,以至于最后瘦成了一道闪电,比如 ,会出现什么结果呢?——我们发现,当这个信号瘦到一定程度的时候,就变成了狄拉克  函数:

并且满足

它的频谱也变得很简单了,变成了一条直线。
这个结论有什么意思呢?——δ函数包含了所有频率的分量。这个有啥用呢?用处大了去了,这就是一个天然的最理想的试验函数啊!只用一个函数就可以把系统的所有频率分量的响应激发出来,怎么样,带劲不带劲?换句话说,在输入为狄拉克δ函数时,系统的冲激响应包含了系统的所有信息,也就是说系统的理想冲击响应就可以代表系统本身 ——我们用小锤敲一下系统,记录下来响应,就能够得到系统的模型了。




二、卷积是怎么个回事?





终于回归正题,卷积说的是什么?为什么会在线性系统这么广泛的使用?我查阅了大量资料,发现有一个例子说的特别好,引用特别广泛,以至于都不知道原作者是谁了。接下来我们也用这个例子(版权归原作者所有)为基础来延伸和拓展一下。
话说有一个七品县令,喜欢用打板子来惩戒那些市井无赖,而且有个惯例:如果没犯大罪,只打一板,释放回家,以示爱民如子。

有一个无赖,想出人头地却没啥指望,心想:既然扬不了善名,出恶名也成啊。怎么出恶名?炒作呗!怎么炒作?找名人呀!隔现在,注册个微博账号随便找个流量明星就能开撕啊 ——那时候不行,还没有微博一说,他自然想到了他的行政长官——县令。

于是在光天化日之下,无赖站在县衙门前撒了一泡尿,后果是可想而知,这是明目张胆的藐视公堂无视法律啊,自然被请进大堂挨了一板子——这无赖身体也是好,挨了板子后居然昂首挺胸回家了。躺了一天,嘿!身上啥事也没有!无赖在这件事上的决心还很大,第二天如法炮制,全然不顾行政长管的仁慈和衙门的体面,第三天、第四天......每天去县衙门领一个板子回来,还喜气洋洋地,坚持一个月之久!这无赖的名气已经和衙门口的臭气一样,传遍八方了!
县令大人噤着鼻子,呆呆地盯着案子上的惊堂木,拧着眉头思考一个问题:这三十个大板子怎么不好使捏?......想当初,本老爷可是因为奥数加分才金榜题名的,今天要好好建个数学模型,好歹要解决这个问题,挽回一点面子:

——人(系统!)挨板子(冲击!)以后,会有什么表现(输出!)?

——废话,疼呗!

——如何量化呢?

——看疼到啥程度。像这无赖的体格,每天挨一个板子啥事都不会有,连哼一下都不会有,你也看到他那得意洋洋的嘴脸了;如果一次连揍他十个板子,他可能会皱皱眉头,咬咬牙,硬挺着不哼;揍到二十个板子,他会疼得脸部扭曲,象猪似地哼哼;揍到三十个板子,他可能会象驴似地嚎叫,一把鼻涕一把泪地求你饶他一命;揍到四十个板子,他会大小便失禁,勉强哼出声来;揍到五十个板子,他连哼一下都不可能——死啦!

县令双手捧腮,若有所悟,拧紧的眉头渐渐松弛下来:

——呜呼呀!为啥那个无赖连挨了三十天大板却不喊绕命,而一次连续打上三十个大板呀?

—— 呀呼嘿,打一次的时间间隔(Δτ=24小时)太长了,所以那个无赖承受的痛苦程度一天一利索,没有叠加,始终是一个常数;如果缩短打板子的时间间隔(建议Δτ=0.5秒),那他的痛苦程度可就迅速叠加了;等到这无赖挨三十个大板(t=30)时,痛苦程度达到了他能喊叫的极限,会收到最好的惩戒效果,再多打就显示不出您的仁慈了。

——还是不太明白,时间间隔小,为什么痛苦程度会叠加呢?

——这与人(线性时不变系统)对板子(脉冲、输入、激励)的响应有关。什么是响应?人挨一个板子后,疼痛的感觉会在一天(假设的,因人而异)内慢慢消失(衰减),而不可能突然消失。这样一来,只要打板子的时间间隔很小,每一个板子引起的疼痛都来不及完全衰减,都会对最终的痛苦程度有不同的贡献,总的来说:

t个大板子造成的痛苦程度=Σ(第τ个大板子引起的痛苦*衰减系数)
请看下图:
先考虑挨两板时是什么情况:把挨板子时的疼痛响应用  来表示,其中  表示持续时间。当刚挨最新一板子时,响应显然为  即 ,那相隔  之前还有一板子呢?响应是  ,所以挨两板子时总的疼痛定义为每板子的响应乘以持续时间:


实际上两板子不可能完全一样,今天是士兵甲打的,明天是士兵乙,两个力道完全不在一个层级上啊,怎么办?需要修正一下要把激励的大小也考虑进去:

要是碰上一个身强力壮,心情又不好的士兵呢?连续不停地打,这时可怜的无赖只能祈求上帝了:

当  时,有

如果把积分时间扩展到负半轴,

这就是卷积公式,它本质上说系统(人)在连续激励下(挨板子)所的得到的结果(疼)。翻译的学术一点:卷积将是过去所有连续信号经过系统的响应之后得到的在观察那一刻的加权叠加。而现实生活中,我们就是要解大量的这种问题,这也就是为啥卷积这么常见这么重要的原因。




三、卷积定理又是个什么玩意?





前面我说了狄拉克函数,说了卷积,为什么把他们两个放在一起?这可以通过卷积定理来说明。


信号与系统或自动控制研究的内容是输入、输出及系统三者之间的关系。

在第一部分,我们说狄拉克函数(也就是单位脉冲函数)的傅里叶变换横贯在整个频域上,因此可以作为一个理想的测试信号来确定系统的在各个频率上的响应情况,也就是说可以用单位脉冲响应可以完整的表征系统的响应特性。

在第二部分的例子中,打板子可以看成是一种冲击或脉冲信号,系统的响应可以用卷积来计算。


其中,  为激励信号,  为脉冲响应。
这些都是在时域观察的,如果我们切换到频域,会是什么样?假设激励信号的傅里叶变换为  ,脉冲响应  的傅里叶变换为  ,输入 表示输入有哪些分量,系统单位脉冲响应  表示每个分量会有怎样的响应,那两者相乘不就把输入的那些分量筛选出来了?——乘积是不是就代表系统的不同频率下响应?
等等,我们刚才说了个什么事?我们先在时域里面看,认为系统的输出为输入与单位脉冲响应的卷积;然后又切换到频域看,认为系统的输出为输入傅里叶变换与单位脉冲福利变换的乘积。我们看的是同一个事情,为什么结果不同——难道他们是一回事?

你的猜想是对的,这两个东西还真是一回事,这就是卷积定理:函数卷积的傅立叶变换是函数傅立叶变换的乘积。具体分为时域卷积定理和频域卷积定理,时域卷积定理即时域内的卷积对应频域内的乘积;频域卷积定理即频域内的卷积对应时域内的乘积,两者具有对偶关系。


还记得我们以前说过的,时域和频域有某种对称性嘛?时域的乘法与频域卷积或时域卷积与频域乘法是具有对称性的,有了这个工具,我们在处理问题的时候就可以随意转换,哪个域方便就在哪个域计算。
  1. 准备写本书

  2. 麻省理工公开课:微积分

  3. 太骚了,用Excel玩机器学习!

  4. 如何评判一个深度学习框架?

  5. 统计学知识闯关之十问十答

  6. 机器学习理论基础到底有多可靠?

浏览 65
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报