По какой причине Convolution 1x1 используется в глубоких нейронных сетях?

Я ищу архитектуру InceptionV3 (GoogLeNet) и не могу понять, зачем нужны слои conv1x1?

Я знаю, как работает свертка, но я вижу прибыль с размером патчa > 1.

Ответы

Ответ 1

Вы можете думать о свертке 1x1xD как методе уменьшения размерности, когда он помещается где-то в сеть.

Если у вас есть входной объем 100x100x512, и вы свернете его с набором фильтров D, каждый из которых имеет размер 1x1x512, вы уменьшите количество функций от 512 до D. Следовательно, выходной объем 100x100xD.

Как вы можете видеть, эта свертка (1x1x512)xD математически эквивалентна полностью связанному слою. Основное различие заключается в том, что, в то время как уровень FC требует, чтобы вход имел фиксированный размер, сверточный слой может принимать входные данные каждого объема с пространственной протяженностью больше или равной 100x100.

A 1x1xD свертка может заменить любой полностью связанный слой из-за этой эквивалентности.

Кроме того, свертки 1x1xD не только уменьшают возможности ввода на следующий уровень, но также вводят новые параметры и новую нелинейность в сеть, что поможет повысить точность модели.

Когда свертка 1x1xD помещается в конец классификационной сети, она действует точно как уровень FC, но вместо того, чтобы думать о ней как о методе сокращения размерности, более интуитивно думать об этом как о слое, который будет выведите тензор с формой WxHxnum_classes.

Пространственная протяженность выходного тензора (обозначенная символами W и H) является динамической и определяется местоположением входного изображения, которое проанализировала сеть.

Если сеть была определена с входом 200x200x3, и мы даем ей входное изображение с таким размером, выход будет представлять собой карту с W = H = 1 и глубиной = num_classes. Но, если входное изображение имеет пространственную протяженность больше, чем 200x200, чем сверточная сеть будет анализировать разные местоположения входного изображения (как это делает стандартная свертка) и создаст тензор с W > 1 и H > 1. Это невозможно с уровнем FC, который ограничивает сеть, чтобы принимать фиксированный размер ввода и производить фиксированный размер.

Ответ 2

Свертка 1x1 просто отображает входной пиксель в выходной пиксель, не глядя ни на что вокруг себя. Он часто используется для уменьшения количества каналов глубины, поскольку часто очень медленно умножать объемы с чрезвычайно большими глубинами.

input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)

input (256 depth) -> 4x4 convolution (256 depth)

Нижняя часть примерно на 3,7 раза медленнее.

Теоретически нейронная сеть может "выбирать", которые вводят "цвета", чтобы смотреть на это, вместо грубой силы, умножающей все.