Деформированное ядро ​​свертки, отделимая свертка? Топ-10 потрясающих операций в сверточных нейронных сетях.

машинное обучение

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

Примечание. Ограничено уровнем, следующие мнения могут быть предвзятыми, пожалуйста, поправьте меня. Кроме того, представлены только репрезентативные модели.Некоторые известные модели не будут представлены из-за тех же принципов.Если есть какие-либо упущения, пожалуйста, укажите.

1. Можно ли выполнять свертку только в одной группе? -- Групповая свертка

Групповая свертка Групповая свертка, которая впервые появилась в AlexNet. Из-за ограниченных аппаратных ресурсов в то время операции свертки не могут быть обработаны на одном и том же графическом процессоре при обучении AlexNet. Поэтому автор разделяет карты признаков на несколько графических процессоров для обработки, и, наконец, результаты с нескольких графических процессоров объединяются.

alexnet

Идея групповой свертки имеет далеко идущее влияние.Некоторые современные облегченные сети SOTA (State Of The Art) используют операции групповой свертки для экономии вычислений. Но у сабжа есть вопрос.Если сгруппированную свёртку разбить на разные GPU, то сумма расчёта каждого GPU будет уменьшена до 1/групп, но если всё-таки рассчитать на одном GPU, итоговая общая сумма расчёта будет другой Изменить? Я нашел введение в операции групповой свертки на pytorch, и я надеюсь, что читатели смогут ответить на мои вопросы.

pytroch github

РЕДАКТИРОВАТЬ:

Что касается этой проблемы, друзья пользователя Zhihu@Цай ГуаньюйПредлагает свои идеи:

Я чувствую, что сама группа конв должна сильно уменьшить параметры.Например, когда входной канал 256, выходной канал также 256, размер ядра 3*3, а параметр групповой конв 256*3*3*256 , если группа равна 8, входной и выходной каналы каждой группы равны 32, а параметр равен 8*32*3*3*32, что составляет одну восьмую от исходного. Это мое понимание.

Насколько я понимаю, карты функций каждой группы, выводимые в конце сгруппированной свертки, должны быть объединены конкатенированным способом, а не поэлементным добавлением, поэтому выход канала каждой группы - это входные каналы/#группы, поэтому количество параметры значительно снижены.

2. Чем больше должно быть ядро ​​свертки, тем лучше? -- ядро ​​свертки 3×3

В AlexNet используются некоторые очень большие ядра свертки, такие как ядра свертки 11 × 11 и 5 × 5. Раньше люди думали, что чем больше ядро ​​свертки, тем больше рецептивное поле и видимая информация об изображении.Чем больше, тем лучше полученные черты. При этом большое ядро ​​свертки приведет к всплеску вычислений, что не способствует увеличению глубины модели и снижению вычислительной производительности. Таким образом, в VGG (самое раннее использование) и начальной сети комбинация двух ядер свертки 3×3 более эффективна, чем одно ядро ​​свертки 5×5, а количество параметров (3×3×2+1 VS 5×5 ×1+1) уменьшается, поэтому в дальнейшем в различных моделях широко используются ядра свертки 3×3.

3. Каждый слой свертки может использовать ядро ​​свертки только одного размера? -- Начальная структура

Традиционная стековая сеть в основном представляет собой стек сверточных слоев, каждый слой использует только ядро ​​свертки одного размера, например, в структуре VGG используется большое количество сверточных слоев 3 × 3. Фактически, один и тот же слой карты объектов может использовать несколько ядер свертки разных размеров для получения функций разного масштаба, а затем комбинировать эти функции, полученные функции часто лучше, чем те, которые используют одно ядро ​​свертки, GoogleNet от Google, другими словами , сеть серии Inception использует структуру нескольких ядер свертки:

Первоначальная версия структуры Inception

Как показано на рисунке выше, входная карта признаков одновременно обрабатывается ядрами свертки 1×1, 3×3 и 5×5, а полученные признаки объединяются для получения лучших признаков. Но у этой структуры будет серьезная проблема: количество параметров намного больше, чем одно ядро ​​свертки, такой огромный объем вычислений сделает модель неэффективной. Это приводит к новой структуре:

