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

Вид: 10136|Ответ: 0

Эволюция архитектуры нейронных сетей: всесторонний обзор более чем десяти архитектур от LeNet5 до ENet

[Скопировать ссылку]
Опубликовано 24.04.2018 13:08:47 | | | |
LeNet5
LeNet5 появилась в 1994 году и является одной из первых сверточных нейронных сетей, продвинувших область глубокого обучения. С 1988 года, после множества успешных итераций, эта новаторская работа Яна Лекуна получила название LeNet5 (см.: Обучение на основе градиента, применяемое к распознаванию документов).


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

Функции LeNet5 можно кратко описать следующим образом:

Сверточные нейронные сети используют три слоя в качестве последовательности: сверточный, пулированный, нелинейный → Это, вероятно, ключевая особенность глубокого обучения изображениям с момента этой статьи!
Используйте свёртки для извлечения пространственных признаков
Подвыборка с использованием отображения в пространственное среднее
Нелинейность в виде гиперболического касательного (tanh) или S-образного (сигмовидного).
Многослойные нейронные сети (MLP) служат окончательными классификаторами
Разреженные матрицы соединений между слоями позволяют избежать больших вычислительных затрат

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

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

Дэн Сиресан Нет
В 2010 году Дэн Клаудиу Сиресан и Юрген Шмидхубер опубликовали реализацию самой ранней нейронной сети GPU. Эта реализация представляет собой 9-уровневую нейронную сеть, работающую на графическом процессоре NVIDIA GTX 280, включая прямое и обратное распространение.

AlexNet
В 2012 году Алекс Крижевски опубликовал книгу Alexet (см.: ImageNet Classification with Deep Convolutional Neural Networks) — более глубокую и более широкую версию LeNet, которая с большим отрывом выиграла сложный конкурс ImageNet.


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

Используйте модифицированную линейную единицу (ReLU) в качестве нелинейности
Используйте технику Dropout, чтобы избирательно игнорировать отдельные нейроны во время тренировки, чтобы избежать переподгонки модели
Переопределите большой пул, чтобы избежать среднего эффекта среднего пула
Сократьте время обучения с видеокартой NVIDIA GTX 580

На этом этапе GPU могут обеспечивать большее количество ядер, чем CPU, а время обучения можно увеличить в 10 раз, что позволяет создавать большие наборы данных и более крупные изображения.

Успех AlexNet привёл к небольшой революции. Сверточные нейронные сети теперь являются основой глубокого обучения и стали синонимом «больших нейронных сетей, которые теперь могут решать полезные задачи».

Overfeat
В декабре 2013 года лаборатория Яна Лекуна в Нью-Йоркском университете предложила производное AlexNet — Overfeat (см.: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). В этой статье также была предложена обучающая ограничивающая рамка, что привело к появлению множества статей на ту же тему. Я считаю, что лучше научиться разделять объекты, чем изучать искусственные ограничивающие рамки.

VGG
Сеть VGG Оксфордского университета (см.: Очень глубокие сверточные сети для распознавания крупномасштабных изображений) — первая сеть, использующая меньшие фильтры 3×3 на каждом сверточном слое и объединяющая их для обработки в виде сверточной последовательности.

Это, по-видимому, противоположно принципу Лене, при котором для получения схожих признаков в изображении используются большие свёртки. В отличие от фильтров 9×9 или 11×11 от AlexNet, фильтры начинают уменьшаться, приближаясь к печально известной аномалии свёртки 1×1, которую LeNet пытается избежать — по крайней мере, на первом уровне сети. Однако VGG добился значительного прогресса, используя несколько сверток 3×3 подряд для имитации эффектов более крупных рецептивных полей, таких как 5×5 и 7×7. Эти идеи также использовались в более современных сетевых архитектурах, таких как Inception и ResNet.


Сети VGG используют несколько слоёв 3×3 свертки для характеристики сложных признаков. Обратите внимание, что 3-й, 4-й, 5-й блоки VGG-E: 256×256 и 512×512 3×3 используются несколько раз поочерёдно для извлечения более сложных признаков и их комбинаций. Этот эффект эквивалентен большому классификатору 512×512 с тремя сверточными слоями. Это, очевидно, означает, что существует множество параметров и возможностей для обучения. Но эти сети сложно обучать, и их приходится делить на меньшие и накапливать слой за слоем. Это связано с отсутствием надёжного способа регуляризации модели или ограничения большого пространства поиска из-за большого количества параметров.

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

Сеть в сети
Идея Network in Network (NiN, см. статью: Network In Network) проста и замечательна: использование свёртки 1×1 для обеспечения более композитных возможностей для особенностей сверточного слоя.

Архитектура NiN использует пространственные слои MLP после отдельных сверток для лучшего объединения признаков до других слоёв. Опять же, можно считать, что свёртки 1×1 противоречат исходному принципу LeNet, но на самом деле они могут комбинировать сверточные признаки лучше, чем невозможно, просто накладывая больше сверточных признаков. Это отличается от использования исходного пикселя в качестве входа следующего слоя. Свертки 1×1 часто используются для спатического объединения признаков на картах объектов после свёртки, так что они могут использовать очень мало параметров и делить их между всеми пикселями этих объектов!


