Достижения Deep Learning 2: влиятельные архитектуры сверточных нейронных сетей

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

Изучение CNN в основном основано на процессе, который начинается с локальных функций непосредственно от входных данных до постепенного создания высокоуровневых функций. Идея иерархического обучения впервые была предложена Хьюбелом и Визелем в 1959 году. Они открыли концепцию процесса обучения первичной зрительной коры (так называемый эксперимент с кошкой), которая позже стала источником вдохновения для исследования. CNN. Затем в 1980 году Фукусима и др. построили первую обучающуюся искусственную нейронную сеть под названием Neocognitron.

LeNet 5 (1994)

Одна из самых первых CNN, представленных в 1994 году, разработанная Яном ЛеКуном, одним из пионеров в области глубокого обучения. LeNet 5 смог получить представление об особенностях изображения (ввода), используя свертку с ядрами фильтров, которые состоят из обучаемых параметров. Поскольку эти фильтры смотрят только на локальный патч во время одной свертки, которая также известна как рецептивное поле, сети требовалось меньшее количество обучаемых параметров по сравнению с обычными моделями нейронных сетей. Однако свертка по всей области ввода позволяет слоям сети отображать распределенные пространственные объекты по всей области ввода, которые известны как карты признаков.
Одно из основных различий между обычными нейронными сетями и обычными искусственными нейронными сетями заключается в том, что связи между нейронами не полностью связаны. Вместо этого учитываются только локальные пятна на свертку. Это помогает сэкономить на больших вычислительных затратах. LeNet 5 использует последовательность из трех типов слоев: свертку, нелинейность и объединение, что в дальнейшем становится стандартным порядком компоновки слоев CNN. Эта архитектура включает 7 уровней, 3 сверточных слоя и 2 полностью связанных слоя (или, можно сказать, обычное подключение к нейронной сети). Для обеспечения нелинейности использовалась функция сжатия гиперболического тангенса. В целом LeNet 5 заложил основу для CNN.

Один из основных недостатков заключается в том, что в те дни не было большой вычислительной мощности, доступной до недавнего времени, как у графических процессоров, а центральные процессоры были недостаточно быстрыми. Этот факт заставил людей не обращать особого внимания на это открытие какое-то время до 2012 года (правда, были и небольшие улучшения, такие как Dan Ciresan Net в 2010 году). С 1998 по 2012 год в области информатики было много достижений и разработок. Особенно быстрый рост использования Интернета и быстрый рост использования бытовой электроники генерировал все больше и больше данных, таких как изображения и другие формы данных. Кроме того, внедрение графических процессоров в вычисления общего назначения и становление все более мощных центральных процессоров сделало решение проблем глубокого обучения возможным и эффективным.

AlexNet (2012)

Сетевая модель, которую можно считать первой современной успешной архитектурой CNN, разработанная Алексом Крижевски в 2012 году. AlexNet намного глубже, чем LeNet, и способна с большим отрывом победить в конкурсе ImageNet в 2012 году. Это была первая модель CNN, принявшая участие в конкурсе ImageNet, и достигнутый успех прославил AlexNet. Классическая архитектура AlexNet состоит из 5 слоев свертки и 2 полностью связанных слоев. Есть несколько аспектов, которые делают эту сеть такой мощной. Крижевский и др. Использовали выпрямленные линейные блоки, которые обеспечивают лучшую производительность по сравнению с tanh и сигмоидами. Чтобы ввести обобщение или предотвратить чрезмерную подгонку сети, была использована техника, называемая выпадением, которая в основном сбрасывает нейронные связи между соседними слоями во время фазы обучения. Важным фактом является то, что сеть обучается с использованием графических процессоров Nvidia GTX 580. Это сделало процесс обучения в 10 раз быстрее, чем при использовании ЦП, из-за гораздо большего количества ядер в ГП по сравнению с ЦП. Поскольку AlexNet глубже, чем LeNet, после этого в игру вступила концепция более глубокого изучения сетевой модели. Поэтому некоторые исследователи начали создавать более глубокие сети.

ВГГ (2014)