4. Как уменьшить количество параметров сверточного слоя? -- Узкое место

Команда, которая изобрела GoogleNet, обнаружила, что если бы были введены ядра свертки только нескольких размеров, это принесло бы много дополнительных параметров. Добавляются некоторые ядра свертки размером 1×1, как показано на рисунке:

Добавлена ​​исходная структура с ядром свертки 1×1.

В соответствии с приведенным выше рисунком давайте проведем сравнительный расчет, предполагая, что размерность входной карты объектов составляет 256 измерений, а выходное измерение должно быть 256 измерений. Есть две операции:

  1. 256-мерный ввод напрямую проходит через сверточный слой 3 × 3 × 256 и выводит 256-мерную карту объектов, тогда количество параметров составляет: 256 × 3 × 3 × 256 = 589 824.
  2. 256-мерный вход сначала проходит через сверточный слой 1 × 1 × 64, затем сверточный слой 3 × 3 × 64 и, наконец, сверточный слой 1 × 1 × 256, а выход имеет размерность 256. Количество параметров равно : 256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69 632. Это полностью уменьшает количество параметров первой операции до одной девятой!

Ядро свертки 1 × 1 также считается далеко идущей операцией.В будущем крупные сети будут применять ядро ​​свертки 1 × 1, чтобы уменьшить количество параметров.

5. Труднее ли обучать более глубокие сети? -- Остаточная сеть Resnet

ResNet skip connection

Традиционная сеть наложения сверточных слоев сталкивается с проблемой.При увеличении количества слоев производительность сети становится все хуже и хуже, в основном потому, что при увеличении количества слоев градиент рассеивается все более и более серьезно.Что касается обратного распространения, сложно обучать неглубокие сети. Чтобы решить эту проблему, Хэ Кайминг придумал «остаточную сеть», которая облегчает переход градиента в неглубокую сеть, и этот «пропуск соединения» может принести больше преимуществ.Здесь вы можете сослаться на PPT. :Очень глубокая сеть (ResNet/DenseNet): почему работает Skip Connection и многое другое, и одна из моих статей:Почему ResNet и DenseNet могут быть такими глубокими? В этой статье объясняется, почему остаточный блок может решить проблему дисперсии градиента., вы можете подумать об этом в сочетании с комментариями ниже.

6. Должна ли операция свертки учитывать как каналы, так и регионы? -- Операция DepthWise

Стандартный процесс свертки можно увидеть на рисунке выше.Все каналы в соответствующей области изображения рассматриваются одновременно, вопрос в том, почему должны учитываться и области изображения, и каналы? Почему мы не можем рассматривать проходы и пространственные области отдельно?

Сеть Xception была изобретена на основе вышеуказанных проблем. Сначала мы выполняем отдельные операции свертки для каждого канала, используя столько фильтров, сколько каналов. После получения новых карт характеристик каналов стандартная операция кросс-канальной свертки 1 × 1 выполняется над пакетом новых карт характеристик каналов. Эта операция называется"Глубинная свертка", сокращенно «ДВ».

Эта операция достаточно эффективна. Она превзошла по производительности InceptionV3 в задаче классификации класса imagenet 1000, а также уменьшает большое количество параметров. Проведем математику, предположив, что количество входных каналов равно 3, а количество выходных каналов должно быть 256, два подхода:

1. Напрямую подключите ядро ​​свертки 3×3×256, количество параметров: 3×3×3×256 = 6912.

2. Операция DW выполняется в два этапа Количество параметров: 3×3×3 + 3×1×1×256 = 795, количество параметров уменьшается до одной девятой!

Следовательно, глубинная операция уменьшает множество параметров, чем стандартная операция свертки, и в документе отмечается, что эта модель имеет лучший эффект классификации.

РЕДАКТИРОВАТЬ: 2017.08.25

