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

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

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

2 ответов


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

если у вас есть объем ввода 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-слоем это ограничивает сеть принимать вход фиксированного размера и производить выход фиксированного размера.


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

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

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

Нижний примерно ~3.7 X медленнее.

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