Как фильтры и карты активации связаны в сверточных нейронных сетях?

11

Как карты активации на данном слое связаны с фильтрами для этого слоя? Я не спрашиваю о том, как выполнить сверточную операцию между фильтром и картой активации, я спрашиваю о типе связи, которую имеют эти два.

Например, скажем, вы хотели сделать полную связь. У вас есть f количество фильтров и n количество карт активации в данном слое. Вы получите f * n количество карт активации в следующем слое, и количество карт активации будет увеличиваться с каждым новым слоем. Это способ, которым я предполагаю, что это сделано.

Или вы можете сказать, что каждый фильтр связан только с одной картой активации. В этом случае количество фильтров будет равно количеству карт активации, и каждый слой будет иметь одинаковое количество фильтров и карт активации. Это текущая архитектура моей сети, и она, кажется, учится хорошо.

Основным источником моего замешательства является просмотр диаграмм обвесов, которые я вижу в Интернете. Некоторые из них имеют «полную связь» между фильтрами и картами активации, например: введите описание изображения здесь в первом слое у вас есть 4 карты активации и, предположительно, 2 фильтра. Каждая карта свернута с каждым фильтром, в результате чего на следующем слое получается 8 карт. Выглядит отлично.

Но здесь у нас есть архитектура, которая не имеет смысла для меня - введите описание изображения здесь как перейти от 6 карт в первом слое к 16 во 2-м? Я могу придумать способы получить 16 карт из 6, но они не имеют никакого смысла.

Frobot
источник

Ответы:

10

Вторая архитектура сверточной нейронной сети (CNN), которую вы опубликовали, взята из этой статьи . В статье авторы дают описание того, что происходит между слоями S2 и C3. Их объяснение не очень ясно, хотя. Я бы сказал, что эта архитектура CNN не является «стандартной», и это может быть довольно запутанным в качестве первого примера для CNN.

Архитектура CNN

28×285×5M×MN×NMN(MN+1)×(MN+1)

То, что происходит между уровнем S2 и уровнем C3, является следующим. В слое C3 имеется 16 карт объектов, полученных из 6 карт объектов в слое S2. Количество фильтров в слое C3 действительно неочевидно. Фактически, только из диаграммы архитектуры нельзя судить о том, каково точное количество фильтров, которые производят эти 16 карт характеристик. Авторы статьи приводят следующую таблицу (стр. 8):

соединения между слоями S2 и C3

С таблицей они дают следующее объяснение (внизу страницы 7):

5×5

В таблице авторы показывают, что каждая карта объектов в слое C3 создается путем объединения 3 или более карт объектов (стр. 8):

Первые шесть карт характеристик C3 получают входные данные из всех смежных подмножеств трех карт характеристик в S2. Следующие шесть принимают входные данные из каждого смежного подмножества из четырех. Следующие три принимают входные данные от некоторых прерывистых подмножеств из четырех. Наконец, последний получает данные от всех карт характеристик S2.

Сколько фильтров в слое C3? К сожалению, они не объясняют это. Две простейшие возможности были бы:

  1. Существует один фильтр для каждой карты характеристик S2 для каждой карты характеристик C3, т.е. отсутствует совместное использование фильтров между картами характеристик S2, связанными с той же картой характеристик C3.
  2. Для каждой карты объектов C3 существует один фильтр, который используется совместно для (3 или более) карт объектов слоя S2, которые объединены.

В обоих случаях «объединение» будет означать, что результаты свертки на группу карт объектов S2 необходимо будет объединить для получения карт объектов C3. Авторы не уточняют, как это делается, но обычно это дополнение (см., Например, анимированный GIF-файл в середине этой страницы) .

Авторы дают некоторую дополнительную информацию, которая может помочь нам расшифровать архитектуру. Они говорят, что «слой C3 имеет 1516 обучаемых параметров» (стр. 8). Мы можем использовать эту информацию для выбора между случаями (1) и (2) выше.

(6×3)+(9×4)+(1×6)=60(1410+1)×(1410+1)=5×55×5×60=1,5001,500+16=1,516(5×5×16)+16=416

Поэтому, если мы снова посмотрим на Таблицу I выше, есть 10 различных фильтров C3, связанных с каждой картой характеристик S2 (таким образом, всего 60 различных фильтров).

Авторы объясняют этот тип выбора:

Различные карты объектов [в слое C3] вынуждены извлекать различные (возможно, дополняющие) объекты, потому что они получают разные наборы входных данных.

Я надеюсь, что это проясняет ситуацию.

Орестис Циналис
источник
3

Вы действительно правы, что значение перед @ указывает количество фильтров, а не количество карт объектов (хотя для первых сверточных слоев эти значения совпадают).

Что касается вашего последнего вопроса: да, имеет смысл иметь каждую карту объектов на слое l, связанную с каждым фильтром на слое l + 1. Единственная причина этого заключается в том, что это значительно увеличивает мощность выражения сети, поскольку у нее есть больше способов (путей) для объединения карт характеристик, которые, таким образом, позволяют лучше различать то, что находится на входном изображении.

Наконец, я не знаю, практикуете ли вы свои навыки нейронной сети, применяя их самостоятельно, но если вы просто хотите применить сверточные сети для конкретной задачи, то уже есть несколько отличных библиотек нейронных сетей, таких как Theano, Brainstorm, Caffe.

Сьерд
источник
Я думаю, что я сделаю сравнение обоих способов сравнения. С не полностью подключенной версией он будет обучаться и быстрее вычислять свою классификацию. Но точность важнее. В не полностью подключенной версии каждый фильтр локализуется для более конкретной задачи, а не для более общей задачи. В полностью подключенной версии фильтр обновляется на основе того, что лучше для всех предыдущих фильтров, а не только для одного типа функции. Я делал свою сеть с нуля, используя c #. конечно, не легкий способ делать вещи ... но он научил меня всесторонним вещам
Frobot
Это звучит как звуковой план. Удачи!
Sjoerd