9 публикаций, которые должен прочесть каждый специалист по ML (+ пояснения)

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

Введение

В этой статье мы рассмотрим новые достижения в сфере компьютерного зрения (computer vision) и сверточных нейронных сетей (СНС, convolutional neural network). Мы обсудим наиболее значимые публикации за последние 5 лет и выясним, почему они так важны. В первой части (от AlexNet до ResNet) описаны достижения в области общей архитектуры сетей. Во второй части представлены некоторые интересные публикации, посвященные разработкам в других направлениях.

  1. AlexNet (2012)

Архитектура AlexNet стала отправной точкой для всех последующих разработок в данном направлении. (Впрочем, некоторые считают основополагающей работу Яна Лекуна (Yann LeCun), опубликованную в 1998 году.) Публикация, в которой была представлена архитектура AlexNet, вышла под названием «Классификация изображений ImageNet с помощью глубоких сверточных нейронных сетей» («ImageNet Classification with Deep Convolutional Neural Networks»). Эта работа была процитирована 6184 раза и считается одной из наиболее влиятельных работ в данной области. Алекс Крижевский (Alex Krizhevsky), Илья Сатскевер (Ilya Sutskever) и Джеффри Хинтон (Geoffrey Hinton) создали «большую глубокую сверточную нейронную сеть», которая позволила им выиграть соревнование ILSVRC 2012. Соревнование ILSVRC считается ежегодными «Олимпийскими играми» в сфере компьютерного зрения. В рамках этого мероприятия команды со всего мира соревнуются в создании лучшей модели для решения таких задач, как классификация (classification), локализация (localization), обнаружение (detection) и другие. 2012 год был ознаменован тем, что сверточная нейронная сеть впервые достигла коэффициента ошибки 15.4% при оценивании в формате топ-5. (При использовании формата топ-5 для каждого тестового изображения модель предсказывает 5 наиболее вероятных классов. Если среди них нет правильного ответа – засчитывается ошибка.) Следует отметить, что команда, занявшая второе место, показала результат 26.2%. Таким образом, AlexNet одержала победу со значительным отрывом, шокировавшим сообщество компьютерного зрения. С тех пор СНС стали массово применяться в подобных соревнованиях.

Архитектура AlexNet достаточно проста по сравнению с современными вариантами. Сеть содержит 5 сверточных слоев (convolutional layer) с применением пулинга по максимуму (max-pooling) и дропаута (dropout), а также 3 полносвязных слоя (fully connected layer). Сеть позволяет классифицировать изображения из 1000 различных категорий.

Архитектура может показаться немного странной, поскольку содержит в себе два различных «потока». Дело в том, что процесс обучения был настолько требовательным к вычислительным ресурсам, что авторам пришлось обучать сеть на двух GPU.

Основные положения:

  • Сеть была обучена на данных ImageNet, которые содержат более 15 миллионов аннотированных изображений, принадлежащих к более чем 22000 категорий.
  • В качестве функции активации была применена ReLU. Эта функция позволяет в несколько раз уменьшить время обучения по сравнению с традиционным гиперболическим тангенсом (tanh).
  • Аугментация (augmentation) данных (создание дополнительных данных) была реализована с помощью различных преобразований исходных изображений, таких как смещение, горизонтальное отражение и выделение фрагментов.
  • Реализован дропаут для предотвращения переобучения.
  • Обучение было выполнено с помощью пакетного стохастического градиентного спуска (batch stochastic gradient descent) при фиксированных значениях импульса (momentum) и коэффициента затухания весов (weight decay).
  • Время обучения на двух GPU GTX 580 составило 5-6 суток.

Значение публикации

Нейронная сеть, разработанная Крижевским, Сатскевером и Хинтоном в 2012 году, продемонстрировала эффективность сверточных сетей широкому кругу специалистов по компьютерному зрению. Это был первый пример таких высоких результатов при работе со сложным набором данных ImageNet. Публикация описывает технологии популярные и по сей день, такие как аугментация и дропаут, а также акцентирует внимание на преимуществах сверточных сетей, подтвержденных рекордным результатом в соревновании.

  1. ZF Net (2013)

