快速卷积的内涵和使用方式(扩张卷积dilatedconvolution)
快速卷积的内涵和使用方式(扩张卷积dilatedconvolution)扩张卷积的实现过程如图3所示,当需要视野为16时,在第一层使用一个dilation=1的卷积,两两时间片为一组进行卷积,第二层时使用了dilation=2的扩张卷积,相互之间隔一个进行卷积,以此类推,得到最终输出时仅需要四个卷积层,与原来的单纯使用因果卷积相比,极大地降低了计算复杂度。图3 使用扩张卷积后要求视野为16扩张卷积也被叫做膨胀卷积、空洞卷积等,它是在ICLR 2016被提出的,它的主要作用是在不增加参数和复杂度的条件下,来指数倍地扩大视野的大小。图2 普通卷积和扩张卷积在扩张卷积中,有一个核心参数叫做扩张率(dilation rate),它说明了扩张卷积的扩张倍数,具体做法就是在卷积核之间插入零值以增大卷积核尺寸。如图2所示,(a)是普通卷积核,可以看做dilation=1,则它的卷积核大小为3,视野为3;(b)是一个dilation=2的扩张卷积核,即(a)中的卷积核扩大2倍
因果卷积在讲扩张卷积之前,首先先提一个叫做因果卷积(Causal Convolutions)的东西。因果卷积最早是出现在Wavenet中,它相当于一维卷积的一种应用形式,主要用于处理时间序列问题,即输入数据的顺序很重要。
如图1所示是因果卷积的样子,每一个圆点代表时间点,使用大小为2的卷积核对它进行处理,因此如果要求视野域大小为5,则需要堆积4个卷积核大小为2的一维卷积层。
图1 因果卷积形式
但是如果视野域要求更大,则每多一个视野,就需要多一层一维卷积,这将导致计算复杂度急剧上升。因此,就出现了扩张卷积(Dilated Convolution)来解决这个问题。
扩张卷积扩张卷积也被叫做膨胀卷积、空洞卷积等,它是在ICLR 2016被提出的,它的主要作用是在不增加参数和复杂度的条件下,来指数倍地扩大视野的大小。
图2 普通卷积和扩张卷积
在扩张卷积中,有一个核心参数叫做扩张率(dilation rate),它说明了扩张卷积的扩张倍数,具体做法就是在卷积核之间插入零值以增大卷积核尺寸。如图2所示,(a)是普通卷积核,可以看做dilation=1,则它的卷积核大小为3,视野为3;(b)是一个dilation=2的扩张卷积核,即(a)中的卷积核扩大2倍得到,它的大小为2*(3-1) 1=5,视野大小为7;同理,(c)是一个dilation=4的扩张卷积核,它的大小为4*(3-1) 1=9,视野大小为15。在扩张卷积中,初始的卷积核经过dilation rate扩大后得到的新尺寸大小为d*(k-1) 1,输入和输出特征图的尺寸为。
图3 使用扩张卷积后要求视野为16
扩张卷积的实现过程如图3所示,当需要视野为16时,在第一层使用一个dilation=1的卷积,两两时间片为一组进行卷积,第二层时使用了dilation=2的扩张卷积,相互之间隔一个进行卷积,以此类推,得到最终输出时仅需要四个卷积层,与原来的单纯使用因果卷积相比,极大地降低了计算复杂度。
问题当然,扩张卷积也存在一些它的问题:
- 网格效应(The Gridding Effect):虽然扩张卷积在不改变输入特征图尺寸的条件下增大了视野,但是由于扩张之后卷积核是有间隔的,这意味着不是所有输入都被用来计算,尤其当叠加的各个卷积层使用了相同大小的dilation rate,这导致输出的特征图上的信息出现不连续性。
图4 网格效应
- 远距离信息可能不相关(Long-ranged information might be not relevant):扩张卷积出现的背景是为了获取更大的视野,但是提高扩张率dilation rate并不是对任何对象都是有效的。
为了解决扩张卷积所存在的一些问题,一个名为混合扩张卷积(HDC,Hybrid Dilated Convolution)的结构被提出,它可以看作是对扩张卷积的实现提出了一些标准,具体来说有以下几点:
- 扩张卷积的扩张率dilation rate不能有大于1的公约数,因为如果扩张率成倍数,网格效应的问题将仍会存在;
- dilation rate应该被设计成锯齿状,即如[1 2 3 1 2 3] 这样的循环结构。对于锯齿状而言,小的 dilation rate 可以关心近距离信息,大 的dilation rate 可以用来关心远距离信息。
图5 锯齿状扩张卷积
如图6所示为普通扩张卷积和混合扩张卷积的对比结果:
图6 输入,普通扩张卷积,混合扩张卷积对比