引言
卷积,高数上的惊鸿一瞥,深度学习中熟悉的陌生人,这次终于决定来好好了解你,希望今后咱们的感情可以一直牢固…
本质
卷积描述了三个函数之间的关系,这里设为
f
,
g
,
w
f, g, w
f,g,w,表示的是函数
g
g
g作用于函数
f
f
f时产生的结果
w
w
w,对于
w
w
w函数中的每一个变量
x
x
x,其值不仅与在
x
x
x上
g
g
g对
f
f
f的作用有关,还与
x
x
x的前后时刻相关,因此要汇总这样一个影响,就可以利用加权求和(离散变量)/积分(连续变量)的手段,我们称这种情况下的加权求和/积分为卷积,表达式为:
w
(
x
)
=
∑
τ
=
−
∞
∞
f
(
τ
)
g
(
x
−
τ
)
w(x) = \sum_{\tau=-\infty}^{\infty}f(\tau)g(x-\tau)
w(x)=∑τ=−∞∞f(τ)g(x−τ)——离散变量
w
(
x
)
=
∫
−
∞
∞
f
(
τ
)
g
(
x
−
τ
)
d
τ
w(x) = \int_{-\infty}^{\infty}f(\tau)g(x-\tau)d\tau
w(x)=∫−∞∞f(τ)g(x−τ)dτ——连续变量
应用
从数学上讲,卷积就是一种运算。
某种运算,能被定义出来,至少有以下特征:
1.首先是抽象的、符号化的
2.其次,在生活、科研中,有着广泛的作用
——马同学
信号与系统中,
f
f
f是输入信号,
g
g
g是单位相应,我们想获得输出信号
w
w
w,那么就可以应用卷积。其中,对于
t
t
t时刻的输出来说,不仅
t
t
t时刻的输入会带来影响,
t
t
t时刻之前和之后的信号都会有影响,但同时信号也是有衰减的,
t
t
t时刻输入的信号
t
+
1
t+1
t+1时刻的影响肯定要比对
t
t
t时刻的影响要弱(这句话是猜的),这种影响我们用函数
g
g
g来描述,因此
t
t
t时刻的输出就可以写为:
w
(
t
)
=
∑
τ
=
−
∞
∞
f
(
τ
)
g
(
t
−
τ
)
w(t) = \sum_{\tau=-\infty}^{\infty}f(\tau)g(t-\tau)
w(t)=∑τ=−∞∞f(τ)g(t−τ)
图像处理中,我们获得一幅噪声较大的图像
f
f
f,希望能通过一种平滑的方式
g
g
g得到去除噪声后的图像
w
w
w,同样可以应用卷积。对于输入图像中的某个像素点
(
x
,
y
)
(x, y)
(x,y),平滑他的方式应该由它周围的像素点共同作用,那么每个像素点到底与它周围多大范围内的像素点建立联系,就是由卷积核
g
g
g的大小来决定的,这里假设为
2
∗
2
2*2
2∗2;同时,这种平滑对于图像中不同的区域应该具有相同的作用(空间不变性),即图像中的所有区域共享一组权重(函数
g
g
g),那么卷积表达式:
w
(
x
,
y
)
=
∑
k
=
0
2
∑
h
=
0
2
f
(
h
,
k
)
g
(
h
−
x
,
y
−
k
)
w(x, y) = \sum_{k=0}^{2}\sum_{h=0}^{2}f(h, k)g(h-x, y-k)
w(x,y)=∑k=02∑h=02f(h,k)g(h−x,y−k)
(由于比较了解cv这个领域,所以具体化了这个问题,表达式也是更具体的)
反卷积
卷积构建的三个函数 f , g , w f, g, w f,g,w之间的关系,其实是一种多( f f f)对一( w w w)的映射,但在实际应用中,我们也会有对一对多的需求,比如上采样(图像生成任何和语义分割任务的最后阶段),这时就可以应用利用反卷积运算
可以简单推理知,多对一(卷积)和一对多(反卷积)是一对逆运算,直接获得卷积的逆运算不容易,我们可以将卷积操作转化为我们较为熟悉的矩阵运算。我们知道,卷积运算中,卷积核是平移重复使用的,因此通过重复卷积核,就能得到卷积矩阵。那么卷积矩阵的维度和数值如何确定呢?
设输入图像为
X
X
X(
4
∗
4
4*4
4∗4),卷积核为
C
C
C(
3
∗
3
3*3
3∗3),要得到输出图像为
Y
Y
Y(
2
∗
2
2*2
2∗2)(假设步长为1),那么我们可以变化
X
X
X和
Y
Y
Y的维度,分别为
16
∗
1
16*1
16∗1和
4
∗
1
4*1
4∗1,那么卷积操作就是:
Y
=
C
X
Y=CX
Y=CX,则卷积矩阵
C
C
C的维度应该是
4
∗
16
4*16
4∗16,那么对应变换应该为:
也就是说,利用卷积核的重复和
0
0
0的填充,我们就可以获得卷积矩阵,
0
0
0的填充规律是根据
X
X
X和
Y
Y
Y决定的。
现在我们的需求变成,已知输出图像 Y Y Y,要求输入图像 X X X,那么一种做法就是求图上的逆运算: X = C − 1 Y X=C^{-1}Y X=C−1Y,然而不是所有矩阵 C C C都存在逆矩阵,所以我们退而求其次,不要求反卷积的运算可以还原 X X X的值,只还原 X X X的大小(因为在深度学习中,我们可以通过迭代调整参数,来尽可能还原 X X X的值),那么反卷积就可以定义为: X = C T Y X=C^{T}Y X=CTY