www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Архитектура нейронной сети

Дата публикации Mar 23, 2017

Глубокие нейронные сети и Deep Learning - это мощные и популярные алгоритмы. И большая часть их успеха заключается в тщательном проектировании архитектуры нейронной сети.

Я хотел вернуться к истории проектирования нейронных сетей за последние несколько лет и в контексте глубокого обучения.

Для более глубокого анализа и сравнения всех сетей, представленных здесь, см. Нашнедавняя статья(а такжеобновленный пост). Одна представительная фигура из этой статьи здесь:

Top1 против операций, размер ∝ параметров. ТОП-1 точности одной культуры в зависимости от количества операций, необходимых для одного прямого прохода. Смотрите такжеВот

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

LeNet5

Это 1994 год, и это одна из самых первых сверточных нейронных сетей, которая подтолкнула область глубокого обучения. Эта новаторская работа Янна ЛеКуна была названаLeNet5после многих предыдущих успешных итераций с 1988 года!

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

Возможности LeNet5 можно суммировать как:

  • Сверточная нейронная сеть использует последовательность из 3 слоев: свертка, объединение, нелинейность -> Это может быть ключевой особенностью глубокого обучения для изображений, начиная с этой статьи!
  • использовать свертку для извлечения пространственных объектов
  • подвыборка с использованием пространственного среднего карт
  • нелинейность в виде tanh или сигмоидов
  • многослойная нейронная сеть (MLP) в качестве окончательного классификатора
  • скудная матрица соединений между слоями, чтобы избежать больших вычислительных затрат

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

Разрыв

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

Dan Ciresan Net

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

AlexNet

В 2012 году Алексей Крижевский выпустилAlexNetкоторая была более глубокой и более широкой версией LeNet и с большим отрывом выиграла трудную конкуренцию ImageNet.

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

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

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

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

Overfeat

В декабре 2013 года лаборатория NYU от Yann LeCun выступила сOverfeat, который является производным от AlexNet. В статье также предлагается изучение ограничивающих рамок, что впоследствии привело к появлению многих других статей на ту же тему. Я считаю, что лучше научиться сегментировать объекты, чем искусственные ограничивающие рамки.

VGG

Сети VGGиз Оксфорда были первыми, кто использовал гораздо меньшие фильтры 3 × 3 в каждом сверточном слое, а также комбинировал их как последовательность сверток

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

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

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

Сеть-в-сети

Сеть-в-сети(NiN) отлично понимал, как использовать свертки 1x1 для обеспечения большей комбинационной мощности свойств сверточных слоев.

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

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

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

GoogLeNet и Начало

Кристиан Сегеди из Google начал квест, направленный на уменьшение вычислительной нагрузки глубоких нейронных сетей, и разработалGoogLeNet первая архитектура Inception,

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

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

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

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

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

Слой узкого места

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

Давайте рассмотрим это подробно Допустим, у вас есть 256 входных и 256 выходных функций, и, скажем, начальный уровень выполняет только 3x3 свертки. Это должны быть свернутые 256x256 x 3x3 (589 000 с многократным накоплением или операциями MAC). Это может быть больше, чем вычислительный бюджет, который мы имеем, скажем, для запуска этого слоя за 0,5 миллисекунды на сервере Google. Вместо этого мы решили сократить число функций, которые необходимо свернуть, скажем, до 64 или 256/4. В этом случае мы сначала выполняем 256 -> 64 свертки 1 × 1, затем 64 свертки на всех начальных ветвях, а затем снова используем свертку 1x1 из 64 -> 256 признаков. Операции сейчас:

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

В общей сложности около 70 000 против почти 600 000, которые мы имели раньше. Почти в 10 раз меньше операций!

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

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

Начало V3 (и V2)

Кристиан и его команда - очень эффективные исследователи. В феврале 2015Нормализованная партиябыл введен как Inception V2. Пакетная нормализация вычисляет среднее значение и стандартное отклонение всех карт объектов на выходе слоя и нормализует их ответы с этими значениями. Это соответствует «отбеливанию» данных, и, таким образом, все нейронные карты имеют отклики в том же диапазоне и с нулевым средним. Это помогает обучению, так как следующему слою не нужно изучать смещения во входных данных, и можно сосредоточиться на том, как наилучшим образом комбинировать функции.

В декабре 2015 года они выпустилиновая версия модулей Inception и соответствующая архитектураЭта статья лучше объясняет оригинальную архитектуру GoogLeNet, давая гораздо больше подробностей о выборе дизайна. Список оригинальных идей:

  • максимизировать поток информации в сеть, тщательно создавая сети, которые балансируют глубину и ширину. Перед каждым объединением увеличивайте карты возможностей.
  • при увеличении глубины число элементов или ширина слоя также систематически увеличиваются
  • использовать увеличение ширины на каждом слое, чтобы увеличить комбинацию элементов перед следующим слоем
  • по возможности используйте только свертку 3х3, учитывая, что фильтр 5х5 и 7х7 можно разложить на кратные 3х3. Смотрите рисунок:
  • таким образом, новый начальный модуль становится:
  • Начальные модули могут также уменьшить размер данных, предоставляя пул при выполнении начальных вычислений. Это в основном идентично выполнению свертки с параллельными шагами с простым уровнем объединения:

