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

К сожалению, освоить искусство обучения нейронных сетей непросто. Как и в случае с предыдущими методами машинного обучения, дьявол кроется в деталях, но есть еще много деталей, которыми нужно управлять. Каковы ограничения ваших данных и вашего оборудования? Что лучше начать с AlexNet, VGG, GoogLeNet (Inception) или ResNet? Есть даже вариант ResNet в ResNet. Сколько плотных слоев по сравнению со сверточными слоями вы должны построить? А как насчет вашей функции активации? Даже если вы остановились на популярном ReLU, тогда вам придется выбрать обычный ReLU, Leaky ReLU, Very Leaky ReLU, RReLU, PReLU или обобщенную версию ELU.

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

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

Основная книга, посвященная практической настройке, Нейронные сети: хитрости торговли (Орр и Мюллер) была первоначально опубликована в 2003 году и обновлена ​​в 2012 году. Шумиха вокруг глубокого обучения началась, когда New York Times осветила удивительную победу исследования Merck Drug Discovery Challenge командой Джеффри Хинтона в 2012 году, поэтому новейшие исследования последних нескольких лет отсутствуют.

К счастью, несколько исследователей, такие как Лесли Смит из Лаборатории военно-морских исследований США, опубликовали систематические исследования архитектурных улучшений и технических достижений для CNN. Вот шаблоны проектирования, которые он выделил как наиболее полезные.

Шаблоны проектирования CNN для классификации изображений

По словам Смита, эти «14 оригинальных шаблонов проектирования могут быть полезны неопытным практикам, которые стремятся включить глубокое обучение в различные новые приложения». В то время как продвинутый А. исследователи могут полагаться на интуицию, опыт и целенаправленные эксперименты, этот совет - отличная отправная точка для остальных из нас, кто не выставляет напоказ докторскую степень по машинному обучению.

1) Архитектура следует за приложением
Возможно, вас соблазнят блестящие новые модели, изобретенные в модных исследовательских лабораториях, таких как Google Brain или DeepMind, но многие из них невозможно или крайне непрактично реализовать для ваших нужд. случай или бизнес-среда. Используйте модель, наиболее подходящую для вашего конкретного приложения, которая может быть простой, но все же мощной, такой как VGG.

2) Распространение путей
Ежегодный победитель ImageNet Challenge использует более глубокую сеть, чем победитель предыдущего года. От AlexNet до Inception и до Resnets, Смит и его команда также наблюдали тенденцию «умножения количества путей в сети» и что «ResNet может быть экспоненциальным ансамблем сетей разной длины».

3) Стремитесь к простоте.
Однако больше не обязательно лучше. В одноименной статье Спрингенберг и др. Демонстрируют, как достичь самых современных результатов с меньшим количеством единиц.

4) Повышение симметрии
Симметрия, будь то архитектурная или биологическая, считается признаком качества и мастерства. Смит приписывает элегантность FractalNet симметрии сети.

5) Форма пирамиды
Вы всегда выбираете между репрезентативной силой и удалением избыточной или бесполезной информации. CNN повсеместно понижают дискретизацию активаций и увеличивают каналы от входного уровня до последнего уровня.

6) Перетренированность
Еще один компромисс - точность тренировки и способность к обобщению. Регуляризация с помощью таких методов, как drop-out или drop-path, улучшает обобщение, что является ключевым преимуществом нейронных сетей. Обучите свою сеть решению более сложной проблемы, чем ваш реальный вариант использования, чтобы повысить производительность обобщения.

7) Покройте проблемное пространство
Используйте шум и увеличение данных - например, случайное вращение, кадрирование и манипуляции с изображениями - чтобы расширить ваши тренировочные данные и улучшить обобщение.

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

9) Нормализация входных данных слоя
Нормализация - это еще один подход к упрощению работы со слоем, который показан на практике для улучшения обучения и точности. Изобретатели пакетной нормализации полагают, что причина кроется в обработке внутреннего ковариатного сдвига, но Смит полагает, что нормализация «ставит все входные выборки слоя на равную основу (аналогично масштабированию с преобразованием единиц), что позволяет более эффективно обучать обратное распространение. ”

10) Переход на входе
Исследование Wide ResNets показало, что производительность улучшается с увеличением количества каналов, но вы торгуете между стоимостью и точностью. AlexNet, VGG, Inception и ResNets делают это на первом уровне, чтобы можно было исследовать входные данные разными способами.

