Назад в библиотеку

Методы машинного обучения в задаче распознавания изображений

Автор:Зенков Д.А., Ананьевский М.С.
Источник: Санкт-Петербургский государственный университет, математико-механическии факультет, кафедра исследование операций

Deep Learning

Введение

Рассматривалась общая задача распознавания рукописного текста, апробация происходила на базе данных рукописных цифр MNIST1. MNIST представляется из себя переработку оригинального набора чёрно-белых образцов NIST с добавленными образцами написанными студентами.

В статье [3] В. А. Якубовича, рассматривалась задача распознавания рукописных цифр. Современный подход решения данной задачи основанный на сверточных нейронных сетях базируется на статье [8] Yann Lecun и др. Я решил задачу распознавания рукописных цифр с помощью свёрточной нейронной сети.

Преимущества такой модели:

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

http://yann.lecun.com/exdb/mnist/

1. Математическая постановка задачи

Рассмотрим задачу классификации с учителем.

? — множество объектов распознавания.
? ? — объект распознавания.
g : ? > , = {1, 2, . . . , } — индикаторная функция, разбивающая пространство образов на непересекающихся классов ?1, ?2, . . . , ?.
— пространство наблюдений (признаки).
: ? > — функция, ставящая в соответствие каждому объекту точку () в пространстве наблюдений. Вектор () — это образ объекта, воспринимаемый наблюдателем.
^g: > – решающее правило (оценка для g() на основании ()).
Пусть = (), = (), = 1, 2 . . . , — доступная информация о функциях g() и (), сами функции неизвестны. Тогда (g, ), = 1, 2 . . . , — множество прецендентов.
Задача: построить решающее правило ^g(), чтобы распознавание проводилось с минимальным числом ошибок на заданном множестве.

? (, ) = 1, 2 . . . , g ^g

2. Постановка задачи на естественном языке

Ставилась задача распознавания рукописных цифр от 0 до 9. Для апробации был использован стандартный набор данных MNIST (42000 изображений обучающей выборки, 28000 изображений тестовой выборки). Программе представлялась картинка с изображением одной из 10 цифр 0, 1,. . . , 9. Программа должна была правильно распознать, что за цифра нарисована на картинке.

3. Техническая постановка задачи

Имеем:

Изображение задавалось 28 x 28 пикселями, в 256 оттенках серого цвета (цветовой режим Greyscale, значение 0 представляет чёрный цвет, а значение 255 — белый).

Цель: распознать рукописную цифру на тестовых изображениях (выбрать правильную метку от 0 до 9).

Метрика качества: Процент правильно распознанных цифр (Accuracy).

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

  1. Сверточный слой:
    • 32 карты признаков;
    • ядро 5 x 5, шаг ядра 1;
    • значение padding 2 x 2;
    • активационная функция ReLU;
    • max-pooling ядро 2 x 2, шаг ядра 1.
  2. Сверточный слой:
    • 64 карты признаков;
    • ядро 5 x 5, шаг ядра 1;
    • значение padding 2 x 2;
    • активационная функция ReLU;
    • max-pooling ядро 2 x 2, шаг ядра 1.
  3. Dropout;
  4. Полносвязный слой (входов 64 x 7 x 7, выходов 1000);
  5. Полносвязный слой (входов 1000, выходов 10), активационная функция Softmax.

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

Получившиеся количество настраиваемых параметров нейронной сети: 3199106.

4.1. Свертка

Свертка (взаимнокорреляционная функция) — основная операция свёрточной нейронной сети, позволяющая выделять признаки изображения. Свертку задается формулой:

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

Количество настраиваемых параметров у свертки заметно меньше, чем на полносвязном слое. Если обозначить — количество карт признаков подающихся на вход, , — высота и ширина ядра соответственно, а — количество карт признаков на выходе. Тогда количество параметров свертки можно вычислить по формуле:

4.2. Субдискретизация

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

