Этот вопрос сводится к тому, «как сделать сверток слоев именно работу.
Предположим, у меня есть изображение в оттенках серого . Таким образом, изображение имеет один канал. В первом слое я применяю свертку с фильтрами и заполнением. Тогда у меня есть еще один слой свертки с сверток и фильтров. Сколько карт у меня есть?3 × 3 k 1 5 × 5 k 2
Тип 1 свертка
Первый слой исполняется. После этого у меня есть карты характеристик (по одной на каждый фильтр). Каждый из них имеет размер . Каждый пиксель был создан путем взятия пикселей из дополненного входного изображения. n × m 3 ⋅ 3 = 9
Затем наносится второй слой. Каждый фильтр применяется отдельно к каждой из карт объектов . Это приводит к картам характеристик для каждой карты характеристик . Таким образом, после второго слоя есть карт объектов. Каждый пиксель каждой из новых карт объектов был создан путем взятия "пикселей" карты дополненных объектов из ранее.k 1 k 1 × k 2 5 ⋅ 5 = 25
Система должна узнать параметры .
Тип 2.1 свертка
Как и прежде: первый слой выполняется. После этого у меня есть карты характеристик (по одной на каждый фильтр). Каждый из них имеет размер . Каждый пиксель был создан путем взятия пикселей из дополненного входного изображения. n × m 3 ⋅ 3 = 9
В отличие от ранее: тогда второй слой применяется. Каждый отдельный фильтр применяется к одному и тому же региону, но все карты объектов из предыдущих. Это приводит к тому, что карты характеристик в общей сложности после выполнения второго слоя. Каждый отдельный пиксель каждой из новых карт объектов был создан путем взятия "пикселей" карт дополненных объектов из предыдущих.k 2 ⋅ 5 ⋅ 5 = 25 ⋅ k 2
Система должна узнать параметры .
Тип 2.2 свертка
Как и выше, но вместо параметров на фильтр, которые необходимо изучить и просто скопировать для других карт входных объектов, у вас есть k_1 \ cdot 3 \ cdot 3 + k_2 \ cdot k_1 \ cdot 5 \ cdot 5 параметров, которые должны быть изучены.к 1 ⋅ 3 ⋅ 3 + K 2 ⋅ K 1 ⋅ 5 ⋅ 5
Вопрос
- Тип 1 или тип 2 обычно используется?
- Какой тип используется в Alexnet ?
- Какой тип используется в GoogLeNet ?
- Если вы говорите тип 1: почему свертки имеют смысл? Разве они не умножают данные только на константу?
- Если вы говорите тип 2: объясните, пожалуйста, квадратичную стоимость («Например, в сети глубокого видения, если два сверточных слоя объединены в цепочку, любое равномерное увеличение числа их фильтров приводит к квадратичному увеличению вычислений»)
Для получения ответов на все вопросы, пожалуйста, предоставьте некоторые доказательства (документы, учебники, документация по фреймворкам), что ваш ответ правильный.
Бонусный вопрос 1
Всегда ли пул применяется только для каждой карты объектов или же для нескольких карт объектов?
Бонусный вопрос 2
Я относительно уверен, что тип 1 правильный, и что-то не так с бумагой GoogLe. Но там и 3D сверток тоже. Допустим, у вас есть 1337 карт объектов размером и вы применяете фильтр . Как вы перемещаете фильтр по картам объектов? (Слева направо, сверху вниз, от первой карты объектов до последней карты объектов?) Имеет ли это значение, если вы делаете это последовательно?3 × 4 × 5
Мое исследование
- Я прочитал две статьи сверху, но я все еще не уверен, что используется.
- Я прочитал документацию по лазаньи
- Я прочитал документацию theano
- Я прочитал ответы на Понимание сверточных нейронных сетей (не переходя по всем ссылкам)
- Я читал сверточные нейронные сети (LeNet) . Особенно рисунок 1 делает меня относительно уверенным, что Тип 2.1 является правильным. Это также соответствовало бы комментарию «квадратичной стоимости» в GoogLe Net и некоторому практическому опыту, который я имел с Caffee.
источник
Ответы:
Я не уверен в альтернативах, описанных выше, но обычно используемая методология:
Перед применением нелинейности каждый выходной сигнал фильтра линейно зависит от всех карт объектов, ранее существовавших в патче, поэтому вы получите фильтры после вторых слоев. Общее количество параметров составляет . 3 ˙К2 3˙3˙К1+ к1˙5˙5˙К2
Бонус 1: Объединение выполняется для каждой карты функций отдельно.
Бонус 2: порядок «скольжения» не имеет значения. Фактически каждый вывод вычисляется на основе предыдущего уровня, поэтому ответы выходного фильтра не зависят друг от друга. Они могут быть вычислены параллельно.
источник
Я только что боролся с этим же вопросом в течение нескольких часов. Я думал, что поделюсь инсайтом, который помог мне понять это.
Ответ заключается в том, что фильтры для второго сверточного слоя не имеют такой же размерности, как фильтры для первого слоя. В общем случае фильтр должен иметь то же количество измерений, что и его входные данные . Таким образом, в первом слое ввода вход имеет 2 измерения (потому что это изображение). Таким образом, фильтры также имеют два измерения. Если в первом слое сверстников имеется 20 фильтров, то выходной сигнал первого слоя сверток представляет собой стек из 20 карт двумерных объектов. Таким образом, выход первого конвективного слоя является 3-мерным, где размер третьего измерения равен количеству фильтров в первом слое.
Теперь этот 3D-стек формирует вход для второго слоя конвона. Поскольку вход на 2-й слой является 3D, фильтры также должны быть 3D. Сделайте размер фильтров второго слоя в третьем измерении равным количеству карт объектов, которые были выходными данными первого слоя.
Теперь вы просто сворачиваете первые два измерения; строки и столбцы. Таким образом, свертка каждого фильтра 2-го уровня со стеком карт объектов (выход первого слоя) дает одну карту объектов.
Таким образом, размер третьего измерения на выходе второго слоя равен количеству фильтров во втором слое.
источник
Проверьте эту лекцию и эту визуализацию
Обычно используется свертка типа 2.1. На входе у вас есть изображение NxMx1, затем после первой свертки вы получите N_1xM_1xk_1, поэтому ваше изображение после первой свертки будет иметь k_1 каналов. Новое измерение N_1 и M_1 будет зависеть от вашего шага S и заполнения P: N_1 = (N - 3 + 2P) / S + 1, вы вычисляете M_1 по аналогии. Для первого слоя конвоя у вас будет 3x3xk_1 + k_1 веса. Добавлена k_1 для смещений в нелинейной функции.
Во втором слое у вас есть входное изображение размером N_1xM_1xk_1, где k_1 - новое количество каналов. И после второй свертки вы получите N_2xM_2xk_2 изображение (массив). У вас есть 5x5xk_2xk_1 + k_2 параметров во втором слое.
Для свертки 1x1 с фильтрами k_3 и входом NxMxC (C - количество входных каналов) вы получите новое изображение (массив) NxMxk_3, поэтому 1x1 имеет смысл. Они были представлены в этой статье
Бонус 1: объединение применяется для каждой карты объектов.
Для получения дополнительной информации см. Слайды для курса CNN по Стэнфорду - у вас есть отличная визуализация суммирования свертки по нескольким входным каналам.
источник
То есть ядра в сверточном слое охватывают глубину вывода предыдущего уровня.
Спекуляция:
Бонусный вопрос 2 - это не то, с чем я знаком, но я предполагаю, что параметр глубины в свертке становится дополнительным измерением.
источник