Модульная, многолучевая, факторизованная, сжатая, масштабируемая… Все в CNN в настоящее время, но что привело нас сюда… Мы проведем вас через основные вехи в истории проектирования сверточных нейронных сетей… Вы не только узнаете, но и получите тоже весело 🤓

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

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

Поэтому сверточные нейронные сети (СНС) впервые были использованы для решения задачи классификации изображений, и именно в этой задаче исследователи начали конкурировать. Благодаря ускоренному исследованию более точных классификаторов для ImageNet Challenge они рассмотрели более общие вопросы, связанные со статистическим обучением нейронных сетей с высокой пропускной способностью, что привело к значительному прогрессу в глубоком обучении.

⚠️Важное примечание: предполагается, что читатель знаком с основами CNN[1].

VGGNet

Мы представляем нашу первую CNN, названную VGGNet [2]. Это прямой преемник AlexNet [3], которая считается первой «глубокой» нейронной сетью, и обе сети имеют общего предка, LeNet Лекуна [4].

В этом посте мы начнем с VGGNet из-за его особенностей. Несмотря на свой возраст, это одна из очень немногих моделей DL, которые все еще работают сегодня, в то время как самые последние изобретения уже устарели. Более того, VGGNet устанавливает общие компоненты и структуры, принятые последующими CNN.

Как вы должны знать, сверточная нейронная сеть начинается с входного слоя, как показано на рисунке 1. Он имеет те же размеры, что и входное изображение, 224x224x3.

Затем VGGNet накладывает первый сверточный слой (CL 1), который включает 64фильтров размера 3x3 с активным заполнением и шагом 1, что дает выходной тензор с 224x224x64.

Затем он объединяет CL 2, который использует тот же размер фильтра 3x3 на 64 каналах с той же конфигурацией, в результате чего получается карта объектов с теми же размерами.

После этого максимальное объединение с размером фильтра 2x2, активным заполнением и шагом 2 используется для уменьшения пространственного разрешения карт объектов с 224x224x64 до 112x112x64.

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

Кроме того, я поместил «модуль 1» выше этих трех слоев, потому что модуль определяется как процессор, работающий с определенным разрешением. Таким образом, модуль 1 VGGNet работает с разрешением 224x224 и дает карту объектов с разрешением 112x112, на которой модуль 2 продолжает работать.

Точно так же модуль 2 также имеет два CL с 3x3 фильтрами, которые используются для извлечения признаков более высокого уровня, за которыми следует максимальное объединение, чтобы разделить на 2 пространственное разрешение, но количество фильтров умножается на 2, чтобы удвоить количество каналов в выходная карта объектов.

Без сомнения, вы уже можете догадаться, что будет в следующих модулях. Каждый модуль обрабатывает входную карту объектов, удваивая свои каналы, деля на 2 свое пространственное разрешение и так далее. Это невозможно делать вечно; пространственное разрешение уже 7x7 в модуле 6.

Таким образом, VGGNet включает операцию сглаживания для перехода от 3D к 1D, затем применяет один или два плотных слоя и, БАМ!, применяется softmax для вычисления оценок класса (здесь это 1000labels).

Все это вы видели на своих курсах CNN. Давайте резюмируем шаблоны проектирования, которые вводит VGGNet, чтобы превзойти всех своих предшественников с точки зрения точности:

Модульная архитектура обеспечивает симметрию и однородность сверточных слоев. Действительно, строительные блоки сверточных слоев с похожими характеристиками, а затем выполнение понижающей дискретизации между модулями помогают сохранить ценную информацию на этапе извлечения признаков и позволяют использовать небольшие фильтры. Другими словами, поле восприятия двух 3x3 последовательных фильтров может быть эквивалентно полю восприятия одного 5x5. Кроме того, каскад небольших фильтров усиливает нелинейность и может привести к еще большей точности, чем один слой с фильтром большего размера. Кроме того, небольшие фильтры ускоряют вычисления на графических процессорах Nvidia.

Операция максимального пула — это эффективный метод понижения частоты дискретизации по сравнению с пулом средних значений или последовательной сверткой (с шагом более 1). По сути, максимальное объединение позволяет фиксировать инвариантность данных с помощью пространственной информации. Важно подчеркнуть, что это сокращение пространственной информации требуется для задач классификации изображений, чтобы достичь результата оценки класса, но также это оправдано «гипотезой многообразия». В компьютерном зрении предположение о многообразии гласит, что реалистичные изображения в 23-мерном пространстве представляют собой очень ограниченное подпространство.

