WaveNet não é realmente uma convolução dilatada, é?

10

No recente artigo da WaveNet , os autores se referem ao seu modelo como tendo camadas empilhadas de convoluções dilatadas. Eles também produzem os gráficos a seguir, explicando a diferença entre convoluções 'regulares' e convoluções dilatadas.

As convoluções regulares se parecem com Convoluções não dilatadas Esta é uma convolução com um tamanho de filtro 2 e uma passada de 1, repetida por 4 camadas.

Eles então mostram uma arquitetura usada por seu modelo, à qual se referem como convoluções dilatadas. Se parece com isso. Convoluções dilatadas WaveNet Eles dizem que cada camada tem dilatações crescentes de (1, 2, 4, 8). Mas para mim isso parece uma convolução regular com um tamanho de filtro 2 e um passo de 2, repetido por 4 camadas.

Pelo que entendi, uma convolução dilatada, com um tamanho de filtro de 2, passo de 1 e dilatações crescentes de (1, 2, 4, 8), seria assim. Convolução dilatada real

No diagrama WaveNet, nenhum dos filtros pula uma entrada disponível. Não há buracos. No meu diagrama, cada filtro pula (d - 1) as entradas disponíveis. É assim que a dilatação deve funcionar, não?

Então, minha pergunta é: quais (se houver) das seguintes proposições estão corretas?

  1. Eu não entendo convoluções dilatadas e / ou regulares.
  2. Deepmind, na verdade, não implementou uma convolução dilatada, mas sim uma convolução acelerada, mas usou mal a palavra dilatação.
  3. Deepmind implementou uma convolução dilatada, mas não implementou o gráfico corretamente.

Não sou fluente o suficiente no código TensorFlow para entender exatamente o que o código está fazendo, mas postei uma pergunta relacionada no Stack Exchange , que contém o pouco de código que poderia responder a essa pergunta.

Chechy Levas
fonte
Achei sua pergunta e resposta abaixo bastante interessantes. Como o documento WaveNet não explica essa equivalência de passada e taxa de dilatação, decidi resumir os principais conceitos em uma postagem no blog: theblog.github.io/post/… talvez você ache interessante se ainda estiver trabalhando com sistemas neurais auto-regressivos. redes
Kilian Batzner 28/02/19

Respostas:

8

Do papel de 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."

As animações mostram um passo fixo e o fator de dilatação aumentando em cada camada. Figura 3 animada da postagem do blog wavenet do Google

rafaelvalle
fonte
6

O centavo caiu sobre este aqui para mim. Dessas 3 proposições, a correta é 4: eu não entendi o documento WaveNet.

Meu problema era que eu estava interpretando o diagrama WaveNet como cobrindo uma única amostra, para ser executado em diferentes amostras dispostas em uma estrutura 2D, com 1 dimensão sendo o tamanho da amostra e a outra sendo a contagem de lotes.

No entanto, o WaveNet está executando esse filtro inteiro em uma série temporal 1D com um passo de 1. Isso obviamente tem uma pegada de memória muito menor, mas realiza a mesma coisa.

Se você tentasse fazer o mesmo truque usando uma estrutura estriada, a dimensão da saída estaria errada.

Então, para resumir, fazê-lo da maneira simplificada com uma estrutura 2D de amostra x lote fornece o mesmo modelo, mas com um uso de memória muito maior.

Chechy Levas
fonte