空洞卷积 Dilated Convolution
通常的卷积操作,除了需要指定输入输出通道数,还需要确定卷积核大小 kernei_size、步长 stride、填充大小 padding。
Conv1d(384, 48, kernel_size=3, stride=1, padding=1)
空洞卷积则是在此基础上增加了 dilation 参数,用于控制卷积核的扩张程度。dilation 值默认为 1,手动将其指定为大于 1 的数会发生很有趣的事。
Conv1d(384, 48, kernel_size=3, stride=1, padding=2, dilation=2)
以上面这个代码为例,当 dilation 为 2 时,虽然卷积核大小为 3 不会变,但其元素之间会多出一个空洞,使得卷积核的覆盖范围从 3 个元素变为 5 个元素。
显而易见的,空洞卷积有一大好处:增加卷积核的感受视野。对于那些需要更长上下文信息的任务,例如音频处理和语义分割,空洞卷积比常规卷积更有优势。
通常不要连续使用相同 dilation 的空洞卷积,因为这样会造成致命的局部信息丢失。
参考来源
- “Dilated Convolution”,https://www.geeksforgeeks.org/dilated-convolution/
- 玖零猴,“吃透空洞卷积(Dilated Convolutions)”,https://zhuanlan.zhihu.com/p/113285797