По какой причине 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 раза медленнее.
Теоретически нейронная сеть может "выбирать", какие входные "цвета" смотреть, используя это, вместо того, чтобы перемножать все методом грубой силы.