После невероятных результатов, продемонстрированных AlexNet в 2012 году, в соревновании ILSVRC 2013 уже участвовало большое количество сверточных моделей. Победителем соревнования стала сверточная сеть, созданная Мэттью Зейлером (Matthew Zeiler) и Робом Фергюсом (Rob Fergus) из Нью-Йоркского университета. Их сесть, названная ZF Net, достигла коэффициента ошибки 11.2%. Решение по большей части основывалось на тонкой настройке архитектуры AlexNet, при этом также были разработаны некоторые новые подходы, позволившие улучшить результат. Кроме того, значение данной работы заключается в том, что авторы уделили много внимания объяснению концепций, лежащих в основе сверточных сетей, и представили эффективную методику визуализации фильтров и весов.

Архитектура ZF Net была представлена в публикации под названием «Визуализация и понимание сверточных сетей» («Visualizing and Understanding Convolutional Networks»). В начале своей работы авторы акцентируют внимание на том, что возрождение интереса к сверточным сетям обусловлено наличием больших наборов данных для обучения и ростом вычислительных возможностей благодаря GPU. Они также отмечают, что на данный момент исследователи обладают очень ограниченными знаниями о внутренних механизмах сверточных моделей, а без этих знаний «разработка более эффективных моделей сводится к методу проб и ошибок». Несмотря на то, что сейчас мы лучше понимаем эти механизмы, чем несколько лет назад, эта проблема по-прежнему остается на повестке дня. Основным вкладом данной публикации является немного усовершенствованная модель AlexNet и очень интересный способ визуализации карт признаков (feature map).

Архитектура ZF Net.

Основные положения:

  • Архитектура очень похожа на AlexNet, за исключением нескольких незначительных модификаций.
  • Для обучения ZF Net было использовано всего лишь 1.3 миллиона изображений, в то время как AlexNet была обучена на 15 миллионах изображений.
  • Вместо фильтров размером 11×11 в первом слое (использованных в AlexNet) в ZF Net были применены фильтры размером 7×7 и уменьшенный шаг (stride). Смысл этой модификации заключается в том, что фильтр меньшего размера в первом сверточном слое позволяет сохранить большее количество информации, содержащейся в исходных пикселях. Как выяснилось, фильтр размером 11×11 пропускает много полезной информации, особенно в первом сверточном слое.
  • По мере роста сети возрастает количество используемых фильтров.
  • Функция активации – ReLU, целевая функция – кросс-энтропия (cross-entropy), метод обучения – пакетный стохастический градиентный спуск.
  • Время обучения на GPU GTX 580 составило 12 суток.
  • В рамках публикации была представлена разработанная авторами технология визуализации под названием «разверточная сеть» (deconvolutional network), позволяющая анализировать активации различных признаков и их взаимосвязь с входным пространством. Технология получила такое название, поскольку отображает признаки на пиксели, то есть выполняет действие обратное свертке.

Разверточная сеть

Основная идея данной технологии заключается в том, что к слоям обученной сверточной сети подключается разверточная сеть, которая обеспечивает «обратный путь» к пикселям изображения. Входное изображение подается в СНС, и в каждом слое вычисляются активации. Это проход в прямом направлении. Теперь представим, что мы хотим исследовать активации некоторого признака в 4-м сверточном слое. Для этого необходимо сохранить активации данной карты признаков, установить все остальные активации в слое равными нулю, а затем передать эту карту признаков на вход подключенного слоя разверточной сети. Разверточная сеть имеет такие же фильтры, как и сверточная сеть. Далее выполняется операция обратная пулингу (unpooling), операция ReLU и развертка для каждого предшествующего слоя, пока не будет достигнуто пространство входных пикселей.

Эта процедура позволяет нам выяснить, какие типы структур исходного изображения формируют данную карту признаков. Давайте посмотрим на визуализацию 1-го и 2-го слоя.

Визуализация 1-го и 2-го слоя.