Пирамидальная форма относится к общему плавному понижению частоты дискретизации в сочетании с увеличением количества каналов во всей архитектуре. Действительно, умножение каналов компенсирует потерю репрезентативной выразительности, вызванную непрерывным снижением пространственного разрешения изученных карт признаков. Во всех слоях пространство признаков становится синхронно уже и глубже, пока оно не будет готово к выравниванию и подаче в качестве входного вектора на полносвязные слои. Интуитивно каждый признак можно рассматривать как объект, присутствие которого будет количественно определяться на протяжении всего вычисления логического вывода. Ранние сверточные слои захватывают основные формы, поэтому требуется меньше объектов. Более поздние слои объединяют эти формы для создания более сложных объектов с несколькими комбинациями, что требует большого количества каналов для их сохранения.

Зарождение

Далее представим вторую CNN, появившуюся в том же году, но чуть позже, чем VGGNet [2], и имя которой Inception [5]. Название вдохновлено знаменитым фильмом Кристофера Нолана, и эта сеть вызвала дебаты о «более глубоких CNN», которые быстро превратились в проблему. Действительно, исследователи глубокого обучения поняли, что чем больше им удается правильно обучить более глубокую нейронную сеть, тем большей точности они достигают, особенно когда речь идет о сложных задачах классификации, таких как ImageNet. В двух словах, большее количество сложенных слоев повышает способность нейронной сети к обучению, позволяя ей фиксировать сложные шаблоны и обобщать сложные наборы записей.

Подождите минутку☝️Я имею в виду, когда сказал «когда им удастся обучить более глубокую сеть». Наложение большего количества слоев действительно дорого обходится и усложняет обучение нейронных сетей.

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

Чтобы получить быстрое представление о причинах, обратное распространение градиента потерь использует правило цепочки производных для использования ранее рассчитанных градиентов. Другими словами, вычисление градиента, связанного с первыми слоями, включает член, являющийся произведением градиентов, полученных из последующих слоев. Поскольку входные данные нормализованы, а параметры инициализированы между [0, 1], градиенты, оцененные в нейронной сети, также будут меньше 1. Следовательно, интенсивность сигнала градиента со временем постепенно уменьшается из-за последовательных умножений на коэффициент ниже 1.

Вернемся к Inception, где исследователи моделируют несколько слоев на одном уровне глубины. Таким образом, способность нейронной сети к обучению увеличивается, а пространство ее параметров расширяется без углубления, чтобы избежать исчезновения градиентов.

На рис. 2 показан взгляд изнутри 🔍 на этот новый уровень многомасштабной обработки. Сосредоточившись на синих компонентах 🟦, мы видим входной слой nxnx3 и выходной слой nxnki. Вместо применения k сверточных фильтров размера 3x3 несколько слоев обработки применяются параллельно. Один и тот же ввод будет проходить через свертки 1x1, свертки 3x3, свертки 5x5 и максимального объединения (с шагом 1 для сохранения разрешения) одновременно. Затем все полученные карты объектов размеров: nxnxk1, nxnxk3, nxnxk5 и nxnxk объединяются в выходную карту объектов размера: nxnki.

Все, это начальный многомасштабный слой, который не работает😅 Здесь мы увидим красные 🟥 компоненты в действии. Начальный слой характеризуется агрегацией многомасштабных признаков, возникающих в результате различных областей восприятия и путей обработки. Однако каждый путь дает не менее k каналов, где k — количество входных каналов. Объединение нескольких слоев с несколькими масштабами наверняка приведет к возникновению исключений Недостаточно памяти.

🔔Помните, что я упоминал ранее: этап даунсэмплинга с использованием слоя max-pooling не влияет на количество каналов.

Чтобы преодолеть это, первоначальные разработчики ввели точечные свертки, которые представляют собой просто классические сверточные слои только с фильтрами разрешения: 1x1 и меньшим количеством фильтров, r < k, тем самым эффективно уменьшая глубину карт объектов без ущерба для релевантных данных, извлеченных на этом уровне. обработка.

Inception представил следующие основные результаты проектирования:

Proliferate Paths основан на идее включения множества ветвей в архитектуру для моделирования ансамблей подсетей в рамках одной нейронной сети. Интересно, чему нас может научить история. В конце концов, такое многомасштабное расслоение действительно тяжелое и никогда не получило широкого распространения, однако возможность комбинировать несколько путей внутри слоя послужила толчком для разработки следующей нейронной сети.

Точечная свертка теперь является чрезвычайно полезным и распространенным инструментом в компьютерном зрении. Это экономически эффективная операция с небольшими параметрами, а время ее обработки относительно быстрое. Используя его, мы можем эффективно уменьшить количество каналов, которые у нас есть в выходной карте объектов, заставляя нейронную сеть требовать меньше памяти и вычислительной мощности. Я знаю, что это довольно парадоксально, когда вы сталкиваетесь с этим в первый раз 😵 и если вы все еще задаетесь вопросом 🤔 как добавление дополнительных слоев точечной свертки уменьшает количество параметров, имейте в виду, что количество параметров каждого слоя сильно влияет по количеству входных каналов.

