ПРИМЕНЕНИЕ НЕЙРОННОЙ СЕТИ ДЛЯ РАСПОЗНАВАНИЯ РУКОПИСНЫХ ЦИФР - Студенческий научный форум

XI Международная студенческая научная конференция Студенческий научный форум - 2019

ПРИМЕНЕНИЕ НЕЙРОННОЙ СЕТИ ДЛЯ РАСПОЗНАВАНИЯ РУКОПИСНЫХ ЦИФР

 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Методы интеллектуального анализа данных являются незаменимым средством в современном мире. Такие методы позволяют извлекать из большого объема данных полезную информацию, необходимую для принятия обоснованных решений. Алгоритмы машинного обучения активно используются в корпорациях- гигантах, являющимися лидерами на IT- рынке, например, Google, Amazon, Facebook.

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

Нейронная сеть. Персептрон

Нейрон - это «вычислительный элемент», который получает некоторое количество входных сигналов через свои входные отростки, производит некоторые вычисления и затем он отправляет через свой аксон выходные сигналы другим узлам - другим нейронам головного мозга [3].

Модель нейронной сети представлена на рис. 1.

Рис. 1. Модель трехслойной нейронной сети [3]

При этом – это входные значения (первый слой), где – это нейрон смещения, его значение всегда равно единице, – обозначения для активации нейронов ( – активация узла iв слое j), они относятся ко второму(скрытому) слою, – гипотеза, где – матрица параметров («весов»), контролирующая отображение функций активации от слоя jдо j+1 [3].

Далее представлены вычисления, которые производит сеть, изображенная на Рисунке 2.1.1.:

(1)

В векторном виде запись вычислений будет выглядеть следующим образом:

(2)

Чтобы узнать какой размерности будет матрица весов, нужно использовать формулу:

(3)

То есть, если у сети нейронов в уровнеj, нейронов в уровне j+1, тогда имеет размерность .

В последние годы большую популярность приобрела функция активации под названием «выпрямитель». Нейроны с данной функцией активации называются ReLU (rectified linear unit). ReLU реализует простой пороговый переход в нуле [4,5].

Рассмотрим положительные и отрицательные стороны ReLU.

Положительные стороны:

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

Применение ReLU существенно повышает скорость сходимости стохастического градиентного спуска (в некоторых случаях до 6 раз [1]) по сравнению с сигмоидой и гиперболическим тангенсом. Считается, что это обусловлено линейным характером и отсутствием насыщения данной функции.

Отрицательные стороны:

ReLU не всегда достаточно надежны и в процессе обучения могут выходить из строя («умирать»). Например, большой градиент, проходящий через ReLU, может привести к такому обновлению весов, что данный нейрон никогда больше не активируется. Если это произойдет, то, начиная с данного момента, градиент, проходящий через этот нейрон, всегда будет равен нулю. Соответственно, данный нейрон будет необратимо выведен из строя. Например, при слишком большой скорости обучения (learning rate), может оказаться, что до 40% ReLU «мертвы» (то есть, никогда не активируются). Эта проблема решается посредством выбора надлежащей скорости обучения.

График ReLU представлен на рис. 2.

Рис. 2. График ReLU

Проектирование и разработка модуля распознавания рукописных цифр

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

Разрабатываемая нейронная сеть имеет 40 скрытых слоев.

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

На вход нейронной сети подается вектор, состоящий из 784 элементов (подаваемое на вход изображение имеет размер 28x28 пикселей).

В качестве функции активации была выбрана ReLU.

Завершающий этап сети — функция, оценивающая качество работы всей модели. Функция потерь находится в самом конце, после всех слоев сети. Итоговая функция потерь является своего рода количественным “штрафом”, который можно рассматривать как меру качества прогноза модели.

В качестве функции потерь была выбрана «перекрестная энтропия» (cross-entropy). Кросс-энтропия обычно используется для количественной оценки разницы между двумя распределениями вероятностей. Таким образом, модуль сможет определять вероятность принадлежности к каждому из 3-х классов.

В теории информатики перекрёстная энтропия между двумя распределениями вероятностей измеряет среднее число бит, необходимых для опознания события из набора возможностей, если используемая схема кодирования базируется на заданном распределении вероятностей q, вместо «истинного» распределения p [2].

