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. Глубокий разум на самом деле не реализовал расширенную свертку, а скорее пошаговую свертку, но неправильно использовал расширение слова.
  3. Deepmind реализовал расширенную свертку, но не правильно реализовал диаграмму.

Я недостаточно свободно разбираюсь в коде TensorFlow, чтобы понять, что именно делает их код, но я опубликовал соответствующий вопрос на Stack Exchange , который содержит фрагмент кода, который может ответить на этот вопрос.

Чечи Левас
источник
Я нашел ваш вопрос и ответ ниже довольно интересным. Поскольку документ WaveNet не объясняет эту эквивалентность шага и степени расширения, я решил обобщить ключевые концепции в посте блога: theblog.github.io/post/… вам может быть интересно, если вы все еще работаете с авторегрессионным нейронным сети
Килиан Батцнер

Ответы:

9

Из бумаги Вавенета:

"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

rafaelvalle
источник
6

Пенни только что упала на этот для меня. Из этих трех предложений верным является 4: я не понял статью WaveNet.

Моя проблема заключалась в том, что я интерпретировал диаграмму WaveNet как охватывающую одну выборку, которая будет работать на разных выборках, расположенных в двухмерной структуре, где одно измерение соответствует размеру выборки, а другое - количеству партий.

Тем не менее, WaveNet просто запускает весь этот фильтр в одномерном временном ряду с шагом 1. Очевидно, это занимает гораздо меньше места в памяти, но выполняет то же самое.

Если вы попытаетесь проделать тот же трюк с использованием пошаговой структуры, выходное измерение будет неправильным.

Подводя итог, можно сказать, что при выполнении этого с использованием структуры 2D-образца х пакетной модели получается та же модель, но с гораздо более высоким использованием памяти.

Чечи Левас
источник