在数学上,卷积定义为
ϕ
(
x
)
=
∫
−
∞
+
∞
f
(
t
)
g
(
x
−
t
)
d
t
\phi(x) = \int_{-\infin}^{+\infin} f(t)g(x-t)dt
ϕ(x)=∫−∞+∞f(t)g(x−t)dt
怎么理解上面的式子呢?
首先,f(t)表示t时刻的输入,g(x-t)表示在t时刻的输入对当前x时刻的影响因子
可以看到g函数的输出是一个时间长度,而不是时刻,也就是说影响因子是跟时间长度相关而不是时刻相关的
所以才会以当前时刻x-t时刻这个时间间隔作为输入
假如现在有一堆石头,一个池子。(知乎上看到的例子,链接忘了)
我们每隔一刻时间往池子里的同一未知扔石头。
石头是我们的输入,即 ( f ( 0 ) , f ( 1 ) , f ( 3 ) , . . . , f ( T ) ) (f(0),f(1),f(3),...,f(T)) (f(0),f(1),f(3),...,f(T))
每一时刻扔出的石头造成池子中的水产生波纹,且对波纹的影响具有持续性,令其为 g ( ) g() g()
前面的信号对后面的信号会造成影响,影响的程度由持续时间决定,例如对于 t t t时刻的输入 f ( t ) f(t) f(t)对 x ( x ≥ t ) x(x\ge t) x(x≥t)时刻的影响即为 g ( x − t ) g(x-t) g(x−t)
我们假设当 x − t ≥ l x-t\ge l x−t≥l时 g ( x − t ) = 0 g(x-t)= 0 g(x−t)=0,也就是说持续时间超过一定长度后影响就可以忽略不记了。
这么一来
在
l
l
l时刻,最终的信号为
f
(
0
)
g
(
l
)
+
f
(
1
)
g
(
l
−
1
)
+
.
.
.
+
f
(
l
)
g
(
0
)
f(0)g(l)+f(1)g(l-1)+...+f(l)g(0)
f(0)g(l)+f(1)g(l−1)+...+f(l)g(0)
在
l
+
1
l+1
l+1时刻,信号为
f
(
1
)
g
(
l
)
+
f
(
2
)
g
(
l
−
1
)
+
.
.
.
+
f
(
l
+
1
)
g
(
0
)
f(1)g(l)+f(2)g(l-1)+...+f(l+1)g(0)
f(1)g(l)+f(2)g(l−1)+...+f(l+1)g(0)
总之,最终的表示卷积式为
ϕ
(
t
)
=
{
f
(
t
−
l
)
g
(
l
)
+
f
(
t
+
1
)
g
(
l
−
1
)
+
.
.
.
+
f
(
t
)
g
(
0
)
if
t
≥
l
f
(
0
)
g
(
t
)
+
f
(
1
)
g
(
t
−
1
)
+
.
.
.
+
f
(
t
)
g
(
0
)
otherwise
\phi(t) =
卷积可以进行填充和设定步长,并且根据不同的填充方式和步长设定,有几类常见的卷积方式
首先,填充这个操作既可以在图片上进行,也可以在卷积核上进行。对图片或序列进行填充又分两种方式。一种是边界零填充,这种方式常常是下面三种情况
窄卷积(valid 卷积)
宽卷积(full卷积)
等宽卷积(same卷积)
前面三种情况中我们可以看到,宽卷积实现了维度的扩充。但我们对维度扩充通常有更加复杂的要求。
低维特征映射到高维特征的卷积操作我们都统称为转置卷积。
所以说,转置卷积不过是边界填充设得大了点,本质上只是为了扩充维度。通过设定合适的填充大小和步长,我们可以任意的扩充到指定的维度(通常小于等于M+K-1)
普通卷积常常用于从图片或序列中提取特征,而转置卷积则用于根据编码生成图片。
比如,DCGAN中的生成网络由转置卷积搭建,判别网络由普通卷积搭建
除边界填充之外的另一种方式是间隔填充,根据设定的间隔大小D,决定每两个像素之间插入D个0,由于通常我们没办法设定小于1的步长,所以这种方式相当于是一种步长小于1的实现方式,我们又称其为微步卷积。
我们可以重新推导一下卷积前后的维度变换公式(保留边界填充)
D
o
=
D
i
+
D
∗
(
D
i
−
1
)
−
D
k
+
2
P
S
+
1
通常微步卷积是为了扩充维度,所以假如我们要用一个大小为3的卷积核,假设边界填充P=1,步长为1,将一个3维的序列扩充到5维,那么有
5
=
3
+
2
∗
D
−
3
+
2
+
1
D
=
1
所以微步卷积也是一种特殊的(步长小于1)的转置卷积
通常在各类深度学习框架中,转置卷积的默认实现就是微步卷积
除了前面提到的对图片或序列的填充之外,也可以对卷积核进行填充。显然,对卷积核进行边界填充是没有意义的,因为总有传统卷积方式可以替代。所以空洞卷积一般是对卷积核进行间隔填充,空洞卷积增大了卷积核的大小,因此增大了感受野,但是没有增加参数。
空洞卷积又名膨胀卷积,填充的间隔大小-1称为扩张率
假设扩张率为D,卷积核原始大小为K,那么经过填充的卷积核大小为
K
′
=
K
+
(
K
−
1
)
∗
(
D
−
1
)
K^\prime = K+(K-1)*(D-1)
K′=K+(K−1)∗(D−1)
空洞卷积可用于语义分割或目标检测等任务,代替池化层进行避免下采样操作