В начале все еще используется объединяющий слой плюс softmax в качестве окончательного классификатора.

RESNET

Революция произошла в декабре 2015 года, примерно в то же время, что и Inception v3.RESNETесть простые идеи: подать вывод двух последовательных сверточных слоев и также обойти вход на следующие слои!

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

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

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

Этот слой уменьшает количество объектов на каждом уровне, сначала используя свертку 1x1 с меньшим выходным сигналом (обычно 1/4 от входного), а затем слой 3x3, а затем снова свертку 1x1 для большего числа объектов. Как и в случае с модулями Inception, это позволяет поддерживать низкий уровень вычислений, одновременно обеспечивая богатую комбинацию функций. См. Раздел «слой узких мест» после «GoogLeNet и начало».

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

ResNet также использует объединяющий слой плюс softmax в качестве окончательного классификатора

Дополнительные идеи об архитектуре ResNet появляются каждый день:

  • ResNet можно рассматривать как как параллельные, так и последовательные модули, просто думая о входе как о параллельном подключении ко многим модулям, в то время как выход каждого модуля соединяется последовательно
  • ResNet также можно рассматривать какнесколько ансамблей параллельных или последовательных модулей
  • было обнаружено, что ResNet обычно работает с блоками с относительно небольшой глубиной ~ 20–30 слоев, которые действуют параллельно, а не последовательно по всей длине сети.
  • ResNet, когда выход подается обратно на вход, как в RNN, сеть можно рассматривать какбио-правдоподобная модель коры

Начало V4

И Кристиан и команда снова в этом сновая версия Inception,

Модуль Inception после основы довольно похож на Inception V3:

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

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

В связи с этим приз за чистую и простую сеть, которую можно легко понять и изменить, теперь достается ResNet.

SqueezeNet

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

ENet

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

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

Как вы можете видеть на этом рисунке, ENet имеет наивысшую точность по каждому параметру среди всех нейронных сетей!

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

Анализ модулей

Систематическая оценка модулей CNNбыл представлен, Выяснилось, что выгодно использовать:

• используйте нелинейность ELU без Batchnorm или ReLU с ним.

• применить изученное преобразование цветового пространства RGB.

• использовать политику линейного снижения скорости обучения.

• использовать сумму среднего и максимального уровней пула.

• используйте размер мини-пакета около 128 или 256. Если он слишком велик для вашего графического процессора, уменьшите скорость обучения пропорционально размеру пакета.

• использовать полносвязные слои как сверточные и усреднять прогнозы для окончательного решения.

• при инвестировании в увеличение размера тренировочного комплекта проверьте, не достигнуто ли плато. • чистота данных важнее размера.

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

• если ваша сеть имеет сложную и высоко оптимизированную архитектуру, такую ​​как, например, GoogLeNet, будьте осторожны с модификациями.

Xception

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

Модуль Xception представлен здесь:

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

Архитектура имеет 36 этапов свертки, что делает ее похожей на ResNet-34. Но модель и код так же просты, как ResNet, и гораздо более понятны, чем Inception V4.

Доступна реализация этой сети через Torch7ВотДоступна реализация в Keras / TFВот,

Интересно отметить, что недавняя архитектура Xception была также вдохновленанаша работа над отделимыми сверточными фильтрами,

MobileNets

Новый МobileNetsархитектура также доступна с апреля 2017 года. В этой архитектуре используются отдельные свертки для сокращения количества параметров. Отдельная свертка такая же, как у Xception выше В настоящее время в статье утверждается, что наблюдается значительное сокращение параметров - около 1/2 в случае FaceNet, как сообщается в документе. Вот полная архитектура модели:

MobileNets

К сожалению, мы протестировали эту сеть в реальных приложениях и обнаружили, что она работает крайне медленно на партии 1 на GPU Titan Xp. Посмотрите здесь сравнение времени вывода на изображение:

  • Resnet18: 0,002871
  • alexnet: 0.001003
  • vgg16: 0,001698
  • Squeezenet: 0,002725
  • мобильный телефон: 0.033251

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

Другие известные архитектуры

FractalNetиспользует рекурсивную архитектуру, которая не была протестирована в ImageNet, и является производной или более общей ResNet.

Обновить

Для обновления по сравнению, пожалуйста,увидеть этот пост,

Будущее

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

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

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

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

Подтверждения

Этот пост был вдохновлен дискуссиями с Абхишеком Чауразия, Адамом Пашке, Сангпилом Кимом, Альфредо Канциани и другими в нашей электронной лаборатории в Университете Пердью.

Об авторе

У меня почти 20-летний опыт работы в нейронных сетях как в аппаратном, так и в программном обеспечении (редкая комбинация). Смотрите обо мне здесь:средний,страница в Интернете,филолог,LinkedIn, и больше…

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map