Переведено с:к data science.com/neural-net для…
оригинальное название:Neural Network Architectures
Оригинальный автор:Eugenio Culurciello
Глубокие нейронные сети и глубокое обучение — мощные и популярные алгоритмы. Их успех связан с тщательным проектированием архитектуры нейронных сетей.
Я хотел бы вернуться к истории проектирования нейронных сетей за последние несколько лет в контексте глубокого обучения.
Для более глубокого анализа и сравнения нейронных сетей, обсуждаемых здесь, пожалуйста, прочитайте нашу недавнююстатья. Репрезентативная таблица из этой статьи выглядит следующим образом:
LeNet5
Сверточные нейронные сети (CNN) продвинули область глубокого обучения, и LeNet5, появившаяся в 1994 году, является одной из первых CNN. Эта основополагающая работа Яна Лекуна названа в честь нескольких успешных итераций, начиная с 1988 года.LeNet5.
Архитектура LeNet5 является фундаментальной, особенно в том, что касается понимания того, что функции изображения распределены по всему изображению и [операции свертки с обучаемыми параметрами] [являются эффективным способом извлечения схожих функций в нескольких областях] с небольшим количеством параметров. В то время графические процессоры не использовались для обучения, а графические процессоры были медленными. Таким образом, возможность сохранять параметры и расчеты является ключевым преимуществом. Это отличается от случая крупномасштабных многослойных нейронных сетей, которые используют один пиксель в качестве единого входа. LeNet5 показывает, что эти методы не следует использовать на первом слое, потому что изображения сильно пространственно коррелированы, и использование отдельных пикселей изображения в качестве отдельных входных признаков не позволяет использовать преимущества пространственной корреляции этих пикселей.
Характеристики LeNet5 можно резюмировать следующим образом:
- Сверточные нейронные сети имеют 3 слоя: сверточные слои, объединяющие слои и нелинейные слои. Из этой статьи эти методы могут быть ключевыми функциями для обработки изображений с использованием методов глубокого обучения.
- Извлечение пространственных объектов с помощью свертки
- Использование пространственно усредненных подвыборок
- Использование tanh или сигмовидных нелинейных функций
- Многослойная нейронная сеть (Multilayer Perceptron MLP) в качестве окончательного классификатора
- Между слоями используется разреженная матрица соединений, чтобы избежать больших вычислительных затрат.
В целом, эта работа является источником многих недавних архитектур и вдохновила тех, кто работает в этой области.
The gap
С 1998 по 2010 год разрабатывались нейронные сети. Многие люди не замечают своей способности медленно расти, в то время как другие медленно прогрессируют. Благодаря появлению камер сотовых телефонов и дешевых цифровых камер доступно все больше и больше данных. Вычислительная мощность оборудования также выросла, а графические процессоры стали быстрее и стали универсальным вычислительным инструментом. Эти тенденции заставляют нейронные сети развиваться, хотя и медленно. Данные и вычислительная мощность делают задачи, которые решают нейронные сети, все более и более интересными. И будущее многообещающее...
Dan Ciresan Net
В 2010 году Дэн Клаудиу Сиресан и Юрген Шмидхубер опубликовалиНейронная сеть графического процессорапервая реализация . они естьNVIDIA GTX 280 На графическом процессоре обучается 9-слойная нейронная сеть, реализующая как прямое, так и обратное распространение.
AlexNet
В 2012 году Алексей Крижевский опубликовалAlexNet, AlexNet — это более глубокая и широкая версия LeNet, которая с большим отрывом выиграла сложный конкурс ImageNet.
AlexNet расширяет идеи LeNet, утверждая, что более крупные нейронные сети могут изучать более сложные свойства объектов и иерархии объектов. Основные вклады этой работы заключаются в следующем:
- Использование нелинейной функции ReLU
- Используемый метод исключения выборочно игнорирует отдельные нейроны во время обучения, что позволяет избежать переобучения модели.
- Перекрытие максимального объединения, чтобы избежать усреднения эффектов среднего объединения
- Использовать графический процессорNVIDIA GTX 580 сократить время обучения
В то время графические процессоры предоставляли гораздо больше ядер, чем центральные процессоры, и обеспечивали 10-кратное ускорение времени обучения, что, в свою очередь, облегчало использование больших наборов данных и изображений большего размера.
Успех AlexNet произвел небольшую революцию. CNN теперь являются рабочей лошадкой глубокого обучения, которое стало новым названием для «больших нейронных сетей для интересных задач».
Overfeat
В декабре 2013 года лаборатория Нью-Йоркского университета Яна Лекуна предложилаOverfeat, который является производным от AlexNet. В этой статье также представленыlearning bounding boxes, что впоследствии привело к многочисленным статьям на ту же тему. Я думаю, что этот метод больше подходит для обученияsegment objectвместоartificial bounding boxes.
VGG
из Оксфордского университетаVGGСеть впервые использовала сверточные слои меньшего размера.и объедините их в последовательность свертки.
Этот метод кажется противоположным принципу LeNet, который использует большие ядра свертки для захвата сходных функций на изображениях. В отличие от AlexNetили, ядра свертки начинают уменьшаться, вскоре приближаясь к тому, чего LeNet хочет избежатьРазмер, по крайней мере, в первом слое приближается. Но самым большим преимуществом VGG является множественностьПоследовательность ядра свертки может имитировать эффект большего рецептивного поля, такого какиЭти идеи также используются некоторыми современными сетевыми архитектурами, такими как Inception и ResNet.
VGG использует несколькоСверточные слои для представления сложных объектов. Обратите внимание на 3,4,5 строительных блока VGG-E:,иПоследовательность сверточных ядер большого и малого размера использовалась несколько раз для извлечения более сложных признаков и комбинаций признаков. на самом деле это как 3 слояБольшой классификатор , это свертка. Это, очевидно, эквивалентно большому количеству параметров, а также способности к обучению. Но обучение такой сети затруднено, поэтому ее необходимо разбить на более мелкие сети, а слои этих сетей добавлять слой за слоем. Причиной этого является отсутствие метода грубой силы для регуляризации модели или как ограничить огромное пространство поиска, вызванное большим количеством параметров.
VGG использует большие размеры элементов во многих слоях, поэтому вВысокая стоимость при выполнении логического вывода. Сокращение количества функций, как это сделано в узких местах Inception, экономит некоторые вычислительные накладные расходы.
Network-in-network
Network-in-network(NiN)использоватьСвертка, чтобы обеспечить более глубокое понимание функций, объединяющих возможности сверточных слоев.
Чтобы лучше сочетать функции перед другими уровнями, архитектура NiN использует перетасовку слоя MLP после каждой свертки. Еще раз можно подумать, чтоСвертки нарушают принципы LeNet, но на самом деле они помогают лучше комбинировать сверточные функции, что невозможно путем простого наложения большего количества сверточных слоев. Это отличается от использования необработанных пикселей в качестве входных данных для следующего слоя. это здесьСвертки используются для пространственного объединения функций карты объектов после свертки, поэтому их можно разделить между всеми пикселями этих функций с использованием нескольких параметров.
Мощь MLP может значительно повысить эффективность отдельных сверточных функций, объединив их в более сложные группы. Эти идеи используются в большинстве последующих архитектур нейронных сетей, таких как ResNet, Inception и других производных.
NiN также использует слой среднего пула как часть окончательного классификатора, что впоследствии является еще одной распространенной практикой. Это делается для усреднения ответов сети на несколько входных изображений перед классификацией.
GoogLeNet and Inception
Кристиан Сегеди из Google начал искать способы уменьшить вычислительную нагрузку нейронных сетей и разработал первую архитектуру Inception.GoogLeNet.
К настоящему времени, осенью 2014 года, модели глубокого обучения стали очень полезными при классификации содержимого изображений и видеокадров. Многие скептики согласны с тем, что на этот раз глубокое обучение и нейронные сети вернулись. Учитывая эффективность этих технологий, важно попросить таких интернет-гигантов, как Google, эффективно и масштабно развернуть эти архитектуры на своих серверах.
Кристиан много думает об уменьшении вычислительной нагрузки глубоких нейронных сетей и достижении максимальной производительности (например, в ImageNet). В качестве альтернативы можно добиться повышения производительности с теми же вычислительными затратами.
Он и его команда придумали модуль Inception:
На первый взгляд это в основном выглядит так,иПараллельная комбинация ядер свертки размера. Но необыкновенная проницательность начального модуля используется раньше, чем дорогие параллельные блокиразмер сверточных блоков для уменьшения количества признаков. Это часто называют «узким местом» Это заслуживает отдельного раздела для объяснения: см. главу «Уровень узкого места» ниже.
GoogLeNet не использует начальные уровни начального модуля и NiN-подобные средние пулы и классификаторы softmax. По сравнению с AlexNet и VGG этот классификатор также требует очень мало операций. Это дляочень эффективный веб-дизайнтакже способствовал.
Bottleneck layer
Вдохновленный NiN, определение уровня узкого места в Inception уменьшает количество функций, поэтому операции на каждом уровне соответственно сокращаются, поэтому время, затрачиваемое на выполнение логического вывода, может оставаться на низком уровне. Количество функций уменьшается в 4 раза перед передачей данных в дорогостоящий модуль свертки. Результатом является огромная экономия вычислительных ресурсов, что в конечном итоге привело к успеху этой архитектуры.
Изучим его подробно. Например, теперь у нас есть 256 входных объектов, 256 выходных объектов, а начальный слой делает толькосвертка . То есть надо реализоватьЭто операция свертки (589 000 с умножением-накоплением или операциями MAC). Это может быть больше, чем наш вычислительный бюджет в 0,5 мс на серверах Google. В качестве альтернативы мы решили уменьшить количество функций, которые должны быть задействованы в свертке, например, 64 или более.. Таким образом, мы сначала выполняем, затем выполните 64 свертки на всех начальных ветвях, а затем выполните свертки изФункция выполняется сновасвертка. Эти операции заключаются в следующем:
Сейчас требуется всего 70 000 операций, тогда как раньше нам нужно было выполнять 600 000 операций. Почти в 10 раз меньше операций.
Хотя мы сокращаем операции, мы не теряем общности этого слоя. На самом деле было показано, что уровень узких мест имеет наилучшую производительность в наборах данных, таких как ImageNet, и уровень узких мест также использовался в более поздних архитектурах, таких как ResNet.
Причина успеха узкого места в том, что характеристики входных данных связаны, поэтому используйтеОперация свертки для надлежащего объединения этих функций может устранить избыточность. Пройдя сверточный слой с меньшим количеством признаков, их снова можно разложить в более интересные комбинации для следующего слоя.
Inception V3 (and V2)
Кристиан и его команда — очень эффективные исследователи. В феврале 2015 г.Batch-normalized InceptionПредставлен как Inception V2. Пакетная нормализация вычисляет среднее значение и стандартное отклонение всех карт объектов на выходе каждого слоя и использует эти значения для нормализации их ответов. Это эквивалентно «отбеливанию» данных, чтобы все нейронные карты имели одинаковый диапазон значений отклика и среднее значение 0. Это помогает обучению, потому что следующему слою не нужно изучать смещение входных данных, и поэтому он может сосредоточиться на том, как лучше всего объединить эти функции.
В декабре 2015 года они опубликовали начальный модуль.Новая версия и соответствующая архитектура. В этой статье лучше объясняется исходная архитектура GoogLeNet и дается более подробная информация о вариантах дизайна. Оригинальная идея показана ниже:
- Максимизируйте поток информации в сеть, тщательно построив сеть, которая уравновешивает глубину и ширину. Увеличивайте количество карт объектов перед каждым объединением.
- По мере увеличения глубины количество признаков или ширина слоев систематически увеличивается.
- Увеличение ширины используется на каждом слое для увеличения набора функций перед следующим слоем.
- использовать толькоСвертка , если возможно,иЯдро свертки может использовать несколькоразложен сверток. Как показано ниже:
-
Таким образом, новый начальный модуль становится:
-
Ядро свертки проходит черезflattened convolutionsв более сложную часть:
-
Начальный модуль также уменьшает размер данных, выполняя начальные вычисления во время объединения. Это в основном то же самое, что и выполнение сверток параллельно (с шагами) с использованием простого слоя объединения:
Inception по-прежнему использует слой объединения юридических лиц plus softmax в качестве окончательного классификатора.
ResNet
Эволюция произошла в декабре 2015 года, примерно в то же время, что и Inception V3.ResNetСуществует простая идея обойти два последовательных сверточных слоя и передать входные данные непосредственно следующему слою.
Это то же самое, чтоэта статьяидеи очень похожи. Но они обходят два слоя и применяются к крупномасштабным сетям. Обход двух слоев является ключевой интуицией, так как обход одного слоя не дает больших улучшений. Благодаря двум уровням его можно рассматривать как небольшой классификатор или сеть в сети.
Это также первый случай, когда можно обучить сеть с более чем сотней или даже 1000 слоев.
ResNet со многими слоями начинается со слоя узкого места, похожего на узкое место Inception:
Сначала используя выход с меньшим выходом (обычно 1/4 входа)Свертка, этот слой уменьшает количество признаков в каждом слое, а затемслой, затемсвертки, чтобы получить больше возможностей. Как и в модуле Inception, это снижает вычислительные затраты, но обеспечивает более богатую комбинацию функций. См. раздел «уровень узких мест» после раздела «GoogLeNet и начальный этап».
ResNet использует довольно простой начальный слой на входе:, за которым следует объединяющий слой размера 2. Это отличается от более ответственного и неинтуитивного ввода в Inception V3, V4.
ResNet также использует слой пула с softmax в качестве окончательного классификатора.
Распространены и другие идеи об архитектуре ResNet:
- ResNet можно рассматривать как параллельную модель, так и последовательную модель, только вход во многие модули рассматривается как параллельный, или выход каждого модуля рассматривается как последовательно соединенный.
- ResNet также можно рассматривать какМножественная интеграция параллельных или последовательных модулей
- Было обнаружено, что ResNets обычно работают с блоками относительно небольшой глубины ~ 20-30 слоев, что представляет собой параллельные операции, а не непрерывный поток по всей длине сети.
- Когда вывод возвращается на вход, как RNN, ResNet можно рассматривать как лучшийbio-plausible model of the cortex.
Inception V4
Кристиан и его команда снова опубликовалиновое начало.
Модуль Inception после входного слоя Inception V4 очень похож на Inception V3:
Они также объединяют модуль Inception и модуль ResNet:
На этот раз, хотя решение кажется мне менее элегантным и сложным, оно также полно менее прозрачных эвристик. Трудно понять сделанный выбор, и автору трудно его скорректировать.
На этот раз к ResNet приписывается понятная и простая сеть, которую легко понять и настроить.
SqueezeNet
SqueezeNetНедавно опубликовано. Это переработка многих концепций ResNet и Inception, но, тем не менее, он представляет собой лучший архитектурный дизайн, который может обеспечить меньшие размеры и параметры сети без сложного алгоритма сжатия.
ENet
Наша команда объединяет все функции последних архитектур в очень эффективную и легкую сеть, которая использует очень мало параметров и вычислений для достижения самых современных результатов. Эта сетевая архитектура называетсяENet,Зависит отAdam Paszkeразработан. Мы используем его для попиксельной маркировки и разбора сцен.здесьВот несколько видео из ENet. Эти видео неОбучающий наборчасть.
Технические отчеты по ENet доступны по адресуздесьполучить. ENet — это сеть кодер-декодер. Кодер — это обычная CNN, предназначенная для классификации, а декодер — это сеть с повышающей дискретизацией, предназначенная для распространения класса до размера исходного изображения для выполнения сегментации. Для выполнения сегментации изображений используются только нейронные сети и никакие другие алгоритмы.
Как вы можете видеть на этом графике, ENet имеет самую высокую точность среди всех используемых нейронных сетей по каждому параметру.ENet спроектирован так, чтобы с самого начала использовать как можно меньше ресурсов. Таким образом, он занимает настолько мало места, что сети кодировщика и декодера вместе занимают всего 0,7 МБ с точностью fp16. Даже при таком небольшом размере ENet с точки зрения точности сегментации аналогичен другим решениям на основе чистой нейронной сети или превосходит их.
An analysis of modules
Систематическая оценка архитектуры CNN былаПочта. Среди находок благоприятны для применения:
- Используйте нелинейный ELU и не добавляйте батчнорм или ReLU.
- Используйте изученное преобразование цветового пространства о RGB.
- Используйте линейную стратегию затухания скорости обучения.
- Используйте серию средних и максимальных объединенных слоев.
- Используйте мини-пакеты размером, например, 128 или 256. Если это все еще слишком велико для вашего графического процессора, соответственно уменьшите скорость обучения в зависимости от размера пакета.
- Полносвязный слой используется в качестве свертки, а прогнозы усредняются для принятия окончательного решения.
- При увеличении размера тренировочного набора убедитесь, что плато не достигнуто.
- Чистота данных важнее их размера.
- Это имеет примерно такой же эффект, если вы не можете увеличить размер входного изображения, уменьшив шаг в последующих слоях.
- Если ваша сеть имеет сложную и высокооптимизированную архитектуру, такую как GoogLeNet, обязательно тщательно внесите изменения.
Xception
XceptionУлучшает начальный модуль и архитектуру с более простым и элегантным дополнением и работает так же, как ResNet и Inception V4.
Модуль Xception выглядит следующим образом:
Учитывая простоту и элегантность архитектуры, эта сеть может понравиться всем:
Архитектура имеет 36 этапов свертки, как и ResNet-34. Но модель и код такие же простые, как ResNet, и их легче понять, чем Inception V4.
Код для этой сети, использующий реализацию Torch7, находится по адресуздесь, реализованный с помощью Keras/TF вздесь.
Интересно отметить, что недавняя архитектура Xception также использовалась в нашемРабота одного ядра сверткивдохновленный.
MobileNets
После апреля 2017 года новыйMobileNetsАрхитектура также доступна. Эта архитектура использует отдельные свертки для уменьшения количества параметров. Отдельные извилины согласуются с приведенным выше Xception. Теперь в статье заявлено огромное снижение параметров — примерно 1/2 от того, что написано в статье про FaceNet. Вот полная архитектура модели:
К сожалению, мы протестировали эту сеть в реальном приложении, но обнаружили, что она ужасно медленная на графических процессорах Titan Xp, когда размер пакета равен 1. Взгляните сюда для сравнения времени вывода на изображение:
- resnet18 : 0.002871
- alexnet : 0.001003
- vgg16 : 0.001698
- squeezenet : 0.002725
- mobilenet : 0.033251
Явно не соперник в быстром выводе. Уменьшить параметры и размер сети можно, но это недоступно.
Other notable architectures
FractalNetИспользуется рекурсивная архитектура, не тестированная на ImageNet, производной или более общей ResNet.
The future
Мы считаем, что проектирование архитектур нейронных сетей имеет решающее значение для прогресса в области глубокого обучения. Наша группа настоятельно рекомендует вам внимательно прочитать и понять все документы в этой статье.
Но теперь подумайте, почему мы должны тратить много времени на проектирование сетевой архитектуры и почему мы не используем данные, чтобы сказать нам, что использовать и как комбинировать эти модули. Это хорошая идея, но она находится в стадии разработки. Некоторые предварительные интересные результаты находятся вздесь.
Также обратите внимание, что речь в основном идет об архитектурах для компьютерного зрения. Подобные архитектуры нейронных сетей были разработаны и в других областях, и эволюция архитектур для обучения всем другим задачам не менее интересна.
Если вы также заинтересованы в сравнении архитектур нейронных сетей и вычислительной производительности, пожалуйста, прочитайте нашу недавнююбумага.
Acknowledgments
This post was inspired by discussions with Abhishek Chaurasia, Adam Paszke, Sangpil Kim, Alfredo Canziani and others in our e-Lab at Purdue University.
About the author
I have almost 20 years of experience in neural networks in both hardware and software (a rare combination). See about me here: Medium, webpage, Scholar, LinkedIn, и больше…
В статье используется блокнот jupyter[1][2]редактировать.После перевода я обнаружил, что кто-то уже перевел его.здесь. во всяком случае, у меня есть что-то :)