Через 12 часов после публикации этой статьи пользователь Zhihu прислал мне личное сообщение и познакомил меня с исторической работой Depthwise и Pointwise, а Xception и Mobilenet также процитировали свою 16-летнюю работу, которая является работой Min Wang et al.Factorized Convolutional Neural Networks, в глубине этой статьи функция, выводимая каждым каналом Может быть более одной карты (называемой «базовым слоем»), и разделяемая по глубине свертка в Xception является случаем «одного базового слоя» в этой работе. Заинтересованным читателям рекомендуется обратить внимание на их работу.Вот вступительный пост в блоге:[Глубокое обучение] Сверточный слой ускоряет факторизованные сверточные нейронные сети. И самое раннее о сепарах Введение в свертки, как упоминают авторы Xception, восходит к работе Лорана Сифре в 2014 году.Rigid-Motion Scattering For Image ClassificationРаздел 6.2.

7. Может ли сгруппированная свертка случайным образом группировать каналы? --ShuffleNet

В AlexNet Group Convolution каналы функций равномерно делятся на разные группы, и, наконец, функции объединяются через два полностью связанных слоя Таким образом, функции между разными группами могут быть объединены только в последний момент.Обобщаемость модели является довольно невыгодным. Чтобы решить эту проблему, ShuffleNet каждый раз выполняет перетасовку каналов перед укладкой слоя группового преобразования, и перемешанные каналы назначаются разным группам. После выполнения одной групповой свертки снова выполняется перетасовка канала, затем он разделяется на следующий слой групповой свертки, и этот цикл повторяется.

Из статьи ShuffleNet

После перетасовки каналов функции, выдаваемые групповым преобразованием, могут учитывать больше каналов, а выходные функции, естественно, более репрезентативны. Кроме того, сгруппированная свертка AlexNet на самом деле является стандартной операцией свертки, в то время как операция групповой свертки в ShuffleNet является сверткой по глубине, поэтому ShuffleNet, сочетающий перетасовку каналов и сгруппированную свертку по глубине, может получить очень небольшое количество параметров. скорость, которая превосходит мобильную сеть и сравнима с AlexNet!

Также стоит упомянуть, что MSRA из Microsoft Research Asia недавно проделала аналогичную работу, предложив блок IGC (Interleaved Group Convolution), то есть общую сверточную нейронную сеть с чередованием групповой свертки, которая по форме аналогична двум группам сверток. продукт, модуль Xception можно рассматривать как частный случай чередующейся групповой свертки, особенно рекомендуется посмотреть эту статью:Ван Цзиндун подробно объясняет избранные документы ICCV 2017: общая сверточная нейронная сеть с чередованием групповой свертки

Следует отметить, что Group conv — это метод группировки каналов, а Depthwise + Pointwise — это метод свертки, но оба они применяются в ShuffleNet. Поэтому Group conv и Depthwise + Pointwise не могут быть равны.

8. Все ли характеристики каналов одинаковы? --SEnet

Будь то Inception, DenseNet или ShuffleNet, функции, которые мы генерируем для всех каналов, напрямую объединяются независимо от веса.Так почему же вы думаете, что характеристики всех каналов одинаково влияют на модель?Это хороший вопрос, поэтому вышел SEnet, чемпион ImageNet2017.

Структура SEnet

Набор признаков выводится в предыдущем слое.В это время есть два маршрута.Первый проходит напрямую, а второй сначала выполняет операцию Squeeze (Global Average Pooling), сжимая 2-мерные признаки каждого канала в одномерное. В результате получается вектор каналов признаков (каждое число представляет собой признак соответствующего канала). Затем выполните операцию «Возбуждение» и введите этот столбец векторов функциональных каналов в два полностью связанных слоя и сигмоид, чтобы смоделировать корреляцию между функциональными каналами.Полученный результат фактически представляет собой вес, соответствующий каждому каналу., и взвесить эти веса с исходными признаками (первый способ) через канал умножения масштаба, тем самым завершив распределение весов каналов признаков. Автор подробно объясняет в этой статье:Колонка | Momenta объясняет выигрышную архитектуру ImageNet 2017 SENet