Реснет

Далее идет ResNet [6], одно из самых революционных изобретений в области глубокого обучения и одна из самых цитируемых научных статей🥇. Эта популярность связана с тем, что ResNet — первая CNN, которой удалось сложить более 100 слоев. В то время 100 слоев были совершенно безумны из-за этой проблемы исчезновения градиента. Теперь мы говорим о тысяче миллиардов параметров в трансформаторах. Когда я говорю вам, что ResNet имеет 100 слоев, вы должны сделать вывод, что они навсегда решили проблему исчезновения градиента, и именно это сделало его знаменитым. Сегодня мы больше не слышим о проблеме исчезновения градиента.

Давайте рассмотрим революционный трюк вместе. Мы снова поддерживаем модульную архитектуру VGGNet и меняем содержимое одного блока. Как показано на рисунке 3, остаточный блок имеет nxnx3 на входе, а также nxnx3 на выходе. Сохранение количества каналов в таких блоках ОБЯЗАТЕЛЬНО.

🔍 Заглянем внутрь. Как обычно, одним из путей обработки будет стандартная свертка с фильтрами 3x3, затем рядом с ней мы добавим соединение ярлыка/пропуска 💡, т. е. тождественную функцию, которая передает вход прямо на выход. Вот и все, ребята; это одно из самых революционных новшеств в глубоком обучении. Сначала это может показаться странным, но чем больше вы об этом думаете, тем более логичным это становится.

Таким образом, Resnet будет представлять собой стек модулей плюс понижение частоты дискретизации, затем дополнительные модули плюс снова понижение частоты дискретизации и т. д. Внутри модулей будут остаточные блоки, которые содержат короткие соединения, связывающие вход с выходом. Следовательно, можно представить себе некую информационную магистраль, идущую от выхода (выхода) к входу (входу), проходящую исключительно через эти короткие пути. Именно поэтому ResNet решает проблему исчезновения градиента.

Все еще не понял? 😵 Подумайте еще раз о том, как не будет потери градиента при протекании последнего через короткое соединение (функция тождества). Как только вы его получите👍, вы все еще можете задаться вопросом 🤔 почему он сохраняет высокую способность к обучению и даже повышает ее?

Интуитивно нужно учитывать две вещи:

A) Во-первых, ярлыки ResNet позволяют обходить любые ненужные уровни обработки с учетом входных данных, потому что некоторые слои в глубокой нейронной сети могут быть связаны с обнаружением определенных шаблонов, которые применяются к подмножеству объектов.

Б) Во-вторых, мы можем предположить, что вход содержит ответ, и цель вычислительных уровней состоит в том, чтобы уточнить его до тех пор, пока класс не будет выведен. Следовательно, имеет смысл сохранить исходный входной поток, добавляя результаты обработки на каждом уровне в качестве итеративного уточнения.

📢 Сообщество ImageNet от ResNet решило не делать челлендж каждый год, так как проблема решена и дебаты почти закончились. В результате исследователи стали более заинтересованы в поиске более эффективных способов решения проблемы. Например, они пытаются уменьшить общее количество FLOPS или объем памяти. Это то, что я собираюсь обсудить в следующих нейронных сетях.

Мобильная сеть

Наша первая CNN в эпоху минимизации затрат — это MobileNet [7]. Это компактная CNN с меньшим количеством параметров, которая быстро работает на мобильных платформах, обеспечивая при этом высокую производительность.

💡 Трюк MobileNet заключается в том, чтобы разложить операцию свертки на двухэтапную сверхэффективную обработку. Пришло время перейти к деталям.

Как видно на рисунке 4, классический сверточный слой проходит через 3D-фильтры, каждый из которых дает канал на выходной карте объектов. В качестве альтернативы MobileNet предлагает свертку по глубине, где отдельно применяется связка только 2D-фильтров, т. е. каждый фильтр проходит по всем каналам входного тензора.

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

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

🔔Помните, что я говорил в Начале: когда мы хотим изменить количество каналов с минимальными затратами, мы используем точечную свертку.

Таким образом, MobileNet действительно применяет точечную свертку к картам объектов, полученным в результате свертки по глубине. Как видно на рисунке 5, мы можем использовать столько фильтров 1x1, сколько захотим, чтобы сгенерировать столько каналов, сколько захотим. Например, мы делаем раз k, чтобы получить нашу типичную карту объектов размером nxnxk.

🔍 Если мы заглянем внутрь модуля MobileNet, то здесь, на рис. 5, мы увидим сначала свертку по глубине, которая работает с двухмерной пространственной информацией, а затем точечную свертку, которая объединяет и обрабатывает информацию о каналах вдоль z- измерение.

Мобильная сеть v2

