深度学习 | 表示学习 | 卷积神经网络|翻转卷积核是干啥呢|09
如是我闻: 卷积核的翻转(行列翻转)实际上源于数学上卷积操作的定义。下面从数学、直觉和实际应用三个角度来解释为什么卷积核需要翻转:
1. 数学定义:离散卷积的本质
在数学上,卷积的定义是:
(
f
∗
g
)
(
t
)
=
∫
f
(
τ
)
g
(
t
−
τ
)
d
τ
(f * g)(t) = \int f(\tau) g(t - \tau) \, d\tau
(f∗g)(t)=∫f(τ)g(t−τ)dτ
离散形式下,类似于:
(
x
∗
k
)
i
j
=
∑
p
,
q
x
i
+
p
,
j
+
q
⋅
k
r
−
p
,
r
−
q
(x * k)_{ij} = \sum_{p, q} x_{i+p, j+q} \cdot k_{r-p, r-q}
(x∗k)ij=p,q∑xi+p,j+q⋅kr−p,r−q
这里的
(
r
−
p
,
r
−
q
)
(r-p, r-q)
(r−p,r−q) 表示卷积核的索引是“反转”过来的。这个反转是数学定义的一部分,用来捕捉信号中模式的相关性。
直观上,卷积的反转是为了对齐卷积核和输入的过去的历史影响。在空间数据中(例如图像),它可以用来模拟模式匹配的方向性。
2. 卷积核翻转的作用
从图像处理的角度,翻转卷积核的作用如下:
-
对称性和匹配性:
翻转后的卷积核可以更好地找到图像中的模式和特征。例如:- 如果输入图像中有一个方向为 ↘ \searrow ↘ 的梯度,卷积核需要被翻转为 ↖ \nwarrow ↖ 才能进行匹配。
- 这是一种数学操作的要求,它确保输入和核之间的相似性度量是准确的。
-
保持卷积的性质:
翻转操作让卷积满足一些数学性质,比如:- 交换性:卷积满足 x ∗ k = k ∗ x x * k = k * x x∗k=k∗x。
- 如果不翻转,卷积就会变成另一种操作(称为交叉相关,correlation)。
3. 实际应用:与交叉相关的对比
- 在实际的深度学习框架(如 PyTorch、TensorFlow)中,卷积核的翻转并不是严格执行的。通常,实际实现的是交叉相关(cross-correlation),公式为:
( x ⋆ k ) i j = ∑ p , q x i + p , j + q ⋅ k p , q (x \star k)_{ij} = \sum_{p, q} x_{i+p, j+q} \cdot k_{p, q} (x⋆k)ij=p,q∑xi+p,j+q⋅kp,q
交叉相关不进行翻转。 - 为什么可以这样做?因为在深度学习中,卷积核是可学习的参数,翻转与否不会影响结果(权重可以通过训练来自动适应)。
- 然而,传统图像处理和数学卷积定义中,翻转是必不可少的。
4. 直观类比:时序信号
- 想象你在一个时序信号(如音频波形)上应用卷积,翻转操作可以让卷积核捕捉输入信号的过去和未来的关系。
- 在图像中,这种翻转对应的是对局部像素模式的对称匹配。
总的来说
-
为什么要翻转?
- 这是数学定义的要求。
- 确保卷积运算具有对称性和匹配性。
- 翻转后的核能够更好地捕捉图像中的模式。
-
为什么实际实现中可以不翻转?
- 深度学习中采用交叉相关是简化实现的一种方式,但它本质上与卷积的效果类似,因为卷积核的权重是可学习的。
以上