WaveNetは拡張された畳み込みではありませんか?


10

最近の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に関連する質問を投稿しました。


以下の質問と回答は非常に興味深いものでした。WaveNetペーパーではストライドと拡張率の同等性について説明していないため、主要な概念をブログの投稿にまとめることにしました:theblog.github.io/post/…自己回帰ニューラルを引き続き使用している場合は興味深いかもしれませんネットワーク
Kilian Batzner

回答:


8

ウェーブネットの論文から:

"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."

アニメーションは、各レイヤーで固定ストライド1と膨張係数の増加を示しています。 Googleのwavenetブログ投稿のアニメーション図3


6

ペニーは私のためにこれにちょうど落ちました。これら3つの命題のうち、正しいものは4つです。私はWaveNetの論文を理解していません。

私の問題は、WaveNetダイアグラムを単一のサンプルをカバーするものとして解釈し、2次元構造で配置された異なるサンプルで実行することでした。1次元はサンプルサイズで、もう1次元はバッチカウントです。

ただし、WaveNetは、ストライドが1の1D時系列に対してそのフィルター全体を実行しているだけです。これにより、メモリフットプリントははるかに低くなりますが、同じことを実現します。

strided構造を使用して同じトリックを実行しようとした場合、出力ディメンションは正しくありません。

要約すると、2Dサンプルxバッチ構造でストライド方式を実行すると同じモデルが得られますが、メモリ使用量ははるかに多くなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.