Способность MLP значительно повысить эффективность отдельных сверточных признаков путём объединения их в более сложные группы. Эта идея впоследствии была использована в некоторых современных архитектурах, таких как ResNet, Inception и их производные.

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

GoogleLeNet и Inception
Кристиан Сегеди из Google начал стремление снизить вычислительные нагрузки на глубокие нейронные сети и разработал GoogLeNet — первую архитектуру Inception (см.: Going Deeper with Convolutions).

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

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

Он и его команда разработали модуль Inception:


На первый взгляд это по сути параллельная комбинация сверточных фильтров 1×1, 3×3, 5×5. Но главная идея Inception — уменьшить количество признаков перед дорогими параллельными модулями с 1×1 сверточными блоками (NiN). Это обычно называют «узким местом». Этот раздел будет объяснен в разделе «узкое место» ниже.

GoogLeNet использует магистраль без инцепционного модуля в качестве начального слоя, за которой следует средний пулинг слоя плюс softmax-классификатор, похожий на NiN. Этот классификатор имеет гораздо меньшее количество операций, чем классификаторы AlexNet и VGG. Это также привело к очень эффективному проектированию сети, см. статью: Анализ моделей глубоких нейронных сетей для практических применений.

Узкий слой
Вдохновлённый NiN, узкий слой Inception уменьшает количество признаков в каждом слое, а значит, и количество операций; Поэтому время вывода можно держать низким. Количество признаков уменьшается в 4 раза, прежде чем данные проходят через дорогие сверточные модули. Это значительно снижает вычислительные затраты и обеспечивает успех архитектуры.

Давайте проверим это конкретно. Теперь, когда у вас есть 256 входов признаков и 256 выходов признаков, предположим, что слой Inception может выполнять только 3×3 свёртки, что в сумме составляет 256×256×3×3 свёртки (почти 589 000 операций умножения и накопления (MAC)). Возможно, это превышает наш вычислительный бюджет, например, чтобы запустить слой за 0,5 миллисекунды на серверах Google. Вместо этого мы решили сократить количество признаков, которые нужно было запутать — это было 64 (то есть 256/4). В этом случае мы начинаем с свёртки 256 -> 64 1×1, затем 64 свёртки на всех ветвях Начала, затем свёртку 1×1 из признака 64 -> 256, и теперь операция выглядит следующим образом:

256×64 × 1×1 = 16 000
64×64 × 3×3 = 36 000
64×256 × 1×1 = 16 000

По сравнению с предыдущими 600 000, сейчас всего 70 000 вычислительных объёмов, что почти в 10 раз меньше.

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

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

Inception V3 (и V2)
Кристиан и его команда — очень плодовитые исследователи. В феврале 2015 года был представлен пакетно-нормализованный Inception как Inception V2 (см. статью: Batch Normalization: Accelerating Deep Network Training by Reduction Internal Covariate Shift). Пакетная нормализация вычисляет среднее и стандартное отклонение всех отображений признаков на выходе одного слоя и использует эти значения для нормализации их откликов. Это эквивалентно «отбеливанию» данных, так что все нейронные отображения отвечают в одном диапазоне и имеют нулевое среднее. Это помогает при обучении, когда следующему слою не нужно учиться смещению от входных данных, а также сосредоточено на том, как лучше объединить эти особенности.

В декабре 2015 года команда выпустила новую версию модуля Inception и аналогичную архитектуру (см. статью: Rethinking the Inception Architecture for Computer Vision). В статье лучше объясняется оригинальная архитектура GoogLeNet, давая больше деталей о выборах дизайна. Первоначальная идея такова:

Тщательно строя сеть, глубина и ширина сбалансированы, чтобы максимально эффективно поступать информация в сеть. Перед каждым пулом добавьте картирование функций.
По мере увеличения глубины глубина или количество особенностей сетевого слоя также систематически увеличивается.
Используйте каждое увеличение глубины слоя, чтобы увеличить связывание признаков перед следующим слоем.
Используя только 3×3 свёртки, заданные фильтры 5×5 и 7×7 можно разделить на несколько 3×3, когда это возможно. Посмотрите изображение ниже


В результате новый Inception стал:


Фильтр также можно разделить, выравнив свёртку на более сложные модули:


При выполнении вычислений инцепции модуль Inception также может уменьшить размер данных, обеспечивая пулирование. Это по сути похоже на параллельный запуск простого пулового слоя при выполнении свёртки:


В Inception также используется слой пула и softmax в качестве финального классификатора.

ResNet
В декабре 2015 года произошли новые изменения, совпавшие с выходом Inception V3. У ResNet простая идея: подать выход двух последовательных сверточных слоёв и обойти вход на следующий слой (см. статью: Глубокое остаточное обучение для распознавания изображений).


