卷积核到底要不要反转

大家好啊,我是董董灿。

之前写过很多次的卷积算法了,也包括了一些卷积的变种如分组卷积,感兴趣的话可以在公众号中搜索一下"卷积"关键字。

但有一点没有涉及过,那就是------为什么有些文章在介绍卷积时,会强调卷积核需要先旋转 180 度,然后再做卷积运算,而大部分文章又把这个操作给忽略了呢?

今天就一起来了解一下这个事情的来龙去脉吧。

1、先看下信号处理中的卷积

在信号处理中,卷积是一种数学运算,用于接受两个信号(如输入信号和系统响应),从而产生第三个信号,也就是输出。

在这种情况下卷积核是需要旋转 180 度的,我们从卷积的数学定义来看一下:

在连续时间信号处理中,两个函数 f(t) 和 g(t) 的卷积定义为:

在这两个公式中,注意 g(t - tau) 表示函数 g 相对于 f 的位移,并且有一个"反转"的过程。

这个反转是卷积操作的一个关键特性。

为什么需要 180 度旋转呢? 这部分有点枯燥,可跳过不看。

1、时间反转

在信号处理的卷积过程中,我们实际上是在对一个函数进行时间反转(即180度旋转),然后将其沿时间轴移动。

这是因为卷积就是在测量两个信号之间的重叠:一个信号在固定不动,另一个信号则翻转并滑过它。

2、数学的一致性

从数学的角度看,卷积运算的定义包括了这个反转步骤。

它确保了卷积运算符合其他数学性质,如结合律和交换律,这在理论分析和信号处理应用中都是有益的。

总而言之,信号处理中卷积核需要进行180度旋转的原因,是出于定义和数学计算的需要。

因此,如果你用 scypi 库中的 signal 模块来计算卷积,是有 180 度反转过程的,因为 scypi 中的计算是严格遵循数学定义的。

python 复制代码
from scipy import 
signalR = signal.convolve2d(input, kernel)

2. 为什么深度学习中的卷积不需要反转?

在很多介绍深度学习卷积算法的文章中,几乎很少有介绍要先对卷积核反转,然后再进行计算的操作。

但是会偶尔有几篇文章提到,让不少人产生了疑惑,为啥有时需要,有时又都故意忽略了呢?

看了这篇文章后,其实不用再疑惑,这个很好理解,首先在深度学习中,卷积算法依然需要旋转。

但是,深度学习中的卷积有一点要比信号处理中的卷积简洁很多,那就是卷积核的参数是可以学习的。

假设我们认为卷积核是需要旋转再进行计算的,那么我们同样可以认为模型学到的卷积核参数就是旋转之后的。

正是在深度学习中,卷积核的这种可学习性,可以让我们直接忽略卷积核的旋转操作。

无论卷积核是正着,还是反着,模型都会学习到最佳的卷积核形态,模型都会以最有效的方式来提取特征。

正因如此,深度学习中的卷积,就直接简化成了卷积核在输入图像上滑窗做乘累加运算,而不再需要像传统卷积那样进行 180 度旋转。

相关推荐
Eward-an2 小时前
LeetCode 1980 题通关指南|3种解法拆解“找唯一未出现二进制串”问题,附Python最优解实现
python·算法·leetcode
程序员酥皮蛋3 小时前
hot 100 第四十题 40.二叉树的层序遍历
数据结构·算法·leetcode
木斯佳4 小时前
HarmonyOS 6实战:从爆款vlog探究鸿蒙智能体提取关键帧算法
算法·华为·harmonyos
Mr.朱鹏4 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
WJSKad12355 小时前
【DepthPro】实战教程:单目深度估计算法详解与应用
算法
wzqllwy5 小时前
8 大经典排序算法(Java 实现):原理 + Demo + 核心分析
java·算法·排序算法
We་ct5 小时前
LeetCode 77. 组合:DFS回溯+剪枝,高效求解组合问题
开发语言·前端·算法·leetcode·typescript·深度优先·剪枝
重生之我是Java开发战士5 小时前
【递归、搜索与回溯】二叉树中的深度优先搜索:布尔二叉树,求根节点到叶节点数字之和,二叉树剪枝,验证二叉搜索树,第K小的元素,二叉树的所有路径
算法·深度优先·剪枝
篮l球场5 小时前
矩阵置零
算法
lihihi5 小时前
P1650 [ICPC 2004 Shanghai R] 田忌赛马(同洛谷2587)
开发语言·算法·r语言