Объясняется с помощью анимированных гифок и кода Python

Транспонированный сверточный слой также (ошибочно) известен как деконволюционный слой. Деконволюционный слой отменяет работу стандартного сверточного слоя, то есть если вывод, сгенерированный посредством стандартного сверточного слоя, деконволюционирует, вы получаете обратно исходный ввод. Транспонированный сверточный слой подобен деконволюционному слою в том смысле, что пространственные измерения, создаваемые обоими, одинаковы. Транспонированная свертка не отменяет стандартную свертку по значениям, а только по размерам.

Транспонированный сверточный слой делает то же самое, что и стандартный сверточный слой, но на измененной входной карте объектов. Прежде чем объяснять сходство, давайте сначала посмотрим, как работает стандартный сверточный слой.

Стандартный сверточный слой:

Стандартный сверточный слой на входе размера ixi определяется следующими двумя параметрами.

  • Заполнение (p): количество нулей, добавленных вокруг исходного ввода, увеличивая размер до (i + 2 * р) х (я + 2 * р)
  • Шаг (s):: величина, на которую смещается ядро ​​при скольжении по входному изображению.

На рисунке ниже показано, как сверточный слой работает как двухэтапный процесс.

На первом этапе входное изображение дополняется нулями, в то время как на втором этапе ядро ​​помещается на заполненный вход и скользит, генерируя выходные пиксели как скалярные произведения ядра и перекрывающейся области ввода. Ядро перемещается по заполненному входу, делая скачки размера, определяемого шагом. Сверточный слой обычно выполняет понижающую дискретизацию, то есть пространственные размеры выходных данных меньше, чем входные.

Анимация ниже объясняет работу сверточных слоев для разных значений шага и отступа.

Для заданного размера ввода (i), ядро ​​(k), заполнение (p), и шаг (s), размер выходной карты объектов (o) сгенерировано

Транспонированный сверточный слой:

С другой стороны, транспонированный сверточный слой обычно выполняется для повышения дискретизации, то есть для создания выходной карты признаков, пространственный размер которой превышает размер входной карты признаков. Как и стандартный сверточный слой, транспонированный сверточный слой также определяется заполнением и шагом. Эти значения padding и stride гипотетически использовались на выходе для генерации входных данных. то есть, если вы возьмете результат и выполните стандартную свертку с определенными шагами и отступами, он будет генерировать пространственное измерение, такое же, как и входное.

Реализацию транспонированного сверточного слоя лучше объяснить как четырехэтапный процесс.

  • Шаг 1. Рассчитайте новые параметры z и p ’
  • Шаг 2: между каждой строкой и столбцами ввода вставьте z нулей. Это увеличивает размер ввода до (2 * i-1) x (2 * i-1).
  • Шаг 3. Добавьте к измененному входному изображению количество нулей p ’.
  • Шаг 4. Выполните стандартную свертку изображения, созданного на шаге 3, с длиной шага 1.

Полные шаги можно увидеть на рисунке ниже.

Анимация ниже объясняет работу сверточных слоев для разных значений шага и отступа.

Для заданного размера ввода (i), ядро ​​(k), заполнение (p), и шаг (s), размер выходной карты объектов (o) сгенерировано

Резюме:

В таблице ниже приведены две свертки: стандартная и транспонированная.

  • Идея транспонированной свертки состоит в том, чтобы выполнять обучаемую передискретизацию.
  • Транспонированные свертки - это стандартные свертки, но с измененной картой входных функций.
  • Шаг и отступ не соответствуют количеству нулей, добавленных вокруг изображения, и величине сдвига в ядре при его перемещении по входу, как при стандартной операции свертки.

Код Python:

Гифки были созданы с использованием Python. Полный код можно найти по адресу https://github.com/aqeelanwar/conv_layers_animation

Бонус:

Компактные шпаргалки по этой и многим другим важным темам машинного обучения можно найти по ссылке ниже.



Если эта статья была для вас полезной, не стесняйтесь хлопать в ладоши, делиться ей и отвечать на нее. Если вы хотите узнать больше о машинном обучении и науке о данных, подпишитесь на меня @ Aqeel Anwar или свяжитесь со мной в LinkedIn.