小白也能看懂的卷积!

小白也能看懂的卷积!

对于很多朋友们来说,刚接触到卷积这个概念的时候一定都有一点头疼,我也不例外。随着学习的加深,回顾卷积概念的时候我也有了一些新的理解。思索再三还是提笔写下这个小白都能看懂的卷积。提前说明,该教程的讲解都基于离散时间情况。

伤害到底是多少?

 你叫张三,是游戏里的主角,武器是一把菜刀。随着打怪升级,菜刀的攻击属性也越来越高,直到菜刀升到了第五级,菜刀便拥有了新的技能:毒性伤害,可以对对手造成持续性的伤害。不过伤害会随着时间的增加逐渐减少,单位力度造成的伤害随时间的变化如, 暂且叫它 h [ t ] h[t] h[t]

毒性伤害

 每一次出招的伤害和出招的力度有关,力度越大,造成的总伤害也越大。 总伤害 = 力度 × 单位力度伤害 \text{总伤害}=\text{力度}\times \text{单位力度伤害} 总伤害=力度×单位力度伤害
随着技能升级,你,张三,在 30 30 30级的时候学会了一个新连招---------乱披风刀法。这套连招拥有4次攻击,可以表示成,暂且叫它 x [ t ] x[t] x[t]
乱披风刀法攻击组成

可以看到,在使出乱披风刀法连招的第 0 0 0秒,第 1 1 1秒,第 3 3 3秒和第 6 6 6秒都有一次攻击。那么问题来了,在使用毒性菜刀配合乱披风刀法攻击的时候,这一套连击总共能给boss带来多大的伤害呢。

第一个想法:可以把连招中的4次攻击拆开单看,计算每一次单独攻击造成的伤害,然后求和就行。分别来看看4次攻击的伤害是多少,我们说过
总伤害 = 力度 × 单位力度伤害 \text{总伤害}=\text{力度}\times \text{单位力度伤害} 总伤害=力度×单位力度伤害
不过,在这里要注意使时间的变化。比如在第 6 6 6秒时, h [ t ] h[t] h[t]变成了 h [ t − 6 ] h[t-6] h[t6]。四次攻击的伤害可以表示成:
h(t-0)
h(t-1)
h(t-3)
h(t-6)

将四张图叠加到一起,就可以得到乱劈风刀法伤害随时间变化的关系图,如所示。
乱劈风刀法伤害-时间关系

我们将乱劈风刀法伤害-时间关系称为 y [ t ] y[t] y[t],要得到一套乱劈风刀法伤害造成的总伤害,我们只需要在时间尺度上对 y [ t ] y[t] y[t]进行求和得到 ∑ t = − ∞ ∞ y [ t ] \sum_{t=-\infty}^{\infty}y[t] t=y[t]即可。

不知不觉间,在求乱劈风刀法伤害-时间关系 y [ t ] y[t] y[t]的过程中,我们已经完成了一次卷积求和操作。或许你还有所疑问,这怎么就是卷积和了呢,我们来看看 y [ t ] y[t] y[t]的组成:
y [ t ] = x [ 0 ] h [ t − 0 ] + x [ 1 ] h [ t − 1 ] + x [ 3 ] h [ t − 3 ] + x [ 6 ] h [ t − 6 ] y[t] = x[0]h[t-0]+x[1]h[t-1]+x[3]h[t-3]+x[6]h[t-6] y[t]=x[0]h[t0]+x[1]h[t1]+x[3]h[t3]+x[6]h[t6]
如果我们把上式中省略的 x [ t ] = 0 x[t]=0 x[t]=0的部分补上,可以得到
y [ t ] = ∑ k = − ∞ ∞ x [ k ] h [ t − k ] y[t] = \sum_{k=-\infty}^{\infty}x[k]h[t-k] y[t]=k=x[k]h[tk]
这就是我们认知中的卷积和公式,也可以写成简洁形式 y [ t ] = x [ t ] ∗ h [ t ] y[t]=x[t]*h[t] y[t]=x[t]h[t]

在上述叠加的过程中可以看出来, y [ t ] y[t] y[t]当中的每一项,比如第八秒boss收到的伤害 y [ 8 ] y[8] y[8],是由所有 x [ k ] x[k] x[k]在第8秒时的伤害贡献相加的结果的结果。具体来说,在乱劈风刀法第 0 0 0秒的攻击在第 8 8 8秒造成的伤害应该是 x [ 0 ] h [ 8 ] x[0]h[8] x[0]h[8],可以表示成图:
卷积过程1

而乱劈风刀法第 1 1 1秒的攻击在第 8 8 8秒造成的伤害应该是是什么呢?花三秒时间思考一下。没错,不是 x [ 0 ] h [ 8 ] x[0]h[8] x[0]h[8]了,应该是 x [ 1 ] h [ 7 ] x[1]h[7] x[1]h[7]。因为在 x [ 1 ] x[1] x[1]攻击发出之后,再过 7 7 7秒就是第 8 8 8秒了,可以表示成图。
卷积过程2

所以当考虑所有 x [ k ] x[k] x[k]在第8秒时的伤害贡献时,可以得到。
卷积过程正

再次归纳一下,当我们考虑第 n n n秒造成的攻击 y [ n ] y[n] y[n]时,我们考虑每个单次攻击 x [ k ] x[k] x[k]乘以其在 n − k n-k nk造成的单位力度伤害,即 h [ n − k ] h[n-k] h[nk],因为相对于第 k k k秒的攻击 x [ k ] x[k] x[k],在过 n − k n-k nk秒就是第 n n n秒了。这就是从另一个角度理解卷积和公式 y [ t ] = ∑ k = − ∞ ∞ x [ k ] h [ t − k ] y[t] = \sum_{k=-\infty}^{\infty}x[k]h[t-k] y[t]=k=x[k]h[tk]。不过上图怎么看都有点不舒服,连接线全部拧着(上图省略了 x [ k ] = 0 x[k]=0 x[k]=0的连接线)。不如先将 h [ k ] h[k] h[k](暂时将自变量换个名字)翻转一下变成 h [ − k ] h[-k] h[k],这时得到了图形。
卷积过程反

图仍然有点别扭,我们将 h [ − k ] h[-k] h[k]向右做一些平移得到 h [ n − k ] h[n-k] h[nk](不理解为什么是向右平移的同学从 h [ − ( n + k ) ] h[-(n+k)] h[(n+k)]这个角度思考),可以得到图:

平移之后的求和

这也就是我们在上课和国内教材中经常被教的:卷积就是翻转,平移,求和的过程。

想要真正了解卷积的难点,我们应该把目光关注到 h [ k ] h[k] h[k]上,卷积现象的产生是因为 h [ k ] h[k] h[k]在输入消失之后仍然会产生输出,有一种"语音绕梁,三日不绝"的意味。所以我们求某一 t t t时刻的输出的时候,其实需要算上 t t t时刻之前的输入有没有产生"造福后世"的影响,也需要检查一下 t t t时刻之后的输入有没有穿越时空来形成"蝴蝶效应"(这种情况极其罕见)。所以,列举出一些其他关于卷积的例子,我们只需要列举出能够持续对之后时刻产生影响的例子即可。比如想要计算某一 t t t时刻的血糖指数,需要考虑 t t t之前所有时刻消化的食物对 t t t时刻血糖的影响。
持续对之后时刻产生影响的例子即可。比如想要计算某一 t t t时刻的血糖指数,需要考虑 t t t之前所有时刻消化的食物对 t t t时刻血糖的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值