1 , введение модели
GoogLeNet, как чемпион ILSVRC в задаче классификации в 2014 году, превзошел VGGNet и другие модели с частотой ошибок 6,65%.По сравнению с двумя предыдущими чемпионами ZFNet и AlexNet, точность классификации была значительно улучшена. от имениGoogLeNet может знать, что это сетевая структура, разработанная инженерами Google, и имя GoogLeNetЕще больше дани LeNet. Основной частью GoogLeNet является его внутренняя структура подсети Inception, которая вдохновлена NIN и прошла четыре итерации версии (Inception_v1-4). В таблице ниже представлена временная шкала, предложенная Inception_v1-4.
Таблица сравнения производительности различных версий Inception
Вообще говоря, самый прямой способ улучшить производительность сети — увеличить глубину и ширину сети, но слепое увеличение принесет много проблем:
1) Параметров слишком много.Если набор обучающих данных ограничен, его легко переобучить;
2) Чем больше сеть и больше параметров, тем больше вычислительная сложность, и ее сложно применять;
3) Чем глубже сеть, тем легче возникают проблемы с дисперсией градиента (градиент возвращается и легко исчезает), что затрудняет оптимизацию модели.
Мы надеемся уменьшить параметры при увеличении глубины и ширины сети.Чтобы уменьшить параметры, мы, естественно, думаем о том, чтобы превратить полное соединение в разреженное соединение. Однако, с точки зрения реализации, фактическое количество вычислений не будет качественно улучшено после того, как полное соединение станет разреженным соединением, поскольку большинство аппаратных средств оптимизировано для расчета плотной матрицы.Хотя разреженная матрица имеет небольшой объем данных, время расчета составляет очень долго трудно сократить. В этой ситуации исследователи Google предложили метод Inception.
2 , структура модели
Как показано на рисунке, по сравнению с предыдущей структурой сверточной нейронной сети, в дополнение к увеличению глубины, GoogLeNet также увеличивает ширину сети.Вся сеть формируется путем наложения множества блочных подсетей.Сеть представляет собой начало структура. Для более подробного понимания Inception далее более подробно описаны Inception_v1, Inception_v2, Inception_v3 и Inception_v4.
Inception_v1
Inception_v1 использует разные ядра свертки на одном уровне и объединяет результаты свертки; на следующих двух рисунках показаны два модуля свертки a и b, используемые Inception_v1.
Сделайте следующие описания для приведенного выше рисунка:
1. Использование ядер свертки разного размера означает рецептивные поля разных размеров, а окончательное сращивание означает слияние признаков разного масштаба;
2. Причина, по которой размер ядра свертки равен 1, 3 и 5, в основном заключается в облегчении выравнивания. После установки шага свертки = 1, если pad = 0, 1 и 2 установлены соответственно, элементы одного размера могут быть получены после свертки, а затем эти элементы можно напрямую соединить вместе;
3. В статье написано, что пулинг очень эффективен во многих местах, поэтому Inception тоже встроен.
4. Чем дальше находится сеть, тем более абстрактны признаки, и рецептивное поле, участвующее в каждом признаке, также больше, поэтому с увеличением количества слоев увеличивается и соотношение сверток 3x3 и 5x5.
Однако использование ядра свертки 5x5 по-прежнему требует огромного объема вычислений. С этой целью статья опирается на NIN2 и использует ядро свертки 1x1 для уменьшения размерности.
Например: выходные данные предыдущего слоя — 100x100x128, после сверточного слоя 5x5 с 256 выходами (шаг = 1, площадка = 2) выходные данные — 100x100x256. Среди них параметры сверточного слоя 128х5х5х256. Если выходные данные предыдущего слоя проходят через сверточный слой 1x1 с 32 выходами, а затем проходят через сверточный слой 5x5 с 256 выходами, окончательные выходные данные по-прежнему будут 100x100x256, но количество параметров свертки будет уменьшено до 128x1x1x32 + 32x5x5x256. , примерно в 4 раза меньше.
Конкретный улучшенный начальный модуль выглядит следующим образом:
Конфигурация сетевых параметров Inception_v1 в GoogLeNet
Сетевой уровень | размер ввода | ядерный размер | выходной размер | Количество параметров |
---|---|---|---|---|
Сверточный слой C_ 11 | H× W ×C_1 | 1 ×1 × C_2 /2 | frac H 2 × frac W 2 × C_2 | (1 ×1 × C_1 +1) × C_2 |
Сверточный слой C_ 21 | H × W × C_2 | 1 ×1 × C_2 /2 | frac H 2 × frac W 2 × C_2 | (1 ×1 × C_2 +1) × C_2 |
Сверточный слой C_ 22 | H × W × C_2 | 3 ×3 × C_2 /1 | H × W × C_2 /1 | (3 ×3 × C_2 +1) × C_2 |
Сверточный слой C_ 31 | H × W × C_1 | 1 ×1 × C_2 /2 | frac H 2 × frac W 2 × C_2 | (1 ×1 × C_1 +1) × C_2 |
Сверточный слой C_ 32 | H × W × C_2 | 5 ×5 × C_2 /1 | H × W × C_2 /1 | (5 ×5 × C_2 +1) × C_2 |
Слой понижающей дискретизации S_ 41 | H × W × C_1 | 3 ×3/2 | frac H 2 × frac W 2 × C_2 | 0 |
Сверточный слой C_ 42 | frac H 2 × frac W 2 × C_2 | 1 ×1 × C_2 /1 | frac H 2 × frac W 2 × C_2 | (3 ×3 × C_2 +1) × C_2 |
Объединить слой M | frac H 2 × frac W 2 × C_2 ( ×4) | соединение | frac H 2 × frac W 2 ×( C_2 ×4) | 0 |
Inception_v2
Inception_v2 объединяет сложенную форму различных ядер свертки и объединяет результаты свертки; изменение свертки 5 * 5 на две последовательные свертки 3 * 3 говорит о том, что свертка 5 * 5 выглядит как полное соединение 5 * 5, поэтому просто используйте две свертки 3 * 3. Первый уровень - это свертка, а второй уровень эквивалентен полному соединению, что может увеличить глубину сети и уменьшить множество параметров. Структура модели следующая:
В Inception_v2 также было введено использование пакетной нормализации.После этого обучение будет сходиться быстрее, а обучение, естественно, будет более эффективным, что может уменьшить использование отсева.
Количество начальных модулей 28x28 увеличено с 2 до 3.
Используются начальный модуль, слои Ave и Max Pooling См. таблицу.
Слой пула больше не используется между двумя начальными модулями; вместо этого перед конкатенацией в модулях 3c и 4e используется слой conv/pooling stride-2.
Подробный список параметров
Inception_v3
Inception_v3 пытается скомбинировать глубину на основе v_2, и ввод изменяется на 299×299×3.
Inception_V3 использует Inception_V2 для разложения свертки 5×5 на две свертки 3×3, а также для получения асимметричной декомпозиции, разложения свертки 3x3 на 3x1 и 1x3 и дальнейшего получения структуры A, которая смешивает два метода разложения. Три структуры Inception_V3: следующее:
Inception_v4
Структура Inception_v4 сложнее предыдущей версии.Используется не только предыдущая Inception,но и подсеть вложена в подсеть.Автор также постаралсяОстаточное соединение.Входные данные Inception_v4: 384×384×3.
Суммировать
-
Inception V1- Построены конв. 1x1, 3x3, 5x5 и пул 3x3филиальная сеть, использовать одновременноMLPConvиглобальный средний пул, расширить ширину сети сверточных слоев и повысить адаптивность сети к масштабу;
Inception V2-- придумалBatch Normalization,заменять Dropoutи LRN, его эффект регуляризации во много раз ускоряет обучение больших сверточных сетей, и точность классификации после сходимости также может быть значительно улучшена, при обученииVGGИспользуйте два ядра свертки 3×3 вместо ядер свертки 5×5, чтобы уменьшить количество параметров и улучшить способность сети к обучению;
Inception V3--представилFactorization, разбиение большей двумерной свертки на две меньшие одномерные свертки, например разбиение свертки 3´3 на свертки 1´3 и свертки 3´1, с одной стороны, экономит массу параметров, ускоряет операции и уменьшает переоснащение, добавляя слой нелинейных расширенных возможностей выражения модели, за исключениемInception Moduleиспользует ветки внутри, а также использует ветки в ветках (Network In Network In Network);
Inception V4-- ИсследованоInception ModuleкомбинироватьResidual Connection, в сочетании сResNetЭто может значительно ускорить обучение и значительно повысить производительность.При построении сети Inception-ResNet также разработана более глубокая и оптимизированная модель Inception v4, которая может обеспечить сопоставимую производительность.
Воспроизвести код:GoogLeNet(V1-V4)Pytorch Reappearance.zip-Ресурсы документации по глубокому обучению-Скачать CSDN