В этом блоге мы кратко рассмотрим архитектуру Inception от Google в 2014 году и версии сети Inception.

Проблемы

До появления сети Inception в исследовании предпринимались попытки создать более глубокие модели, потому что наиболее простой способ улучшить производительность глубоких нейронных сетей - увеличить их размер, но с некоторыми из проблем, с которыми сталкиваются исследователи, являются:

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

Давайте поймем, что в этом примере у нас есть изображение размерности n * n * c, и мы применяем слой Conv с фильтром 3 * 3, будет выполнено общее количество умножений за один шаг будет 3 * 3 * c, тогда как в слое свертки 5 * 5 filter общее количество умножений будет 5 * 5 * c , т. е. фильтр 5 * 5 в 2,78 раза (25/9) дороже вычислений, чем фильтр 3 * 3.

  • Всегда трудно выбрать размер фильтра в сверточных слоях из-за такого огромного различия в расположении информации, выбор правильного размера ядра для операции свертки становится сложной задачей. Ядро большего размера предпочтительнее для информации, которая распространяется более глобально, а меньшее ядро ​​ предпочтительнее для информации, которая распространяется более локально. .

Решение

Чтобы решить все эти проблемы, Google в 2014 году представил начальную архитектуру.

Исследователи всегда стараются сделать его лучше, чем раньше, что приводит к нескольким версиям Inception, наиболее распространенными из которых являются Inception-v1, Inception-v2, Inceptio-v3, Inception-v4, Inception-Resnet-v2.

Давайте посмотрим на каждого по отдельности:

Начало-v1

Полная архитектура разделена на три части:

  • Стебель: это начальная часть архитектуры после входного уровня, состоящая из простых слоев максимального пула и слоев свертки с активацией Relu.
  • Классификатор вывода: это последняя часть сети после выравнивания предыдущего слоя, состоящая из полностью связанного слоя, за которым следует функция softmax.
  • Начальный модуль: это средняя и наиболее важная часть архитектуры, которая отличает ее от других сетей.

Давайте углубимся в это.

Вот «наивный» начальный блок. Почему бы не использовать фильтры с несколькими размерами на одном уровне !!

Он применяет свертки с 3 разными размерами фильтров (1 * 1, 3 * 3, 5 * 5) и максимальное объединение на выходе предыдущего уровня параллельно, затем объединяет его и отправляет следующему начальному модулю. Приводите к объединению функций из разных сверток и максимального пула в один слой без использования отдельных слоев для разных операций.

Обратите внимание, что объединение выполняется только с одинаковыми размерами высоты и ширины, поэтому отступ применяется к каждому слою, чтобы сделать все с одинаковым размером.

Выше показан всего лишь наивный начальный блок, чтобы сделать его менее затратным в вычислениях, фильтр 1 * 1 Conv используется перед сверткой 3 * 3 и 5 * 5. Свертки 1 * 1 помогают в сокращении количества входных каналов, поэтому, когда применяются свертки 3 * 3 и 5 * 5, количество произведенных операций умножения теперь очень мало, что помогает уменьшить вычислительные затраты. дорогие операции.

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

Inception - это глубокая сеть, чтобы предотвратить «вымирание» средней части сети (проблема исчезающего градиента), авторы ввели два вспомогательных классификатора. Softmax применяется к каждому из них, а затем Вспомогательные потери вычисляются на тех же метках выходного классификатора.

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

Общий убыток = реальный убыток + (0,3 * вспомогательный убыток1) + (0,3 * вспомогательный убыток2)

Начало v-2

Inception v2 работает по тому же подходу, что и Inception-v1, с некоторыми изменениями, которые делают его более эффективным с точки зрения скорости и точности.

Какие новости

Вот некоторые обновления в Inception-v2, касающиеся inception-v1:

  • Свертки 5 * 5 заменены двумя свертками 3 * 3, чтобы сделать это менее затратным с точки зрения вычислений, мы уже описали, что свертка 5 * 5 в 2,28 раза дороже вычислений, чем 3 * 3. свертка, поэтому наложение двух 3 * 3 Conv приводит к похвастанию производительностью.

  • Некоторая свертка 3 * 3 заменяется комбинацией сверток 1 * 3 и 3 * 1. Это помогает повысить скорость и производительность вычислений. Обратите внимание, что и 1 * 3, и 3 * 1 должны применяться один за другим, причина в том, что 1 * 3 conv дает только горизонтальные функции (один вид функции), тогда как 3 * 1 Conv дает вертикальные особенности ввода. Этот метод оказался на 33% дешевле, чем простая свертка 3 * 3.

  • Некоторая свертка 7 * 7 заменяется комбинацией сверток 1 * 7 и 7 * 1.

Все вышеперечисленные обновления используются для создания 3 типов начальных блоков и объединения их для получения архитектуры Inception v2.

Начало v-3

Inception v3 похож на inception v2 с некоторыми обновлениями функций потерь, оптимизатора и пакетной нормализации.

Какие новости

Вот некоторые обновления в Inception-v3, касающиеся inception-v2:

  • Используется оптимизатор RMS prop
  • Нормализация партии используется во вспомогательном классификаторе
  • Сглаживание меток (тип регуляризирующего компонента, добавляемого к функции потерь, который предотвращает переоснащение сети).

Начало v4

Архитектура сети была сделана глубже в Inception v4 с изменением основной части (основа относится к начальной части архитектуры Inception) и сделаны единообразные выборы для блоков Inception.

Какие новости

  • Изменение стержневой части
  • Увеличено количество начальных модулей.
  • Начальные модули сделаны более единообразными, т. Е. В модулях используется одинаковое количество фильтров.
  • Три типа начальных модулей называются A, B и C (такие же начальные модули, как и в inception-v2).

Начало ResNet v2

Вдохновленные производительностью ResNet, в начальные модули вводятся остаточные соединения.

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

Какие новости

  • Остаточные соединения вводятся в начальных модулях.
  • Слой объединения в начальном блоке заменяется остаточным соединением.
  • Сеть стала глубже за счет увеличения количества начальных модулей.

Полная архитектура Inception v2