Каждый слой проиллюстрирован двумя рисунками. Первый рисунок представляет сами фильтры, а второй показывает, какие части исходного изображения соответствуют максимальной активации, связанной с данным фильтром. Например, рассматривая 2-й слой (Layer 2), на левом рисунке мы видим представления 16 различных фильтров.

Первый слой СНС всегда является детектором признаков низкого уровня, таких как простые линии и цвета. Во втором слое были детектированы более сложные признаки, например, круговые формы. Теперь давайте посмотрим на 3-й, 4-й и 5-й слой.

Визуализация 3-го, 4-го и 5-го слоя.

Эти слои имеют дело с признаками более высокого уровня, такими как морды собак или цветы. Следует отметить, что после первого сверточного  слоя обычно применяется пулинг, который уменьшает размер изображения (например, с 32×32×3 до 16×16×3). Результатом этого преобразования является то, что 2-й слой имеет более широкое «поле зрения» в пределах исходного изображения. Более подробная информация о разверточных сетях и о публикации в целом представлена в презентации Зейлера.

Значение публикации

В рамках данной публикации не только была представлена архитектура ZF Net, одержавшая победу в соревновании 2013 года, но также были объяснены многие принципы работы СНС и описаны пути усовершенствования модели. Специально разработанная методика визуализации помогает лучше понять внутренние процессы СНС, а также подсказывает идеи для дальнейшего развития архитектуры. Благодаря впечатляющей технике визуализации и интересным экспериментам, в которых авторы закрывали различные участки изображений, данная работа является одной из моих любимых.

  1. VGG Net (2014)

Простота и глубина. Эти характеристики позволили архитектуре VGG Net, разработанной Карен Симонян (Karen Simonyan) и Эндрю Зиссерманом (Andrew Zisserman) из Оксфордского университета, добиться коэффициента ошибки 7.3% и занять 2-е место в соревнование ILSVRC 2014. Модель представляла собой 19-слойную СНС, в которой были применены фильтры размером 3×3 (шаг – 1, заполнение (padding) – 1), а также слои пулинга по максимуму размером 2×2 (шаг – 2). Достаточно просто, не так ли?

6 различных конфигураций архитектуры VGG Net. Конфигурация D обеспечил наилучший результат.

Основные положения:

  • Размер фильтров 3×3 существенно отличается от размера фильтров AlexNet (11×11) и ZF Net (7×7). Обоснование этого подхода заключается в том, что комбинация двух сверточных слоев размером 3×3 имеет рецептивное поле размером 5×5. Таким образом удается имитировать фильтр большего размера, сохраняя при этом преимущества фильтров меньшего размера. Одним из существенных преимуществ является уменьшение количества параметров. Кроме того, имея два сверточных слоя, можно использовать два ReLU-слоя вместо одного, что позволяет повысить эффективность модели.
  • Комбинация трех сверточных слоев размером 3×3 имеет рецептивное поле 7×7.
  • В то время как пространственный размер входных данных на каждом слое уменьшается вследствие свертки и пулинга, глубина данных увеличивается, как результат большего количества фильтров.
  • Следует отметить, что количество фильтров удваивается после каждого пулинг-слоя. Это подкрепляет идею уменьшения пространственной размерности и увеличения глубины.
  • Сеть хорошо справилась как с задачей классификации, так и с задачей локализации. При решении задачи локализации авторы применили регрессию (см. стр. 10 публикации).
  • Модель создана с помощью фреймворка Caffe.
  • В качестве одного из методов аугментация данных был применен метод вариации масштаба (scale jittering).
  • После каждого сверточного слоя присутствовал ReLU-слой. Обучение было выполнено посредством пакетного градиентного спуска.
  • Время обучения на 4 GPU Nvidia Titan Black составило 2-3 недели.

Значение публикации

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

  1. GoogLeNet (2015)