11) Доступные ресурсы. Руководство по ширине слоя
Однако количество выходов для выбора неочевидно и зависит от возможностей вашего оборудования и желаемой точности.

12) Суммирование, объединение
Суммирование - популярный способ объединения ветвей. В ResNets использование сумм в качестве механизма соединения позволяет каждой ветви вычислять остатки относительно всего приближения. Если соединение пропуска входа присутствует всегда, то при суммировании слои узнают корректирующие условия (то есть отличие от входа). В сетях с несколькими ветвями, в которых можно отбросить любую ветвь (например, FractalNet), вы должны использовать средства для обеспечения плавного вывода.

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

14) Maxout для соревнований
Maxout используется в локальных конкурентных сетях, где вы выбираете только одну из активаций. Использование сумм и средних включает все активации, поэтому разница в том, что max out выбирает только одного «победителя». Один из очевидных вариантов использования Maxout - это когда каждая ветвь имеет ядра разного размера, а Maxout может включать масштабную инвариантность.

Советы и хитрости

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

1) Используйте предварительно обученные сети с точной настройкой
Если ваши визуальные данные похожи на данные ImageNet, использование предварительно обученной сети помогает вам учиться быстрее, - объясняет Майк Тунг, генеральный директор компании по машинному обучению. Диффбот ». Более низкие уровни сверточной нейронной сети обычно можно использовать повторно, поскольку они обнаруживают общие шаблоны, такие как линии и края. Замените слой классификации своим собственным и настройте последние несколько слоев под свои конкретные данные.

2) Используйте freeze-drop-path
Drop-path случайным образом удаляет ветви во время итерации обучения. Смит протестировал противоположный метод, названный замораживанием пути, при котором веса ветвей замораживаются и не поддаются обучению, а не полностью удаляются. Сеть должна достигать большей точности, поскольку следующая ветвь содержит больше слоев, чем предыдущая ветвь, и поправочный член легче аппроксимировать.

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

4) Используйте начальную загрузку с шумными метками
На практике большая часть ваших данных будет беспорядочной, где метки субъективны или отсутствуют, а объекты могут быть не локализованы. Рид и др. Описывают метод обеспечения согласованности в целях прогнозирования сети. Интуитивно это работает, позволяя сети использовать известные представления мира (подразумеваемые в параметрах) для фильтрации входящих данных, которые могут иметь несогласованную обучающую метку, и очищать эту метку во время обучения.

5) Используйте ELU, а не ReLU, особенно с Maxout
ELU - это более плавные версии ReLU, которые ускоряют сходимость и точность классификации. В отличие от ReLU, ELU имеют отрицательные значения, что позволяет им приближать активацию среднего блока к нулю, как нормализация партии, но с меньшей вычислительной сложностью, согласно исследованиям. Они особенно эффективны, если вы используете Maxout с полностью связанными слоями.

Рекомендуемая литература

Анализ моделей глубоких нейронных сетей для практического применения

Альфредо Канциани, Адам Пашке, Эухенио Кулурчелло

Отредактировано 23 февраля 2017 г.

Циклический курс обучения для обучения нейронных сетей

Лесли Н. Смит

Пересмотрено 29 декабря 2016 г.

Шаблоны проектирования глубокой сверточной нейронной сети

Лесли Н. Смит, Николай Топин

Отредактировано 14 ноября 2016 г.

Систематическая оценка достижений CNN в ImageNet

Дмитрий Мишкин, Николай Сергиевский, Иржи Матас

Редакция от 13 июня 2016 г.

Быстрое и точное глубокое обучение сети с помощью экспоненциальных линейных единиц (ELU)

Джорк-Арне Клеверт, Томас Унтертинер, Зепп Хохрайтер

Пересмотрено в феврале 2016 г.

Обучение глубоких нейронных сетей на шумных этикетках с начальной загрузкой

Скотт Рид, Хонглак Ли, Драгомир Ангелов, Кристиан Сегеди и др.

Редакция от 15 апреля 2015 г.

Особая благодарность Джереми Ховарду и Рэйчел Томас из fast.ai за рекомендации этих документов и Майку Тунгу из Diffbot за проверку технических деталей и добавление комментариев.

Пропустили ли мы какие-либо важные или полезные документы по разработке и оптимизации ваших CNN? Дайте нам знать в комментариях ниже.

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

Первоначально опубликовано на www.topbots.com 22 марта 2017 г.