С концепцией более глубоких CNN сети VGG были представлены Симоняном и др.. Сети VGG отличаются от AlexNet двумя основными факторами: глубина сети и размер фильтра свертки. В документе представлены несколько конфигураций глубины сети. Среди них VGG 16 и VGG 19 - самые известные архитектуры с 13 и 16 сверточными уровнями соответственно и 3 полносвязными уровнями для каждой сети. Размер сверточного фильтра или размер воспринимающего поля, используемого в AlexNet, составляет 11 × 11 для ImgeNet. Но в сетях VGG авторы использовали рецептивные поля 3 × 3 вместо соответствующих полей большего размера, которые использовались в предыдущих наиболее эффективных записях, включая 11 × 11 с шагом 4 дюйма (Крижевский и др., 2012) и 7 × 7 с шагом 2 дюйма. (Zeiler & Fergus, 2013; Sermanet et al., 2014). Идея состоит в том, чтобы имитировать большее восприимчивое поле последовательным стеком 3 × 3. Как объясняется в статье, два сверточных слоя 3 × 3 покрывают эффективное воспринимающее поле 5 × 5, а три таких слоя 3 × 3 имеют эффективное воспринимающее поле 7 × 7. Почему они используют такую ​​методологию вместо того, чтобы придерживаться старых более крупных рецептивных полей? Есть две основные причины. Во-первых, это позволяет сети включать прямой поток с тремя нелинейными исправлениями вместо одного. Дополнительное введение нелинейности делает решающую функцию более разборчивой. Во-вторых, этот метод значительно сокращает количество параметров. Если мы поймем это в числовой перспективе; трехслойный сверточный стек 3 × 3 с числом n входных и выходных каналов имеет 3 (n × 3 × 3 × n) = 27n², но для одного сверточного слоя 7 × 7 с такими же каналами потребуется (n × 7 × 7 × n) = 7²n² = 49n². Это примерно на 81% больше параметров, которые напрямую влияют на время обучения и мощность. Но здесь возник недостаток - большое количество слоев, следовательно, было разработано большое количество функций (карт). Это сделало развертывание сетей VGG дорогостоящим с точки зрения вычислений как с точки зрения памяти, так и времени.

GoogLeNet / Inception V1 (2014)

Также под кодовым названием Inception (версия 1), который установил новую современную классификацию в задаче ImageNet в 2014 году. GoogLeNet - это 22-х слойная CNN, но общий архитектурный вид сильно отличается от типичного CNN. Интересен тот факт, что, несмотря на глубину сети и разветвленную архитектуру, количество параметров в GoogLeNet в двенадцать раз меньше, чем в AlexNet. Это приводит к значительному сокращению вычислительной нагрузки и в то же время является более точным, чем современные показатели того времени (ImageNet). Авторы сделали все это возможным, придумав модуль Inception.

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

Основная идея слоя узкого места заключается в применении сверток 1 × 1 перед свертками 3 × 3 и сверток 5 × 5, как показано в модуле Inception на рисунке выше. Как поясняется в документе, «В общем, начальная сеть - это сеть, состоящая из модулей вышеуказанного типа, наложенных друг на друга, со случайными слоями максимального объединения с шагом 2, чтобы вдвое уменьшить разрешение сетки». Что делает слой узкого места, так это вместо свертки всех входных функций в выходы с использованием 3 × 3 или 5 × 5, что является дорогостоящим с точки зрения вычислений, сначала выполняет свертки 1 × 1 с уменьшенным количеством входных функций. Затем выполните свертки с ветвями модуля Inception, которые имеют размер 3 × 3 и 5 × 5. Наконец, объединение выходных функций. Если мы поймем это на примере (как описано в статье), давайте возьмем модуль Inception (первый модуль), который имеет 192 входных канала. Этот модуль имеет 128 фильтров 3 × 3 и 32 фильтра 5 × 5. Количество вычислений для каждого фильтра будет 192 × 3 × 3 × 128 = 221 184 и 192 × 5 × 5 × 32 = 153 600, что очень много и может взорваться по мере того, как он проникает глубже в сеть. Поэтому, как объяснялось ранее, модуль Inception применяет свертки 1 × 1 перед применением более крупных сверток. В статье они использовали 16 сверток 1 × 1, поэтому будет выполнено 192 × 1 × 1 × 16 вычислений. Кроме того, общее количество вычислений с 3 × 3 будет 192 × 1 × 1 × 16 + 16 × 3 × 3 × 128 = 21 504, а с 5 × 5 будет 192 × 1 × 1 × 16 + 16 × 5 × 5. × 32 = 15 872. Эти оценки показывают, что модуль Inception может сократить количество операций почти в 10 раз по сравнению с обычными соединениями CNN.

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

Inception V2 (начало 2015 г.)

