本博客简单介绍深度学习领域常见的两种卷积操作。
卷积定义
卷积的数学定义是:
连续形式h(t)=∫−∞+∞f(τ)g(t−τ)dτ
离散形式h(t)=τ=−∞∑+∞f(τ)g(t−τ)dτ
直观地理解,卷积就是对t时刻前的子序列的各个元素进行加权求和,权重同样是一个序列。f(τ)就是子序列元素,g(t−τ)就是对应的权重,这里t−τ意味着对权重序列进行 翻转(flip) 。
通常在深度学习领域,不对权重进行翻转。即:h(t)=τ=−∞∑+∞f(τ)g(τ)dτ形式类似于直接对两个向量求内积。
总之,卷积的本质就是加权求和,权就是卷积核(kernel)。如下图所示(未对核进行翻转):
可以形象地理解为用卷积核对输入向量空间进行扫描,提取有用信息传入下一层。卷积核的大小相当于扫描镜头的视野(感受野, receptive field),也可以通过采用空洞卷积(dilated convolution)扩展感受野。
卷积的优势:
- 稀疏交互:核的大小远小于输入的大小。而传统人工神经网络采用矩阵建立网络层(全连接)间联系,参数较多。
- 参数共享:卷积层所有输入共用一个卷积核。正因为参数共享,
- 平移等变:函数输入改变,输出以同样方式改变。
深度学习中常规卷积操作示例
假设输入4通道,每个通道上有2维的张量。在2维张量上取一个小块,假设包含3×3个元素,则四通道共4×3×3个元素,是一个3维数组,可将其展开成一个维度为36的列向量,对应的核的行向量也是36维。假设输出为4个通道,即映射到四个新的特征上,那么需要4个行向量,即构成了大小为4×36的卷积核,如下图所示:
注意:上面的卷积操作仅仅针对一个3×3输入块,通常对其他输入块应用相同的核参数,即参数共享。
深度可分离卷积示例
对应keras中SeparableConv2D卷积层。
将上面的卷积操作分两步进行:
- depthwise: 4个输入通道分别独立卷积操作,得到4个新的通道,此时尚未建立通道间的联系,计算量4×3×3.
- pointwise: 对4个新的通道进行卷积操作,建立通道间联系,得到输出的4个通道。计算量4×1×1×4,卷积核是1×1.
总的计算量4×3×3+4×1×1×4=52,计算量大为减少。
出于降低计算量、扩大感受野、提升训练速度的目的,深度学习中卷积的方式有很多,详细请阅读下文参考资料。
参考资料
- 《深度学习》Ian Goodfellow,Yoshua Bengio
- CNN 中千奇百怪的卷积方式大汇总
- 变形卷积核、可分离卷积?卷积神经网络中十大拍案叫绝的操作
注:如有不当之处,请指正。