WaveNet nie jest tak naprawdę rozszerzonym splotem, prawda?

10

W najnowszym artykule WaveNet autorzy odnoszą się do swojego modelu jako stosu warstw rozszerzonych splotów. Tworzą również następujące wykresy wyjaśniające różnicę między zwinięciem „zwykłym” a zwężeniem rozszerzonym.

Wyglądają zwykłe sploty Nie rozszerzone zwoje Jest to splot o wielkości filtra 2 i kroku 1, powtarzany dla 4 warstw.

Następnie pokazują architekturę stosowaną przez ich model, którą nazywają rozszerzonymi splotami. To wygląda tak. Zwoje rozszerzone WaveNet Mówią, że każda warstwa ma rosnące rozcieńczenia (1, 2, 4, 8). Ale dla mnie wygląda to na zwykły splot z filtrem o wielkości 2 i krokiem 2, powtarzanym dla 4 warstw.

Jak rozumiem, wyglądałoby na to rozszerzone splot, z filtrem wielkości 2, krokiem 1 i rosnącymi rozszerzeniami (1, 2, 4, 8). Rzeczywista rozwodniona konwekcja

Na schemacie WaveNet żaden z filtrów nie przeskakuje dostępnego wejścia. Nie ma dziur. Na moim schemacie każdy filtr pomija (d - 1) dostępne dane wejściowe. Tak ma wyglądać dylatacja nie?

Więc moje pytanie brzmi, które (jeśli jakieś) z poniższych zdań są poprawne?

  1. Nie rozumiem rozszerzonych i / lub regularnych zwojów.
  2. Deepmind tak naprawdę nie wdrożył rozszerzonego splotu, ale raczej splot krokowy, ale niewłaściwie użył słowa dylatacja.
  3. Deepmind zaimplementował rozszerzony splot, ale nie wdrożył poprawnie wykresu.

Nie jestem wystarczająco biegły w kodzie TensorFlow, aby zrozumieć, co dokładnie robi jego kod, ale opublikowałem powiązane pytanie na Stack Exchange , które zawiera fragment kodu, który mógłby odpowiedzieć na to pytanie.

Chechy Levas
źródło
Znalazłem twoje pytanie i odpowiedź poniżej całkiem interesujące. Ponieważ artykuł WaveNet nie wyjaśnia tej równoważności kroku i szybkości dylatacji, postanowiłem podsumować kluczowe koncepcje w poście na blogu: the blog.github.io/post/… może się okazać interesujące, jeśli nadal pracujesz z autoregresyjnym neuronem sieci
Kilian Batzner

Odpowiedzi:

9

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

Animacje pokazują stały krok pierwszy i współczynnik rozszerzania wzrastający na każdej warstwie. Animowane ryc. 3 z posta na blogu Google wavenet

rafaelvalle
źródło
6

Grosz właśnie na mnie spadł. Z tych 3 propozycji poprawna jest 4: nie zrozumiałem artykułu WaveNet.

Mój problem polegał na tym, że interpretowałem schemat WaveNet jako obejmujący pojedynczą próbkę, która ma być przeprowadzana na różnych próbkach ułożonych w strukturze 2D, przy czym jeden wymiar to wielkość próbki, a drugi to liczba partii.

Jednak WaveNet po prostu uruchamia cały filtr w szeregu czasowym 1D z krokiem 1. To oczywiście ma znacznie mniejszą pamięć, ale osiąga to samo.

Jeśli spróbujesz wykonać tę samą sztuczkę przy użyciu struktury kroczącej, wymiar wyjściowy będzie nieprawidłowy.

Podsumowując, robienie tego krok po kroku z dwuwymiarową próbką x struktura wsadowa daje ten sam model, ale przy znacznie większym zużyciu pamięci.

Chechy Levas
źródło