Таким образом, функция потерь будет иметь вид, представленные в формуле (4):

(5)

где n — это количество классов, — правильные ответы, — выход модели.

Описание набора данных

Набор данных (Dataset) для разрабатываемой нейронной сети состоит из 60000 изображений. При каждом запуске программы он обновляется из заданного ресурса [20] (архивы скачиваются в корень программы, то есть в папку image-classification-master).

Также, в проекте существует папка image-classification-master/images, куда помещаются изображения для экспериментов.

Алгоритм распределяет данные из dataset следующим образом:

80% случайных изображений выбирается на обучение

20% случайных изображений выбирается на тестирование

Dataset является частью дистрибутива с исходными кодами. Его можно редактировать и переобучать алгоритм на новых данных.

Также в проекте создана папка images, в которую можно помещать изображения. Эти изображения могут быть использованы для предсказания их принадлежности к одному из классов.

После обучения нейронная сеть выбирает первое изображение из папки images и классифицирует его. Результаты выводятся в консоль.

Пример изображений из dataset представлен на рис. 3.2.1

Рис. 3.2.1. Пример изображений из dataset

Изображение преобразуется в вектор из 784 значений вида :

[... 0 0 0.33203125 0.984375 0.97265625 0.5703125 ...]

Блок- схема работы модуля классификации изображений

Блок- схема алгоритма обучения и тестирования нейронной сети представлена на рис. 4.

Рис. 4. Блок- схема алгоритма обучения и тестирования

Блок- схема алгоритма классификации входящего изображения представлена на рис. 5.

Рис. 5. Блок- схема алгоритма обучения и тестирования

Результаты работы модуля классификации изображений

Загрузка dataset

Модуль начинает свою работу с загрузки dataset. По окончанию загрузки модуль случайным образом разбивает dataset на тестовую выборку (20 %) и обучающую (80%).

Обучение нейронной сети

Модуль обучает нейронную сеть в зависимости от заданного количества эпох (в данном примере количество равно 15).

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

Результаты работы и точность определения класса изображения выводится на экран.

Итоги этапа «Обучение нейронной сети» представлены на Рис. 6.

Рис. 6. Результат этапа «Обучение нейронной сети»

Тестирование

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

Рис. 7. График точности

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

Распознавание

В качестве входного изображения для распознавания было выбрано изображение (нарисовано с помощью программы Paint), не входящее в dataset (Рис. 8).

Рис. 8. Входное изображение

Результаты классификации данного изображения представлены на рис. 9.

Рис. 9. Результаты классификации

Алгоритм правильно распознал изображение, отнес его к классу «4».

Выводы

В ходе работы обучена нейронная сеть. Ход обучения и параметры описаны выше.

Далее проведено тестирование, которое показало, что алгоритм переобучился после 1-ой эпохи.

Несмотря на проблему переобучения, алгоритм правильно классифицировал входное изображение и показывает точность 99% на обучающей выборке и 97% на тестовой.

Эксперимент по определению верного класса изображения прошел успешно. Алгоритм отнес изображение класса «4» к верному классу, несмотря на проблему переобучения.

Список источников и литературы

Alex Krizhevsky. ImageNet Classification with Deep Convolutional Neural Networks//Advances in neural information processing systems 25(2) , 2012- p.1-12

Le Cun Y. Backpropagation Applied to Handwritten Zip Code Recognition / Y. LeCun, B. Boser, J.S. Denker, D. Henderson, R.E. Howard, W. Hubbard, L.D. Jackel // Neural Computation. 1 (4). 2014- P. 541-551.

Воронова Л.И. Machine Learning: регрессионные методы интеллектуального анализа данных: Учебное пособие/В.И. Воронов; МТУСИ–М, 2018–83 с.

Deshpande A. A Beginner's Guide to Understanding Convolutional Neural Networks / A. Deshpande // [Электронныйресурс]. Режимдоступа: https://adeshpande3.github.io

Функции активации [Электронный ресурс]. Режим доступа: http://datareview.info/article/eto-nuzhno-znat-klyuchevyie-rekomendatsii-po-glubokomu-obucheniyu-chast-2/

Dataset рукописные цифры [Электронный ресурс]. Режим доступа: http://deeplearning.net/data/mnist/mnist.pkl.gz

Просмотров работы: 16