В этом блоге мы кратко рассмотрим архитектуру 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