Только что мы говорили о простоте архитектуры. Так вот, специалисты из Google перечеркнули эту концепцию, представив общественности модуль Inception. GoogLeNet – это 22-слойная СНС, выигравшая соревнование ILSVRC 2014 с коэффициентом ошибки 6.7%. Насколько мне известно, это была одна из первых архитектур, при создании которых авторы отошли от стандартного подхода, заключающегося в простом последовательном чередовании сверточных и пулинговых слоев. Кроме того, существенным преимуществом данной архитектуры является более рациональное использование вычислительных ресурсов. (Не следует забывать, что большое количество слоев и фильтров требует существенных вычислительных ресурсов, а также повышает вероятность переобучения.)

Архитектура GoogLeNet.

Другой вариант представления архитектуры GoogLeNet.

Модуль Inception

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

Модуль Inception, содержащий параллельные фрагменты, выделен зеленой рамкой.

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

Структура модуля Inception.

Нижний зеленый блок – это вход модуля, а верхний зеленый блок – его выход. (Можно мысленно повернуть эту схему на 90 градусов по часовой стрелке, чтобы она соответствовала своему положению в общей схеме сети, представленной выше.) В случае традиционной СНС при добавлении каждого слоя мы должны сделать выбор: применить в этом слое операцию пулинга или операцию свертки (также необходимо выбрать размер фильтра). Модуль Inception позволяет выполнить эти операции параллельно. Это и есть базовая идея данной разработки.

Базовая идея модуля Inception.

Однако в своей базовой форме данная концепция не работает. Дело в том, что мы получили бы слишком много выходов, то есть очень глубокий канал выходной информации. Авторы решили эту проблему, добавив свертку 1×1 перед слоями 3×3 и 5×5. Свертка 1×1 (подход «сеть в сети» (network-in-network)) представляет собой метод уменьшения размерности. Предположим, у нас имеются входные данные размерности 100×100×60. (Речь идет необязательно об изображении, это может быть просто вход какого-либо слоя сети.) Применение 20 фильтров свертки 1×1 позволит нам уменьшить размерность до 100×100×20. Следовательно, при таком подходе мы можем уменьшить объем информации для сверток 3×3 и 5×5. Эту операцию можно рассматривать, как «пулинг признаков» («pooling of features»), потому что мы уменьшаем глубину представления данных аналогично тому, как мы уменьшаем длину и ширину посредством обычных пулинговых слоев. Также следует отметить, что за слоями свертки 1×1 следуют ReLU-нейроны, которые уж точно не помешают. (Дополнительную информацию об эффективности свертки 1×1 вы можете найти в отличной статье Адитьи Пракаш (Aaditya Prakash).) Обратите внимание на следующее видео, где представлена хорошая визуализация конкатенации фильтров.

У вас может возникнуть вопрос: «В чем же преимущество такой архитектуры?» Суть заключается в том, что у нас есть модуль, в котором выполняются следующие операции: свертка 1×1, свертка с фильтром среднего размера, свертка с фильтром большого размера и пулинг. Свертка 1×1 позволяет извлечь информацию о мельчайших деталях, в то время как свертка 5×5 имеет широкое рецептивное поле. Операция пулинга позволяет уменьшить пространственные размеры и предотвратить переобучение. Кроме всего этого, после каждого сверточного слоя присутствуют ReLU, которые повышают нелинейность сети. Таким образом, сеть имеет возможность выполнять все эти операции, предъявляя при этом умеренные требования к вычислительным ресурсам. В публикации также рассматриваются вопросы более высокого уровня, касающиеся таких тем, как разреженность (sparsity) и плотные связи (dense connection) (см. разделы 3 и 4).

Основные положения:

  • Архитектура GoogLeNet содержит 9 модулей Inception, что в целом составляет более 100 слоев! Вот это уже действительно глубоко…
  • Не используются полносвязные слои! Вместо этого авторы применили пулинг по среднему (average pooling), чтобы преобразовать размерность 7×7×1024 в 1×1×1024. Благодаря этому удалось существенно уменьшить количество параметров.
  • Количество параметров в 12 раз меньше, чем в AlexNet.
  • На этапе тестирования, на вход сети подавались различные фрагменты одного и того же изображения, а затем софтмакс вероятности (softmax probability) усреднялись, чтобы получить итоговый ответ.
  • Для решения задачи обнаружения были использованы концепции R-CNN. (Мы рассмотрим R-CNN во 2-й части данной статьи).
  • Существуют обновленные версии модуля Inception (версии 6 и 7).
  • Время обучения «на нескольких передовых GPU составило 1 неделю».