Мною была выбрана операция субдискретизации с функцией максимума (max-pooling), как наиболее предпочтительная из статьи [6]. Формула субдискретизации с функцией максимума:

4.3. Dropout регуляризация

Dropout регуляризация избавляет от взаимоадаптации нейронов во время обучения нейронной сети.

Во время обучения производится выключение (dropping out) нейронов с вероятностью , таким образом, а вероятность, что нейрон останется включенным, составляет 1?. Выключение нейрона означает, что при любых входных данных или параметрах он возвращает 0.

На каждом шаге обучения генерируется вектор случайных величин = (1, . . . , 1) распределенный по закону Бернулли, где 1 — количество нейронов в слое, к которому применяется dropout. Этот вектор показывает какие нейроны выключатся, а какие останутся включенными на данном шаге обучения.

5. Алгоритм обучения

5.1. Функции активации

Главной задачей функции активации внести нелинейность в нейронную сеть.

Функция активации ReLU (Rectified Linear Unit) начала использоваться относительно недавно и приобрела широкое распространение.

К преимуществам такой функции активации можно отнести:

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

Функция активации softmax используется на последнем слое нейронной сети. Представляет собой обобщение логистической функции для большей размерности. Размерность вектора преобразованного функцией остается той же. Компоненты вектора принимают значения в интервале (0, 1). Сумма компонент вектора равна 1.

() = exp() / ?? exp()

Выходы функции можно интерпретировать как меру принадлежности к каждому классу.

5.2. Adam (Adaptive Moment Estimation)

Главная задача нейронной сети минимизировать функционал качества. Функционал качества зависит от объекта, который подали на вход в нейронную сеть, и от параметров нейронной сети . Минимизация функционала качества (argmin ()) производится за счет автоматического изменения весов в нейронной сети по такому алгоритму:

Значения задаются из непрерывного равномерного распределения.

Все параметры, кроме — скорость обучения, были взяты как оптимальные параметры найденные в ходе экспериментов из статьи [3]. Параметр был взят с учетом данной задачи.

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

6. Обучение свёрточной нейронной сети

Нейронная сеть была написана на python 3.6 с использованием библиотеки pytorch. Из-за большого количества данных, не помещающихся в оперативную память компьютера, в нейронную сеть загружались за раз 100 изображений из обучающей выборки. Все изображения прошли 40 раз через свёрточную нейронную сеть.

Выбор метки для объекта прошедшего нейронную сеть, осуществлялся выбором номера наибольшей компоненты выходного вектора нейронной сети.

7. Заключение

На тестовом наборе данных процент правильно распознанных цифр составляет 99.385%. Получившаяся нейронная сеть попала в топ 25% на соревновании kaggle Digit Recognizer, из более чем 3000 участников.

Литература

  1. Якубович В. А. “Машины, обучающиеся распознаванию образов”. В: Методы вычислений 2 (1963), с. 95—131.
  2. Christopher M. Bishop. Pattern Recognition and Machine Learning (Information Science and Statistics). Springer-Verlag, 2006.
  3. Diederik P. Kingma и Jimmy Ba. Adam: A Method for Stochastic Optimization. 2014. arXiv: 1412.6980 [cs.LG].
  4. Ian Goodfellow, Yoshua Bengio и Aaron Courville. Deep Learning. The MIT Press, 2016.
  5. Tom M. Mitchell. Machine learning, International Edition. McGraw-Hill Series in Computer Science. McGraw-Hill, 1997.
  6. Dominik Scherer, Andreas C. Muller и Sven Behnke. “Evaluation of Pooling Operations in Convolutional Architectures for Object Recognition.” В: ICANN (3). Lecture Notes in Computer Science. Springer, 2010, с. 92—101.
  7. Geoffrey E. Hinton и др. “Improving neural networks by preventing coadaptation of feature detectors”. В: CoRR abs/1207.0580 (2012).
  8. Yann Lecun и др. “Gradient-Based Learning Applied to Document Recognition”. В: Proceedings of the IEEE 86 (1998), с. 2278—2324.