一、前言
由于个人兴趣和项目需要,最近一直在学习计算机视觉有关的知识,对于计算机视觉来说,最重要的自然是CNN卷积神经网络。而对于卷积神经网络来说,卷积操作是所有操作的核心,但是和很多同学一样,在最开始接触卷积神经网络的时候,我也被这个看起来有些迷幻的概念给弄糊涂了,简单查了一下,发现衍生的不同变体如2D卷积,3D卷积,1x1卷积,Transposed卷积有很多种,真是让人头大。不过有大佬总结了基本的卷积操作,发了一篇博客,由于原文是全英文,为了方便国内的同学学习,我将此文翻译过来,并加上一些自己的理解和大家分享交流。
二、卷积和互相关
卷积神经网络由卷积操作得名,卷积操作是信号处理,图像处理和其它领域最常用的一种操作。但是实际上,在深度学习领域,卷积操作使用互相关运算来代替。虽然在CNN中效果一样,但是卷积运算和互相关运算是有一些细微的差别的,有必要仔细了解。
首先看卷积运算的定义是: ( f ∗ x ) ( t ) = ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ (f*x)(t)=\int_{-\infty}^{\infty}f(\tau)g(t-\tau)d\tau (f∗x)(t)=∫−∞∞f(τ)g(t−τ)dτ
定义表明,卷积操作是两个函数的积分,其中一个函数经过颠倒和位移操作,下图是卷积操作的可视化演示:
左上角的两个图片是原始的 f ( t ) f(t) f(t), g ( t ) g(t) g(t), g g g是过滤器,首先将其颠倒如左下角二图所示,然后沿着水平坐标轴滑动过滤器如图右上角两图所示。在每一个位置,我们计算 f f f和颠倒后的 g g g交叉范围的面积,每一个具体点的交叉面积就是该点的卷积值,整个操作的卷积是所有卷积值的累加。
互相关运算的定义是两个函数的滑动点乘或者滑动内积,过滤器不需要经过颠倒操作。过滤器和函数的交叉区域的面积和就是互相关,下图展示了互相关运算和卷积运算的区别。
在深度学习中,卷积运算中的过滤器并没有经过颠倒操作,因此实际上就是互相关运算。但是由于卷积神经网络中的卷积核(过滤器)的权重是随机初始化的,所