WaveNet 并不是真正的空洞卷积,是吗?

机器算法验证 神经网络 深度学习 卷积神经网络 张量流
2022-03-01 04:11:15

在最近的WaveNet论文中,作者将他们的模型称为具有堆叠的扩张卷积层。他们还制作了以下图表,解释了“常规”卷积和扩张卷积之间的区别。

常规卷积看起来像 非扩张卷积 这是一个过滤器大小为 2 且步长为 1 的卷积,重复 4 层。

然后他们展示了他们的模型使用的架构,他们称之为扩张卷积。它看起来像这样。 WaveNet 空洞卷积 他们说每一层都有(1、2、4、8)的膨胀。但对我来说,这看起来像是一个过滤器大小为 2、步长为 2 的常规卷积,重复了 4 层。

据我了解,一个扩张卷积,过滤器大小为 2,步幅为 1,扩张为 (1, 2, 4, 8),看起来像这样。 实际扩张卷积

在 WaveNet 图中,没有一个过滤器会跳过可用的输入。没有孔。在我的图表中,每个过滤器都会跳过 (d - 1) 个可用输入。这就是扩张应该如何工作的不?

所以我的问题是,以下哪个(如果有的话)命题是正确的?

  1. 我不明白扩张和/或常规卷积。
  2. Deepmind 实际上并没有实现扩张卷积,而是跨步卷积,但误用了扩张这个词。
  3. Deepmind 确实实现了扩张卷积,但没有正确实现图表。

我对 TensorFlow 代码不够流利,无法理解他们的代码到底在做什么,但我确实在 Stack Exchange 上发布了一个相关问题,其中包含可以回答这个问题的代码。

2个回答

来自wavenet的论文:

"A dilated convolution (also called a trous, or convolution with 
holes) is a convolution where the filter is applied over an area larger 
than its length by skipping input values with a certain step. It is 
equivalent to a convolution with a larger filter derived from the 
original filter by dilating it with zeros, but is significantly more 
efficient. A dilated convolution  effectively allows the network to 
operate on a coarser scale than with a normal convolution. This is 
similar to pooling or strided  convolutions, but 
here the output has the same size as the input. As a special case, 
dilated convolution with dilation 1 yields the standard convolution. 
Fig. 3 depicts dilated causal convolutions for dilations 1, 2, 4, and 
8."

动画显示固定步幅一和膨胀因子在每一层上增加。 动画图 3 来自 Google 的 wavenet 博客文章

一分钱刚刚为我掉在了这个上。在这 3 个命题中,正确的一个是 4 个:我不理解 WaveNet 论文。

我的问题是我将 WaveNet 图解释为覆盖单个样本,以便在以 2D 结构排列的不同样本上运行,其中一维是样本大小,另一个是批量计数。

然而,WaveNet 只是在步长为 1 的一维时间序列上运行整个过滤器。这显然具有更低的内存占用,但完成了同样的事情。

如果您尝试使用跨步结构执行相同的技巧,则输出维度将是错误的。

总而言之,使用 2D 样本 x 批量结构以跨步方式进行操作会给出相同的模型,但内存使用量要高得多。