Dans le récent article WaveNet , les auteurs se réfèrent à leur modèle comme ayant des couches empilées de convolutions dilatées. Ils produisent également les graphiques suivants, expliquant la différence entre les convolutions «régulières» et les convolutions dilatées.
Les convolutions régulières ressemblent à ceci. Il s'agit d'une convolution avec une taille de filtre de 2 et une foulée de 1, répétée pour 4 couches.
Ils montrent ensuite une architecture utilisée par leur modèle, qu'ils appellent des convolutions dilatées. Cela ressemble à ceci. Ils disent que chaque couche a des dilatations croissantes de (1, 2, 4, 8). Mais pour moi, cela ressemble à une convolution régulière avec une taille de filtre de 2 et une foulée de 2, répétée pour 4 couches.
Si je comprends bien, une convolution dilatée, avec une taille de filtre de 2, une foulée de 1 et des dilatations croissantes de (1, 2, 4, 8), ressemblerait à ceci.
Dans le diagramme WaveNet, aucun des filtres ne saute une entrée disponible. Il n'y a pas de trous. Dans mon diagramme, chaque filtre ignore (d - 1) les entrées disponibles. C'est ainsi que la dilatation est censée fonctionner non?
Donc ma question est, laquelle (le cas échéant) des propositions suivantes sont correctes?
- Je ne comprends pas les convolutions dilatées et / ou régulières.
- Deepmind n'a pas réellement mis en œuvre une convolution dilatée, mais plutôt une convolution étagée, mais a abusé du mot dilatation.
- Deepmind a mis en œuvre une convolution dilatée, mais n'a pas correctement mis en œuvre le graphique.
Je ne maîtrise pas suffisamment le code TensorFlow pour comprendre ce que fait exactement leur code, mais j'ai publié une question connexe sur Stack Exchange , qui contient le peu de code qui pourrait répondre à cette question.
la source
Réponses:
Du papier de wavenet:
Les animations montrent une foulée fixe et un facteur de dilatation augmentant sur chaque couche.
la source
Le sou vient de tomber sur celui-ci pour moi. Parmi ces 3 propositions, la bonne est 4: je n'ai pas compris le document WaveNet.
Mon problème était que j'interprétais le diagramme WaveNet comme couvrant un seul échantillon, à exécuter sur différents échantillons disposés dans une structure 2D avec 1 dimension étant la taille de l'échantillon et l'autre étant le nombre de lots.
Cependant, WaveNet exécute tout ce filtre sur une série temporelle 1D avec une foulée de 1. Cela a évidemment une empreinte mémoire beaucoup plus faible mais accomplit la même chose.
Si vous tentiez de faire la même astuce en utilisant une structure stridée, la dimension de sortie serait incorrecte.
Donc, pour résumer, le faire de manière accélérée avec un échantillon 2D x structure par lots donne le même modèle, mais avec une utilisation de la mémoire beaucoup plus élevée.
la source