本文主要为下面两篇篇文章加自己的理解感悟总结而来
1.知乎高赞回答如何通俗易懂地解释卷积?
2.知乎高赞回答卷积为什么叫「卷」积?
预备知识
1.向量运算
- 点乘(a * b)
向量的点乘,也叫向量的内积、数量积,点积。对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操 作,点乘的结果是一个标量。
- 叉乘(a ∧ b)
两个向量的叉乘,又叫向量积、外积、叉积。叉乘的运算结果是一个向量。并且两个向量的叉积与这两个向量组成的坐标平面垂直(即法向量)。
注:本文用不到叉积,这里写出来只是为了帮助辨析概念
2.张量
张量是一种表示物理量的方式。张量的阶数可以简单的理解为其基向量的维度。例如标量没有基向量,所以它是0阶张量,向量的基向量为一维,所以它为1阶张量。以此类推。
具体可以参考此篇文章:怎么通俗地理解张量?
卷积的定义及其理解
我们称 (f*g)(n) 为 f,g 的卷积
其连续的定义为:
其离散的定义为:
这两个式子有一个共同的特征:
我们令 x=t ,y=n-t ,那么 x+y=n 就是下面这些直线:
将以上坐标系看作一个平面。将该平面升高一个维度,得到下图
上面保存着f和g在区间[a,b]上的张量积,即U(x,y)=f(x)g(y)。则直线x+y=n上对应点的张量积的积分就是(f*g)(n)对应的卷积值。本例对应的计算公式如下
为什么叫“卷积”
接上例,把平面一角卷起来
将整个平面卷起来后,便降维到了一条直线,即变成了一个一维的函数,而且直线上每点的函数值等于卷起来后重合的点函数值之和。
再将平面摊开
可以看出,被画了线的地方,正好就是x+y为定值的一条直线,所以卷起来后那点的函数值正好为这条直线上函数值的积分,也即等于卷积值。这便是“卷积”的由来。
卷积值的计算
根据定义,对上图的两个矩阵进行卷积,计算过程如下动图所示
写成卷积公式就是:
进行卷积时为什么把算子旋转180°
上面的式子用代码实现起来是有点复杂的,如果只是矩阵对应位置的数值相乘就会方便很多!那有没有什么办法做到这一点呢?答案是有,当把一个矩阵旋转180°后,两个矩阵对应位置乘积的和就等于根据定义计算得到的乘积和。所以为了方便计算,人们在进行卷积时往往把算子进行旋转,然后直接计算对应位置的乘积和。
卷积过程概览
注意:上面的卷积核是经过180°旋转后的,所以才能以对应位置乘积的和做为卷积值