Это не конец. MobileNet выпустила вторую версию. MobileNet v2 [8] представляет собой остаточную нейронную сеть, т. е. она складывает остаточные блоки, чтобы идти глубже, за исключением того, что внутри слоев она разбивает операцию свертки, чтобы быть рентабельной.

💡MobileNet v2 разделяет слои на группу, которая занимается обработкой многомерных данных, и другую, которая сжимает и передает информацию на соседние уровни.

🔍 давайте взглянем на блок MobileNet v2 на рисунке 6. Сначала мы используем точечную свертку для достижения высоких размерностей k > r, затем мы эффективно анализируем информацию, используя глубинную свертку, а затем возвращаемся к низким размерностям, используя, один раз опять точечная свертка. Кроме того, мы подчеркиваем, что необходимо добавить остаточное короткое соединение от входа к выходному слою.

Вы можете задаться вопросом 🤔 как такое сжатие может работать без снижения производительности. Если это так, я приглашаю вас еще раз подумать о многочисленных допущениях, лежащих в основе использования систематической субдискретизации со времен VGGNet.

Эффективная сеть

Вы добрались до EfficientNet [9], которая является последней CNN, которую я собираюсь обсудить в этом посте. Несмотря на то, что он был выпущен в конце 2019 года, он уже устарел. Эта сеть зашкаливает и намного превосходит все остальные нейронные сети, как видно на рисунке 7.

Теперь давайте подробно рассмотрим, что делает его таким мощным. EfficientNet — это MobileNetv2 с особыми возможностями определения размера сети. Честно говоря, я надеюсь, что вы не будете разочарованы 😒 твист, так как это действительно просто, но очень эффективно.

Следовательно, EffectiveNet также складывает инвертированные остаточные блоки, но подвергает сомнению произвольный выбор глубины, ширины и разрешения нейронной сети. В двух словах, глубина сети соответствует количеству слоев в сети. Ширина связана с количеством нейронов в слое или, что более уместно, с количеством фильтров в сверточном слое. Разрешение — это высота и ширина ввода.

💡Разработчики EfficientNet предлагают простой, но эффективный метод масштабирования, который использует составной коэффициент ɸ для принципиального равномерного масштабирования ширины, глубины и разрешения сети. ɸ – определяемый пользователем глобальный коэффициент масштабирования (целое число), который определяет количество доступных ресурсов, тогда как α, β и γ определяют, как назначать эти ресурсы глубине, ширине и разрешению сети соответственно.

В результате гиперпараметры — α, β и γ — можно определить с помощью поиска по сетке, установив ɸ=1. Из-за небольшого размера сети вычисления будут быстрыми. Когда оптимальные гиперпараметры определены, составной коэффициент ɸ можно увеличить, чтобы получить более крупные и точные модели. Вот как создаются различные версии EfficientNet: от B1 до B7, где целое число рядом с B указывает значение составного коэффициента.

👊 Совершенно удивительно, что использование этой умной эвристики определения размера сети 🧪 превосходит все современные CNN, даже несмотря на то, что все структуры и шаблоны дизайна такие же, как у MobileNet v2.

Вымотались 🥱 Мы закончили. Мы вместе совершили путешествие во времени 🕕, так как 2014 год — это предыстория глубокого обучения. Теперь вы можете распознать VGGNet, ResNet или EfficientNet, когда увидите их. Кроме того, вы знаете о значительных улучшениях, которые постепенно внедрялись в CNN, и о том, какие проблемы они решали.

Тем не менее, я только коснулся поверхности этих документов. Стоит прочитать эксперименты, которые представлены во многих из них, чтобы узнать о ходе исследований, которые были предприняты для достижения результата.

Таким образом, не стесняйтесь узнать больше, и, в частности, не стесняйтесь проверить EfficientNetv2 [10], который был выпущен в конце 2021 года.

Рекомендации

[1] Сумит Саха, Полное руководство по сверточным нейронным сетям, TDS, 2018 г.

[2] Симонян и др., Очень глубокие сверточные сети для крупномасштабного распознавания изображений, 2014 г.

[3] Крижевский и др., Классификация ImageNet с помощью глубоких сверточных нейронных сетей, 2012 г.

[4] Янн Лекун, Сверточные нейронные сети LeNet-5, 1998 г.

[5] Szegedy et al., Углубляясь в свертки, 2014 г.

[6] Он и др., Глубокое остаточное обучение для распознавания изображений, 2016 г.

[7] Г. Ховард и др., MobileNets: эффективные сверточные нейронные сети для приложений мобильного зрения, 2017 г.

[8] Сандлер и др., MobileNetV2: инвертированные остатки и линейные узкие места, 2018 г.

[9] Тан и др., EfficientNet: переосмысление масштабирования модели для сверточных нейронных сетей, 2019 г.

[10] Тан и др., EfficientNetV2: меньшие модели и более быстрое обучение, 2021 г.