9. Может ли ядро ​​свертки фиксированного размера видеть большую область? -- Расширенная свертка

Стандартное ядро ​​свертки 3×3 может видеть только размер соответствующей области 3×3, но для того, чтобы ядро ​​свертки могло видеть больший диапазон, расширенное ядро ​​свертки делает это возможным. Структура в оригинальной статье расширенного конв показана на рисунке:

Приведенный выше рисунок б можно понимать как размер ядра свертки по-прежнему 3×3, но между каждой точкой свертки имеется 1 отверстие, то есть в зеленой области 7×7 свернуты только 9 позиций красных точек. а остальные точки имеют вес 0. Таким образом, даже если размер ядра свертки остается прежним, видимая им область становится больше. Смотрите этот ответ для подробного объяснения:Как понять расширенную свертка?

10. Должна ли форма ядра свертки быть прямоугольником? -- Деформируемая свертка Деформируемое ядро ​​свертки

Изображение взято из публичного аккаунта Microsoft Research Asia.

Традиционные ядра свертки, как правило, имеют прямоугольную или квадратную форму, но MSRA представляет довольно нелогичное понимание,Считается, что форму ядра свертки можно изменить, а деформированное ядро ​​свертки заставить смотреть только на интересующую область изображения., так что выявленные функции лучше.

Для этого можно добавить слой фильтра непосредственно перед исходным фильтром.Этот слой фильтра узнаёт смещение позиции (смещение) следующего слоя ядра свертки.Это просто добавляет слой фильтров,или напрямую касается слой фильтров в исходной сети в качестве фильтра для изучения смещений, поэтому фактическое увеличение вычислений довольно мало, но оно может реализовать деформируемое ядро ​​свертки, идентифицирующие функции работают лучше. Подробную интерпретацию MSRA смотрите по этой ссылке:Деформируемые сверточные сети: новый горизонт для компьютеров.

Вдохновение и мышление

Сейчас все больше и больше моделей CNN эволюционируют от гигантских сетей к облегченным сетям, а точность моделей становится все выше и выше. Теперь внимание отрасли сосредоточено не на повышении точности (потому что она и так очень высока), а на компромиссе между скоростью и точностью, и все надеются, что модель будет быстрой и точной. Таким образом, от оригинальных AlexNet и VGGnet, к более мелким сериям Inception и Resnet, к mobilenet и ShuffleNet, которые можно портировать на мобильный терминал (объем можно уменьшить до 0,5 Мб!), мы можем наблюдать некоторые тенденции:

С точки зрения ядра свертки:

  1. Большое ядро ​​свертки заменяется несколькими маленькими ядрами свертки;
  2. Ядро свертки одного размера заменяется ядром свертки нескольких размеров;
  3. Ядра свертки фиксированной формы, как правило, используют деформируемые ядра свертки;
  4. Используйте ядро ​​свертки 1 × 1 (структура узкого места).

Аспекты канала сверточного слоя:

  1. Стандартная свертка заменяется глубинной сверткой;
  2. Используйте сгруппированную свертку;
  3. Используйте перетасовку каналов перед группировкой свертки;
  4. Расчет веса канала.

Соединение сверточных слоев:

  1. Используйте пропуск соединения, чтобы сделать модель глубже;
  2. Плотное соединение, так что каждый слой объединяет выходные данные других слоев (DenseNet).

вдохновленный

По аналогии с операцией взвешивания канала, можно ли также взвешивать межуровневое соединение сверточных слоев? Станет ли комбинация узких мест + групповой конв + перетасовка каналов + глубина стандартной конфигурацией для уменьшения количества параметров в будущем?

Если у вас есть еще идеи или мнения, пожалуйста, оставьте комментарий, хорошая идея стоит общения. Кроме того, мой короткий номер книги:Искусственный интеллект, в короткой книге будет еще несколько технических статей, таких как охлаждение графического процессора и т. Д., И на Zhihu будет опубликовано больше теоретических статей, просим обратить внимание.