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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

Нижний примерно в 3.7 раза медленнее.

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

Другие вопросы по тегам