В начале 2015 года Сегеди и др. Представили вторую версию Inception, Inception V2. Что касается новизны, в Inception введена пакетная нормализация. Как правило, пакетная нормализация вводит процесс отбеливания данных для изученных функций. Это делается путем вычисления среднего значения и стандартного отклонения всех карт функций и нормализации ответов, сделав их нулевым средним и одинаковым диапазоном. Это помогает процессу обучения не беспокоиться об изучении смещений данных входных данных на следующем уровне.

Inception V3 (конец 2015 г.)

Следующая версия вышла в конце того же года с новой версией Inception, Inception V3. Они выполнили несколько модификаций. Разложил фильтры 5 × 5 и 7 × 7 на несколько фильтров 3 × 3. Этот процесс также известен как факторизация сверток.

Второй - факторизация сверток n × n сверткой 1 × n, за которой следует свертка n × 1. Теоретически этот метод снижает вычислительные затраты по мере роста n, но на практике факторизация хорошо работает на средних размерах сетки. Поэтому авторы использовали свертки 1 × 7, за которыми следовали 7 × 1.

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

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

ResNet (2015)

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

Допустим, мы добавили в сеть еще один слой. Ошибка обучения, чтобы не выходить за рамки предыдущей ошибки (перед добавлением слоя), может быть два варианта. Новый добавленный уровень не выполняет обучение или выполняет только отображение идентичности. Формулируя эту идею, авторы ввели остаточный каркас. Эта структура включает остаточные модули, которые обеспечивают решение проблемы деградации. Если мы рассматриваем один модуль, он создает прямой путь между входом и выходом к модулю (как показано на изображении выше). Эти ярлыки соединения выполняют сопоставление идентификаторов и не содержат каких-либо параметров или вычислительной сложности. Поскольку это отображение идентичности обеспечивает исходные условия сети перед добавлением дополнительного уровня, дополнительный уровень должен только изучить остатки. Это называется остаточным отображением, и оно не оказывает нежелательного влияния на ошибку обучения. Если мы посмотрим на изображение выше, F (x) - это остаточное отображение, а x - отображение идентичности. Остаточный модуль, наконец, объединяет отображение как поэлементное сложение и проходит через нелинейность для генерации вывода. Кроме того, в документе утверждается, что остаточный блок может содержать два или три слоя, поскольку функция остатка (F) может делать это гибко. Следовательно, представленная остаточная сеть и простая сеть (без остаточных связей) имеют примерно одинаковое количество параметров, глубину, ширину и вычислительные затраты, за исключением незначительных поэлементных добавлений. Авторы оценили и показали, что архитектура ResNet с глубиной 152 слоев достигла большей точности классификации и вычислительной эффективности, чем сети VGG и GoogLeNet.

MobileNet (2017)

Сети CNN по своей сути являются ресурсоемкими и громоздкими для приложений реального времени с ограниченными аппаратными возможностями, такими как мобильные приложения или встроенные системы. Поэтому в 2017 году Ховард и др. представляет MobileNet. для решения этой проблемы. Основная идея состоит в том, чтобы сделать сеть более эффективной, заменив стандартные свертки на разделимые по глубине свертки. Основная идея стандартной свертки состоит в том, чтобы объединить выходные данные локального патча по входной области (двухмерной) и по всей входной глубине. Разделимые по глубине свертки - это форма факторизованных сверток. По сути, он разделил стандартный процесс свертки на два отдельных шага. Во-первых, это глубинная свертка, а во-вторых, точечная свертка. Свертка по глубине выполняет свертку по квадратной области в пределах одного среза глубины. Точечная свертка объединяет информацию, полученную на предыдущем шаге, по всей глубине с использованием свертки 1 × 1. Архитектура MobileNet построена с использованием обсуждаемых разделимых по глубине сверток и единственной полной свертки для первого уровня.

За последнее десятилетие было проведено много исследований и было введено множество вариаций архитектуры CNN. Но основной принцип и структура остаются схожими. Чтобы полностью понять интуицию и алгоритмы, лежащие в основе обсуждаемых архитектур, настоятельно рекомендуется ознакомиться с соответствующей опубликованной статьей (также упомянутой здесь). Когда мы изучаем общее развитие с течением времени, мы можем ясно увидеть, насколько быстро развивается область. Вообще говоря, с каждым годом ошибка классификации (от ILSVRC) для классификации CNN становится меньше, и в 2016 году она превзошла человеческую ошибку в 5%. В этой статье обсуждаются только самые влиятельные архитектуры CNN, которые сформировали текущее состояние дел. Но тем не менее, в литературе есть много других архитектурных разработок и алгоритмов, которые следует обсудить.