深度学习中卷积操作简单介绍

本博客简单介绍深度学习领域常见的两种卷积操作。

卷积定义

卷积的数学定义是:
连续形式h(t)=+f(τ)g(tτ)dτh(t)=\int_{-\infty}^{+\infty}{f(\tau)g(t-\tau)d\tau}h(t)=∫−∞+∞​f(τ)g(t−τ)dτ
离散形式h(t)=τ=+f(τ)g(tτ)dτh(t)=\sum_{\tau=-\infty}^{+\infty}{f(\tau)g(t-\tau)d\tau}h(t)=τ=−∞∑+∞​f(τ)g(t−τ)dτ
直观地理解,卷积就是对ttt时刻前的子序列的各个元素进行加权求和,权重同样是一个序列。f(τ)f(\tau)f(τ)就是子序列元素,g(tτ)g(t-\tau)g(t−τ)就是对应的权重,这里tτt-\taut−τ意味着对权重序列进行 翻转(flip)
通常在深度学习领域,不对权重进行翻转。即:h(t)=τ=+f(τ)g(τ)dτh(t)=\sum_{\tau=-\infty}^{+\infty}{f(\tau)g(\tau)d\tau}h(t)=τ=−∞∑+∞​f(τ)g(τ)dτ形式类似于直接对两个向量求内积。

总之,卷积的本质就是加权求和就是卷积核(kernel)。如下图所示(未对核进行翻转):

深度学习中卷积操作简单介绍
图片摘自《深度学习》

可以形象地理解为用卷积核对输入向量空间进行扫描,提取有用信息传入下一层。卷积核的大小相当于扫描镜头的视野(感受野, receptive field),也可以通过采用空洞卷积(dilated convolution)扩展感受野。
卷积的优势:

  1. 稀疏交互:核的大小远小于输入的大小。而传统人工神经网络采用矩阵建立网络层(全连接)间联系,参数较多。
  2. 参数共享:卷积层所有输入共用一个卷积核。正因为参数共享,
  3. 平移等变:函数输入改变,输出以同样方式改变。

深度学习中常规卷积操作示例

假设输入4通道,每个通道上有2维的张量。在2维张量上取一个小块,假设包含3×33\times33×3个元素,则四通道共4×3×34\times3\times3个4×3×3个元素,是一个3维数组,可将其展开成一个维度为36的列向量,对应的核的行向量也是36维。假设输出为4个通道,即映射到四个新的特征上,那么需要4个行向量,即构成了大小为4×364\times364×36的卷积核,如下图所示:
深度学习中卷积操作简单介绍
注意:上面的卷积操作仅仅针对一个3×33\times33×3输入块,通常对其他输入块应用相同的核参数,即参数共享。

深度可分离卷积示例

对应keras中SeparableConv2D卷积层。
将上面的卷积操作分两步进行:

  1. depthwise: 4个输入通道分别独立卷积操作,得到4个新的通道,此时尚未建立通道间的联系,计算量4×3×34\times3\times34×3×3.
  2. pointwise: 对4个新的通道进行卷积操作,建立通道间联系,得到输出的4个通道。计算量4×1×1×44\times1\times1\times44×1×1×4,卷积核是1×11\times11×1.

总的计算量4×3×3+4×1×1×4=524\times3\times3+4\times1\times1\times4=524×3×3+4×1×1×4=52,计算量大为减少。

深度学习中卷积操作简单介绍
出于降低计算量、扩大感受野、提升训练速度的目的,深度学习中卷积的方式有很多,详细请阅读下文参考资料。

参考资料

  1. 《深度学习》Ian Goodfellow,Yoshua Bengio
  2. CNN 中千奇百怪的卷积方式大汇总
  3. 变形卷积核、可分离卷积?卷积神经网络中十大拍案叫绝的操作

注:如有不当之处,请指正。

上一篇:伯努利数学习笔记的说...


下一篇:信号与系统笔记