何为卷积?
数学中的卷积定义:
称
(
f
∗
g
)
(
n
)
(f*g)(n)
(f∗g)(n)为
f
,
g
f,g
f,g的卷积;
其连续的定义为:
(
f
∗
g
)
(
n
)
=
∫
−
∞
∞
f
(
τ
)
g
(
n
−
τ
)
d
τ
(f*g)(n) = \int_{-\infty}^{\infty}f(\tau)g(n-\tau)d\tau
(f∗g)(n)=∫−∞∞f(τ)g(n−τ)dτ
其离散的定义为:
(
f
∗
g
)
(
n
)
=
∑
τ
=
−
∞
∞
f
(
τ
)
g
(
n
−
τ
)
(f*g)(n) = \sum_{\tau =-\infty}^{\infty}f(\tau)g(n-\tau)
(f∗g)(n)=τ=−∞∑∞f(τ)g(n−τ)
那么如何理解这两个例子,首先从离散的卷积定义说起:
假设随意抛掷两枚骰子,求:
两枚骰子点数相加等于4的概率?
假设骰子的质地均不同,那么两个骰子点数的概率分布也将不一致,假设
f
f
f为第一枚骰子的概率分布,
g
g
g为第二枚骰子的概率分布; 那么
那么骰子点数相加为4的概率为:
f
(
1
)
g
(
3
)
+
f
(
2
)
g
(
2
)
+
f
(
3
)
g
(
1
)
f(1)g(3)+f(2)g(2)+f(3)g(1)
f(1)g(3)+f(2)g(2)+f(3)g(1)
按照卷积的定义即:
(
f
∗
g
)
(
4
)
=
∑
m
=
1
4
f
(
m
)
g
(
4
−
m
)
(f*g)(4) = \sum_{m=1}^{4}f(m)g(4-m)
(f∗g)(4)=m=1∑4f(m)g(4−m)
再看一个例子:
假设从一定高度让一个球做自由落体,且假设球在落下后只有一个维度的运动,在球静止后再在该位置上方以不同的高度让球落下,求两次落球,球的运动距离为c的概率:
不同的高度落球,球在地面滚动距离的分布也不同,假设第一次落球,球滚动距离为a的概率为
f
(
a
)
f(a)
f(a),第二次落球,球滚动的距离为b的概率为给
g
(
b
)
g(b)
g(b),且
c
=
a
+
b
c=a+b
c=a+b,那么两次落球,球在地面滚动的总距离为c的概率为
f
(
a
)
g
(
b
)
f(a)g(b)
f(a)g(b)
假设现在需要求c=3时的概率,那么如果第一次落球球滚动距离a为2,那么b=1,即$ f(2)g(1)$
同理,a=0时,b=3; a=3时,b=0; a=1时,b=1;
那么
P
{
c
=
3
}
=
.
.
.
f
(
0
)
⋅
g
(
3
)
+
f
(
1
)
⋅
g
(
2
)
+
f
(
2
)
⋅
g
(
1
)
.
.
.
P\{c=3\} =... f(0)⋅g(3) + f(1)⋅g(2) + f(2)⋅g(1) ...
P{c=3}=...f(0)⋅g(3)+f(1)⋅g(2)+f(2)⋅g(1)...
由此得到更一般化的结论;
(
f
∗
g
)
(
c
)
=
∑
a
+
b
=
c
f
(
a
)
g
(
b
)
(f*g)(c) = \sum_{a+b=c}f(a)g(b)
(f∗g)(c)=a+b=c∑f(a)g(b)
又有
(
f
∗
g
)
(
c
)
=
∑
a
f
(
a
)
g
(
c
−
a
)
(f*g)(c) = \sum_{a}f(a)g(c-a)
(f∗g)(c)=a∑f(a)g(c−a)
说的更具体些就是,第一次落球球在地面滚动距离为a概率是
f
(
a
)
f(a)
f(a),在第一次落球后球滚动距离为a的情况下,第二次落球球滚动距离为c-a的概率为
g
(
c
−
a
)
g(c-a)
g(c−a)
对上述表述做下处理让我们更好的理解卷积,
首先,假设一个球从它开始的地方落下一定距离x的概率是
f
(
x
)
f(x)
f(x)。 然后,它从它落地后到停止的位置开始距离x的概率是
f
(
−
x
)
f(-x)
f(−x)。
好了,那我们再来看,如果已经知道两次落球后球滚动的总距离是c,那么第一次落球距离为a的概率是多少呢:
即为
g
(
−
(
a
−
c
)
)
=
g
(
c
−
a
)
g(-(a-c)) = g(c-a)
g(−(a−c))=g(c−a)
由此可以有如下的图:
计算出在c范围内所有a的取值的和(即棕球位置)既可以得出
P
{
c
}
P\{c\}
P{c},
同时,通过移动上图的下半部分(即g分布)即可得到其他的c的概率值
以上是一维度的卷积,那么对于高维度的卷积呢
同样以落球为例,这次不把球落地后滚动的轨迹限定为只有一个维度,而假设球落地后在一个平面内滚动,
同样,也有公式
(
f
∗
g
)
(
c
)
=
∑
a
+
b
=
c
f
(
a
)
g
(
b
)
(f*g)(c) = \sum_{a+b=c}f(a)g(b)
(f∗g)(c)=a+b=c∑f(a)g(b)
不过此时的
a
⃗
,
b
⃗
,
c
⃗
\vec{a},\vec{b},\vec{c}
a,b,c均为向量
则有上述公式的变体:
(
f
∗
g
)
(
c
1
,
c
2
)
=
∑
a
1
+
b
1
=
c
1
,
a
2
+
b
2
=
c
2
f
(
a
1
,
a
2
)
g
(
b
1
,
b
2
)
(f*g)(c_1,c_2) = \sum_{a_1+b_1=c_1,a_2+b_2=c_2}f(a_1,a_2)g(b_1,b_2)
(f∗g)(c1,c2)=a1+b1=c1,a2+b2=c2∑f(a1,a2)g(b1,b2)
或者
(
f
∗
g
)
(
c
1
,
c
2
)
=
∑
a
1
,
a
2
f
(
a
1
,
a
2
)
g
(
c
1
−
a
1
,
c
2
−
a
2
)
(f*g)(c_1,c_2) = \sum_{a_1,a_2}f(a_1,a_2)g(c_1-a_1,c_2-a_2)
(f∗g)(c1,c2)=a1,a2∑f(a1,a2)g(c1−a1,c2−a2)
就像一维卷积一样,我们可以将二维卷积视为在一个面在另一个上面滑动一个函数
这种情况的一个常见应用是图像处理。 我们可以将图像视为二维函数。 许多重要的图像变换都是卷积,在这些卷积中,将图像函数与称为“内核kerel”(过滤器)的非常小的本地函数进行卷积。
内核滑动到图像的每个位置,并计算一个新像素作为浮动像素的加权和。
我们可以通过一个元素值均为
1
9
\frac1{9}
91的3x3维矩阵与图像函数卷积以模糊图像
我们还可以通过在两个相邻像素上取值-1和1来检测边缘,并在其他任何地方取零。 也就是说,我们减去两个相邻的像素。 当并排像素相似时,这给我们大约为零。 然而,在边缘上,相邻像素在垂直于边缘的方向上非常不同。
参考:
colah’s blog Understanding Convolutions
如何通俗易懂理解卷积