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