Значение публикации

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

  1. Microsoft ResNet (2015)

Возьмите глубокую СНС, удвойте количество слоев, добавьте еще несколько, и при этом она по-прежнему, вероятно, будет не настолько глубокой, как архитектура ResNet, разработанная Microsoft Research Asia в конце 2015 года. ResNet – это новая невероятная 152-слойная архитектура, установившая рекорды при решении задач классификации, обнаружения и локализации. Кроме рекорда в отношении количества слоев, ResNet также записала в свой актив победу в соревновании ILSVRC 2015 с рекордным коэффициентом ошибки 3.6%. (Следует отметить, что в зависимости от навыков и опыта коэффициент ошибки человека составляет 5-10%. Взгляните на интересную статью Андрея Карпаты (Andrej Karpathy), в которой он рассказывает о своем опыте соперничества со сверточными сетями в рамках соревнования ImageNet.)

Остаточный блок

Рассмотрим концепцию остаточного блока (residual block). Входной сигнал x проходит через серию преобразований свертка-ReLU-свертка. На выходе мы получаем некоторый результат F(x). Затем этот результат прибавляется к исходному входному сигналу x. Назовем это представление H(x) = F(x) + x. В случае традиционной сверточной сети H(x) было бы равно F(x). В случае же остаточного блока вместо того, чтобы просто вычислять преобразование (от x к F(x)), мы вычисляем слагаемое F(x), которое необходимо прибавить к входному сигналу x. По сути, блок, представленный ниже, вычисляет «дельту», то есть небольшое изменение входного сигнала x, чтобы получить немного измененное представление. В случае традиционной СНС мы преобразуем x и получаем абсолютно новое представление F(x), которое не сохраняет никакой информации о входном сигнале x. По мнению авторов «остаточное отображение легче оптимизировать».

Остаточный блок.

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

Основные положения:

  • «Сверхглубокая архитектура», – Ян Лекун.
  • 152 слоя…
  • Примечательно, что после всего двух первых слоев, пространственная размерность сокращается от исходной 224×224 до 56×56.
  • Авторы показали, что «наивное» добавление слоев приводит к увеличению ошибки как на обучающих, так и на тестовых данных (см. рис. 1 в публикации).
  • Авторы экспериментировали с 1202-слойной сетью, но получили меньшую точность, предположительно, по причине переобучения.
  • Время обучения на 8 GPU составило 2-3 недели.

Значение публикации

Сам по себе результат, составивший 3.6%, позволяет отнести данную работу к разряду выдающихся. ResNet является лучшей сверточной архитектурой на текущий момент. Кроме того, данная публикация представила мощную инновационную идею остаточного обучения (residual learning). Несмотря на то, что коэффициент ошибки уменьшается с каждым годом, начиная с 2012, есть большие сомнения, что на соревновании ILSVRC 2016 удастся существенно улучшить уже достигнутые результаты. Мне кажется, мы дошли до того момента, когда простое добавление слоев больше не будет обеспечивать существенных преимуществ. Теперь настало время креативных архитектур, подобных тем, какие мы увидели за последние два года. Не забудьте взглянуть на результаты ILSVRC 2016.

В качестве бонуса взгляните на публикацию «Остаточные сети остаточных сетей. Многоуровневые остаточные сети» («Residual Networks of Residual Networks: Multilevel Residual Networks»

Продолжение следует…

Источник

Перевод Станислава Петренко

Автор публикации

не в сети 3 дня

DataReview

Комментарии: 16Публикации: 955Регистрация: 05-06-2014

Вам также может понравиться

Добавить комментарий

Ваш e-mail не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =
Авторизация
*
*

Login form protected by Login LockDown.


Регистрация
*
*
*
*
Генерация пароля