Это похоже на некоторые старые идеи до этого. Но в ResNet они разделяют два слоя и применяются в большем масштабе. Тридинг после двух слоёв — ключевая интуиция, потому что разделение одного слоя не даёт улучшения. Проход через уровень 2 можно рассматривать как небольшой классификатор или сеть в сети.

Это первый случай, когда количество сетевых слоёв превышает 100, и даже 1000 слоёв можно обучить.

ResNet, имеющий большое количество сетевых слоёв, начинает использовать сетевой слой, похожий на узкий слой Inception:


Этот слой обрабатывает меньшее количество признаков, сначала запутывая меньшее количество признаков на 1×1 с меньшим выходом (обычно 1/4 входа), затем используя слой 3×3, а затем слой 1×1. Подобно модулю Inception, это обеспечивает низкую вычислительную интенсивность при одновременном насыщенном сочетании признаков.

ResNet использует относительно простой начальный слой на входах: базовый слой из 7×7 томов с двумя пулами. Сравните это с более сложными и менее интуитивно понятными Inception V3 и V4.

ResNet также использует слой пула плюс softmax в качестве финального классификатора.

Другие инсайты о ResNet возникают ежедневно:

ResNet можно считать как параллельным, так и смежным, поскольку входы и выходы (выходы) во многих модулях рассматриваются как параллельные, а выходы каждого модуля связаны непрерывно.
ResNet также можно рассматривать как комбинацию параллельных или непрерывных модулей (см. статью: Остаточные сети — экспоненциальные ансамбли относительно мелких сетей).
Было установлено, что ResNet обычно работает параллельно на сетевых блоках на уровнях 20-30. Вместо того чтобы непрерывно течь по всей длине сети.
Когда ResNet возвращает выходные данные на вход, как RNN, сеть можно считать более биологически надёжной корковой моделью (см. статью: Мосты между остаточным обучением, рекуррентными нейронными сетями и зрительной корой).

Inception V4
Вот ещё одна версия Inception от Кристиана и его команды, похожая на Inception V3:


Inception V4 также объединяет модуль Inception и модуль ResNet:


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

Учитывая простоту сети, которую легко понять и исправить, ResNet может быть лучше.

SqueezeNet
SqueezeNet (см. статью: SqueezeNet: точность уровня AlexNet, в 50 раз меньше параметров и размер модели <0,5 МБ) — это недавно опубликованная архитектура, которая перерабатывает концепции из ResNet и Inception. Лучшая модель архитектурного проектирования сетей меньше, и параметры пока не требуют сложных алгоритмов сжатия.

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

Для получения дополнительной информации о ENet см. статью ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet — это сеть кодирования, сложения и декодирования. Кодировщик — это обычная конструкция CNN для классификации. Декодер — это сеть апсэмплинга, которая распространяет классификацию обратно к исходному образу для сегментации. Здесь используются только нейронные сети и нет других алгоритмов сегментации изображений.

ENet разработан так, чтобы использовать минимально возможное количество ресурсов в начале. Вот почему у него такой маленький скрипт — объединённая сеть энкодеров и декодеров занимает 0,7 МБ с точностью 16 кадров. Даже при такой небольшой модели ENet по точности сегментации сопоставим или превосходит другие решения нейронных сетей.

Анализ модулей
Анализ модуля CNN, проведённый в статье («Систематическая оценка достижений CNN на ImageNet»), очень полезен:

Используйте ELU нелинейность без batchnorm или ReLU с batchnorm.
Используйте изученное преобразование цветового пространства RGB.
Используйте стратегию линейного снижения скорости обучения.
Используйте сумму средних и больших объединённых слоев.
Используйте мини-партию примерно от 128 до 256. Если это слишком много для вашей видеокарты, просто уменьшите скорость обучения до этого размера.
Используйте полностью связный слой в качестве свёртки и усредняйте все прогнозы для окончательного прогноза.
Когда исследование увеличивает размер обучающего набора, оно обнаруживает наличие плато, которого не достигнут
Чистота данных важнее, чем их объём.
Если не удаётся увеличить размер входного изображения, уменьшите шаг на следующих слоях — это даёт тот же эффект.
Если у вашей сети сложная и высокооптимизированная архитектура, например, GoogLeNet, нужно быть осторожным при её модификации.

Другие архитектуры, на которые стоит обратить внимание
FractalNet (см. статью: FractalNet: Ultra-Deep Neural Networks without Residuals) использует рекурсивную архитектуру, которая не тестируется на ImageNet. Эта архитектура является производным от ResNet или, более широко, от ResNet.

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

Но кто-то может задаться вопросом, почему мы тратим столько времени на создание архитектуры? Почему бы не сказать нам, что использовать с данными? Как вы объединяете модули? Эти вопросы хорошие, но всё ещё находятся в стадии исследования, и есть статья, на которую можно обратиться: Нейронные сети с дифференцируемой структурой.

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

Если вас интересует сравнение архитектуры нейронных сетей и вычислительной производительности, смотрите статью: Анализ глубоких нейронных сетевых моделей для практических применений.







Предыдущий:Несколько методов расчёта времени выполнения Python
Следующий:Antminer B3 подсказывает, что копать!
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com