Заметки о статьях по DeepLearning и ImageNet

Posted by Vasiliy Zemlyanov on March 3, 2017

Краткая заметка о содержании классических статей по сверточным нейронным сетям и ImageNet.

ImageNet classification with deep convolutional neural networks

Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. “Imagenet classification with deep convolutional neural networks.” Advances in neural information processing systems. 2012. [pdf] (AlexNet, Deep Learning Breakthrough)

Одна из классических статей, с которых начался современный виток диплернинга (сеть AlexNet).

Про ImageNet

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

Начиная с года проводится соревнование ImageNet Large Scale Visual Recognition Challenge (ILSVRC) по распознаванию и детекции на ImageNet. Датасет соревнования представлен классов и разделен на части: train , validation , test . Качество классификации оценивается по метрикам: ошибка на топ и ошибка на топ .

Архитектура сети

Авторы использовали сверточную сеть из слоев: сверточных, полносвязных. Последний слой — softmax на классов.

AlexNet network

Оригинальная схема из статьи.
(Да, она неправильно обрезана в статье.)

А еще в схеме есть забавная неточность.

Для тренировки сети все изображения масштабировали в x. Препроцессинг — вычитание среднего (mean).

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

Хотя ReLU не требует нормализации данных, после экспериментов, авторы решили использовать локальную нормализацию (local normalization). Хитрая формула нормализации приведена в статье.

Борьба с оверфитом

Использовали основных подхода: аугментации и дропаут.

Аугментации. Аугментированные изображения генерировали на лету с помощью Python и не хранили на диске. Пока сеть перемножала тензоры на GPU, через CPU обсчитывали новое аугментированное изображение.

Использовали вида аугментаций:

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

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

Детали обучения

Модель обучали стохастическим градиентным спуском с импульсом (momentum) и затуханием (weight decay). Веса иницилизировали Гауссовым распределением с центром в и среднеквадратическим отклонением .

Обучали на двух GPU GTX (по Gb памяти) в течении 6 дней.

Полученные результаты:

  • ошибка на топ :
  • ошибка на топ :

Very deep convolutional networks for large-scale image recognition

Simonyan, Karen, and Andrew Zisserman. “Very deep convolutional networks for large-scale image recognition.” arXiv preprint arXiv:1409.1556 (2014). [pdf] (VGGNet,Neural Networks become very deep!)

Вторая классическая статья по сверточным сетям. Этой статье мы обязаны архитектурами VGG- и VGG-.

Архитектура

Сеть организована по тем же принципам что в вышеприведенной статье. Для обучения использованы x RGB изображения, препроцессинг — вычитаение среднего (mean).

Ключевая особенность полученных сетей — использование маленьких сверток x, что ползволило увеличить глубину до - слоев.

Ранее использовались свертки x и x. Согласно статье использование двух сверточных слоев x заменяет один слой x, а использование слоев x заменяет один слой x. Замена одной большой свертки на несколько маленьких позволяет увеличить число нелинейных преобразований и значительно уменьшить количество параметров сети.

После сверточных слоев идут два полносвязных слоя на нейронов и последний softmax слой на . В качестве функции активации примененили ReLU.

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

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

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

Реализация

Сеть собрали на Caffe, модифицировав для возможности обучения на нескольких GPU. Тренировка занимала - недели на х NVIDIA Titan Black.

Лучшие результаты на сети:

  • ошибка на топ :
  • ошибка на топ :

Усреднение softmax классов нескольких сетей улучшило результаты:

  • ошибка на топ :
  • ошибка на топ :

Затем эту сеть применили к задаче локализации (определение баундинг-боксов объектов). Обучали аналогично задаче классификации, только логистическую регрессию заменили на Евклидово расстояние. Полученные результаты превзошли state of the art на момент написания статьи.

Сеть обученную на ImageNet применили к другим датасетам. Для этого выкинули последний полносвязный слой. Предпоследний слой, содержащий 4096 нейронов использовали в качестве извлекаемых из изображения признаков. К полученным признаками применили SVM классификатор с регуляризацией. Веса предобученных слоев не меняли. На новых данных были получены результаты аналогичные либо превосходящие state of the art.


Going Deeper with Convolutions

Szegedy, Christian, et al. “Going deeper with convolutions.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015. [pdf] (GoogLeNet)

Статья про GoogleLeNet.

Архитектура

Архитектура сети получила название Inception (we need to go deeper).

Сверточные сети обычно имеют однотипную архитектуру: несколько сверток, pooling, полносвязные слои. Главное отличие Inception архитектуры в использовании новых Inception слоев.

Самый очевидный путь улучшения производительности нейронной сети — увеличение ее размера. Но больший размер сети, обычно, влечет увеличение числа параметров. Значит выше шанс оверфитнуться и ресурсов нужно больше. Эти проблемы можно решить используя разряженные слои вместо полносвязных. Но современное железо плохо справляется с разряженными структурами данных (кеш промахи).

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

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

Inception layer

Схема Inception слоя.

GoogleLeNet

GoogleLeNet является конкретной реализацией Inception архитектуры, использованной в соревновании ILSVRC . Сеть содержит слоя ( если считать пулинг слои). На самом деле простых независимых слоев около .

GoogleLeNet

Схема GoogleLeNet.

Функция активации: ReLU. Обучали стохастическим градиентным спуском с импульсом. Для улучшения backpropogation дополнительно использовали вспомогательные классификаторы на основе простых сверточных сетей.

Обучили одинаковых сетей, с разным семплингом и рандомизацией входных изображений. Объединили в ансамбль, получили state of the art.

  • Ошибка на топ : .

Затем GoogleLeNet применили для детекции объектов, ансамбль из сетей показал state of the art.