Вы находитесь на странице: 1из 66

Федеральное агентство связи

Федеральное государственное бюджетное образовательное учреждение высшего


образования
«Сибирский государственный университет телекоммуникаций и информатики»
(СибГУТИ)

Кафедра Вычислительных систем


Допустить к защите

Зав.каф. _____________Курносов М.Г.

ВЫПУСКНАЯ
КВАЛИФИКАЦИОННАЯ РАБОТА
МАГИСТРА
Исследование, разработка глубокой нейронной сети для задачи
распознавания картинок

Магистерская диссертация

по направлению 09.04.01 «Информатика и вычислительная техника»

Студент /Нелюбин М.А./

Руководитель / Мамойленко С.Н./

/ Крамаренко К.Е./

Новосибирск 2017 г.
2

СОДЕРЖАНИЕ
Введение ................................................................................................................... 3
1 Задача классификации ...................................................................................... 6
1.1. Основные задачи теории распознавания образов ............................... 6
1.2. Типы характеристик образов. ............................................................... 9
1.3. Типы систем распознавания .................................................................. 9
1.4. Математическая постановка задачи классификации. ....................... 10
2 Машинное обучение ....................................................................................... 13
2.1. Задача обучения по прецедентам........................................................ 13
2.2. Основных методы машинного обучения для решения задачи
классификации................................................................................................. 20
3 Нейросетевая интерпретация задачи классификации изображений ......... 24
3.1. Основные понятия нейронных сетей ................................................. 25
3.2. Обучение нейронной сети методом обратного распространения
ошибок. ............................................................................................................. 28
3.3. Задачи, решаемые с помощью нейронных сетей .............................. 34
3.4. Решение задачи классификации изображений с помощью
сверточной нейронной сети. .......................................................................... 36
4 Экспериментальные исследования................................................................ 42
4.1. Среда и оборудование для экспериментов ........................................ 42
4.2. Выбор и подготовка данных для обучения ....................................... 44
4.3. Поиск оптимальных параметров нейронной сети ............................ 46
4.4. Анализ результатов. ............................................................................. 55
ЗАКЛЮЧЕНИЕ ..................................................................................................... 56
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ ........................................... 57
ПРИЛОЖЕНИЯ А. Функции для загрузки данных ........................................... 61
ПРИЛОЖЕНИЕ Б. Скрипт тестирования конфигураций ................................. 63
ПРИЛОЖЕНИЕ В. Функции для изменения обучающей выборки ................. 65
3

ВВЕДЕНИЕ

Одним из главных направлений информатики является исследование,


разработка и реализация методов для решения задач распознавания образов.
Данная задача является важной частью автоматизированных систем, систем
управлений и обработки информации и систем принятия решений.
Классификация явлений, сигналов и предметов, которые определяются набором
признаков и свойств, является задачей, находящей свое применение во многих
отраслях, например, диагностической медицине, робототехнике, исследовании
искусственного интеллекта, информационном поиске и многом другом.
Обработка изображений и классификация визуальных образов находит
применение в системах безопасности и видеонаблюдения, в управлении и
контроле доступа, в системах виртуальной реальности и поиска по изображению.
Системы по распознаванию автомобильных знаков, маркировок изделий,
человеческих лиц и отпечатков пальцев, рукописных текстов на данный момент
широко используются в различных сферах современной жизни.
Важность задачи классификации и ее актуальность можно отследить по
работам Т.Кохонена «Self-organization and associative memory», А.Крыжевский
«Imagenet classification with deep convolutional neural networks», Т.Визеля и
Д.Хьюбела «Brain and visual perception», Я.Лейкуна «Comparison of learning
algorithms for handwritten digit recognition» и многих других. Ощутимый прогресс
в решении задач распознавания образов был достигнут благодаря появлению
новых методов: сверхточных нейронных сетей, констелляционных моделей и
методов снижения размерности. Несмотря на значительный прогресс
достигнутый в последнее время в сфере классификации образов современные
исследования подчеркивают тот факт, что существующие методы и алгоритмы по
распознаванию образов до сих пор еще отстают от модели биологической
зрительной системы, потому что они не способны функционировать на
неограниченном множестве классов распознавания, не имеют устойчивости к
4

вариативности объектов в пределах категорий и их инвариантным


преобразованиям.
Поэтому актуальной проблемой на данном этапе развития систем по
распознаванию образов остается классификация объектов на изображении под
действием преобразований, при которых значительно изменяется форма объекта
на изображении, но при этом принадлежность объекта к классу остается
неизменной. В теории классификации образов данная проблема имеет название
проблема инверсии. Многослойные сверточные сети, методы ORB и SIFT
предоставляют частичное решение проблемы инверсии, обеспечивая стойкость
только к ограниченному подмножеству преобразований. В тех сферах
жизнедеятельности, где для классификации используются объекты, взятые из
естественной среды, например, зрительная система в робототехнике,
видеонаблюдении, анализе данных с фотографий и тому подобное, данная
проблема является наиболее актуальной.
Целью данной работы является исследование и разработка сверточных
нейронных сетей для задачи распознавания символов на изображении, взятых из
естественной среды.
Для достижения данной цели были поставлены следующие задачи:
 Изучить метод классификации объектов на изображении на основе
сверточных нейронных сетей;
 Разработать нейронную сеть для задачи распознавания символов на
изображении;
 Исследовать способы по улучшению качества обучения нейронной
сети и повышению точности классификации в задачи распознавания символов;
 Провести анализ аналогичных работ для решения задач распознавания
символов с использованием сверточных нейронных сетей.
Объектом исследования в данной работе является система компьютерного
зрения, с помощью которой осуществляется распознавание объектов на
изображении.
5

Предметом исследования являются алгоритмы и математические модели


для решения задачи распознавания.
В работе использовались методы компьютерного зрения, теории
искусственных нейронных сетей, теории планирования эксперимента.
Основные результаты работы были представлены на российской научно-
технической конференции «Инновации и научно-техническое творчество
молодежи» 2017 г. в виде тезисов.
Диссертация состоит из введения, четырех глав (в первых трех
рассматриваются теоретические аспекты, в четвертой приведены результаты
экспериментальных исследований), заключения и приложения. Объем работы
составляет 66 страницы с 15 рисунками и 5 таблицами. Список литературы
содержит 33 наименований.
6

1 Задача классификации

Распознавание или классификация образов - это наука, которая занимается


изучением методов и алгоритмов классификации различных объектов в мире.
Каждый день мы сталкиваемся с задачей распознавания, узнавая знакомых на
улице, читая книги, решая примеры, слушая музыку, распознавая речь и многое
другое. В процессе своего существования живые организмы вынуждены решать
задачу классификации объектов и от того, как хорошо и быстро они могут это
делать, зависит их существование. Последнее время задачу классификации
стараются решать с помощью вычислительных средств.
Классификация - это систематическое распределение рассматриваемых
предметов, процессов и явлений по родам, типам и видам по каким-либо
значимым признакам [1].
Можно выделить следующие основные задачи, в решении которых
используется методы распознавания образов [3]:
 Медицинская диагностика;
 Распознавание речи;
 Анализ сцен;
 Распознавание изображений;
 Распознавание символов;
 Классификация, кластеризация и поиск в базах данных и знаний.

1.1. Основные задачи теории распознавания образов

На примере работы технической системы по распознаванию символов


рассмотрим основные задачи распознавания образов (Рисунок 1.1) [1].
Допустим, что на вход системы поступает изображение некого символа 𝑥,
который требуется распознать. Данный объект называется образом. Далее,
система по некоторому набору правил преобразует данный символ 𝑥 в вектор
7

признаков 𝑥̅ . Считается, что входной объект 𝑥 принадлежит некоторому классу


̅𝑘 из множества всех классов Ω = {𝜔
𝜔 ̅𝑚 }. Классы не пересекаются. Задача
̅1 , … , 𝜔
распознавания образов заключается в сопоставлении образа 𝑥 одному из классов
̅𝑘 с помощью классификатора.
𝜔

Рисунок 1.1 - Схема распознавания образов

Классификатором называется набор правил, по которым образ соотносится


одному из классов и реализуется в блоке классификации. На выход
классификатор должен выдать класс, к которому относится объект, а также
указать степень соответствия данному классу, или выдать информацию, что
входной объект не принадлежит множеству классов [3].
Для уменьшения размерности вектора-признака и повышения
быстродействия системы, может использоваться блок выбора информативных
признаков. Данный блок располагается между блоками преобразования образа в
векторную форму и классификатором [1].
В общей системе распознавания образов может присутствовать блок
обучения, который позволяет по выборке обучающих образов, которым
сопоставлен соответствующий класс, сформировать правила классификации.
Также по обучающей выборке может быть выбрано правило наиболее
информативных признаков [1].
На основе схемы распознавания можно выделить следующие основные
задачи теории распознавания [10]:
8

 Математическое описание образов. Наиболее распространённое в


математике векторное описание образов, т.е. каждому образу 𝑥, сопоставляется
вектор признаков 𝑥 = (𝑥1 , … , 𝑥𝑛 )𝑇 , где 𝑥𝑖 признак этого образа, элемент
векторного пространства 𝑋, называемое пространством признаков. Данной
пространство должно быть конечномерным и метрическим. Помимо векторного
описания образов существуют и другие, например для задачи распознавания
изображений - матричное описание;
 Выбор наиболее информативных признаков, которые описывают
данный образ. Одной из главных задач распознавания образов является
нахождение минимального количества признаков, по которым будет достигнута
необходимая точность распознавания, т.е. нахождение признаков, которые
наиболее информативно смогут описывать образ в данной система распознавания.
Алфавитом в данном случае будет называться полный набор признаков,
используемых для распознавания, а словарем признаков – минимальный набор
признаков, достаточный для решения задачи распознавания. Эффективность
работы системы распознавания во многом зависит от выбора алфавита признаков
и определения словаря.
 Описание классов распознаваемых образов. Данная задача
заключается в поиске границ классов. Границы классов задаются на этапе
разработки явно, либо находятся системой в процессе работы;
 Нахождение оптимальных решающих процедур (методов
классификации), т.е. нахождение методов, для сопоставления вектора признаков
некоторому классу;
 Оценка достоверности классификации образов. Данная оценка
позволяет оценить величину потерь, которая связанна с неправильной
классификацией.
9

1.2. Типы характеристик образов.

Характеристики образов (признаки) в основном можно разделить на


следующие типы [7]:
 Физические характеристики (детерминированные и вероятностные),
например, показания различных датчиков. Данный тип характеристик лучше
всего представлять в векторном описании;
 Качественные характеристики, например, понятие «низкий»,
«высокий», «толстый» и т.п. Этот тип характеристик обычно описывается с
помощью лингвистических переменных методами теорий нечетких множеств;
 Структурные характеристики, которые описывают изображение
сложных объектов и сцен. Для описания структурных характеристик используется
формальный язык;
 Логические характеристики, являются высказывания, которые
соответствуют значениям истина или ложь.

1.3. Типы систем распознавания

По характеру информативных признаков системы распознавания можно


разделить на следующие типы [2]: логические, детерминистские, структурные,
вероятностные и комбинированные.
Другим критерием для классификации систем распознавания является
количество априорной информации для распознавания. По данному критерию
системы распознавания можно разделить ан три типа [2]:
 Системы без обучения, т.е. в данной системе имеется достаточное
количество априорной информации для составления алфавита и словаря
признаков, а также выделения границ классов. В данной системе отсутствует блок
«обучения»;
 Системы, основанные на обучении с учителем. В данных системах
количество априорной информации позволяет выделить только алфавит и словарь
10

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


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

1.4. Математическая постановка задачи классификации.

Пусть 𝑈 - множество объектов в задачи распознавания, а 𝑢 - отдельный


объект распознавания. Каждый образ 𝑢∈𝑈 может характеризоваться
бесконечным числом признаков. Мы должны сформировать подмножество
признаков на этапе формирования алфавита. Данной подмножество будет
называться пространством признаков 𝑋. В большинстве случаев, множество 𝑋
состоит из линейных или метрических структур. Обычно 𝑋 – линейное или
конечное метрическое (𝑋 = 𝑅𝑛 ) пространство. Пусть 𝑥 – элемент пространства 𝑋,
соответствующий образу 𝑢 ∈ 𝑈, а 𝑃: 𝑈 → 𝑋 – оператор, отображающий 𝑢 в 𝑥.
Отметим, что 𝑋 = 𝑃(𝑈), а 𝑃2 = 𝑃, т.е. 𝑃 является оператором проектирования.
Допустим, что в задаче классификации во множестве образов 𝑈 нас интересует
некоторые подмножества, называемое классами. Множество классов Ω =
{𝜔1 , … , 𝜔𝑚 } в классической задачи классификации является конечным. Классы в
таком случае образуют полную группу подмножеств из 𝑈, т.е. [1]:
𝑚
⋃ 𝜔
̅ = 𝑈, и 𝜔
̅𝑖 ∩ 𝜔
̅𝑗 = ∅, для всех 𝑖 ≠ 𝑗. (1.1)
𝑖=1

В данном случае задача классификации называется обобщенной.


11

Классифицировать образ 𝑢 ∈ 𝑈 по классам 𝜔1 , … , 𝜔𝑚 – это значит найти


функцию 𝑔: 𝑈 → 𝑌, 𝑌 = {𝑦1 , … , 𝑦𝑚 }, которая называется индикаторной. Данная
функции сопоставляет образ 𝑢 ∈ 𝑈 и метку класса 𝑦𝑖 ∈ 𝑌, которому принадлежит
рассматриваемый образ, т.е. 𝑔(𝑥 ) = с, при условии, что 𝑥 ∈ 𝜔
̅𝑖 [1].
На самом деле мы не имеем дело со всем множеством образов 𝑈, а только с
проекцией 𝑋 = 𝑃(𝑈), которое называется пространством признаков. Тогда
требуется найти решающую функцию 𝑔̃: 𝑋 → 𝑌, которая сопоставляет каждому
вектору признаков 𝑥 = 𝑃(𝑢) ∈ 𝑋 метку 𝑦𝑖 ∈ 𝑌, соответствующая классу 𝜔
̅𝑖 , т.е.
𝑔̃(𝑥 ) = 𝑦𝑖 , при условии, что 𝑥 = 𝑃(𝑢), 𝑢 ∈ 𝜔
̅𝑖 [1].
Следует заметить, что множество P−1 (𝑥 ), 𝑥 ∈ 𝑋 может быть не
одноэлементным, т.е. данное множество будет иметь непустые пересечение с
другими классами 𝜔
̅𝑖 . Поэтому задача классификации является некорректной
задачей, т.е. значение функции 𝑔̃(𝑥 ) может быть неоднозначным. [1] В
соответствии с общим подходом решения некорректных задач, из множества
решений функции 𝑔̃(𝑥 ) можно выделить однозначную ветвь, если она будет
удовлетворять определенным условиям оптимальности, например минимальная
ошибка неправильной классификации.
Множеству классов Ω = {𝜔1 , … , 𝜔𝑚 } в пространстве признаков Ω =
{𝜔1 , … , 𝜔𝑚 } соответствует некоторое покрытие 𝑋̃1 , … , 𝑋̃𝑚 пространства 𝑋: 𝑋̃𝑖 =
̅𝑖 }, 𝑖 = 1, … , 𝑚. Так как покрытия могут пересекаться, то будет
{𝑥 = 𝑃 ( 𝑢 ) : 𝑥 ∈ 𝜔
использоваться разбиение 𝑋 на 𝑋1 , … 𝑋𝑚 , удовлетворяющее условию 𝑋𝑖 ⊆ 𝑋̃𝑖 .
Данное разбиение неоднозначно, поэтому наиболее правильный выбор
информативных признаков, приведет к снижению степени неоднозначности
разбиения 𝑋1 , … 𝑋𝑚 . Сама область 𝑋𝑖 называется областями предпочтения классов
𝜔
̅𝑖 .
Система распознавания на этапе обучения обладает информацией о классах
в виде множества пар (𝑥𝑗 , 𝑦𝑗 ), 𝑗 = 1, … , 𝑁, 𝑥𝑗 = 𝑃(𝑢𝑗 ) ∈ 𝑋, 𝑦𝑗 = 𝑔(𝑥𝑗 ) ∈ 𝑌. Данная
пара (𝑥𝑗 , 𝑦𝑗 ) называется прецедентом, а множество Ξ = {𝑥1 , … , 𝑥𝑁 } – обучающей
выборкой. Задача классификации заключается в нахождении решающего правила
12

𝑔̃(𝑥 ) по множеству прецедентов {Ξ, Y}, которая осуществляла бы классификацию


обучающей выборки с наименьшим числом ошибок [2].
В обычный случае пространство признаков считается евклидовым, т.е. 𝑋 =
𝑅𝑙 . Частота появления правильных решений определяет качество решающего
правила.
Для решения задачи классификации существует множество методов, к ним
относится байесовский классификатор, линейный разделитель, индукция правил,
алгоритмическая композиция, а также нейронные сети, которое в последнее время
зарекомендовали себя в данной сфере.
13

2 Машинное обучение

Машинным обучением называется систематическое обучение алгоритмов и


систем, в результате которого их знания или качество работы возрастают по мере
накопления опыта [1].
Отсюда следует, что машинное обучение изучает алгоритмы, которые
способны обучаться. Существует два метода обучения. Первый, обучение по
прецедентам, также называется индуктивным обучением. Данный метод
заключается в поиске общих закономерностей оп частным эмпирическим данным.
Второй метод заключается в формализации знаний, полученных экспертами и
перенос их в базы знаний. Так как принято считать, что дедуктивный метод
относится к экспертным системам, то можно считать синонимами машинное
обучение с обучение по прецедентам [2].
В данной работе рассматривается первый метод – обучение по прецедентам,
который будет описан ниже.

2.1. Задача обучения по прецедентам

Пусть 𝑋 – множество объектов, а 𝑌 – множество допустимых ответов, тогда


существует функция 𝑦 ∗ : 𝑋 → 𝑌, называемая целевой функцией. Значение данной
функции 𝑦𝑖 = 𝑦 ∗ (𝑥𝑖 ) установлена на конечном подмножестве {𝑥1 , … , 𝑥𝑙 } ⊂ 𝑋.
Тогда прецедентом называется пара (𝑥𝑖 , 𝑦𝑖 ) «объект-значение», а обучающей
выборкой называется набор пар 𝑋 𝑙 = (𝑥𝑖 , 𝑦𝑖 )𝑙𝑖=1 [4].
Задача восстановления зависимости 𝑦 ∗ , или построения решающей функции
𝑎: 𝑋 → 𝑌, приближающей функцию 𝑦 ∗ (𝑥), на множестве X, как и объектов
обучающей выборки, так и всех объектов данного множества, называется
обучением по прецедентам [4].
Так как решающая функция 𝑎 должна иметь эффективную реализацию на
компьютере, то она называется алгоритмом.
Перейдем к описанию понятия объекта и признака.
14

Исход измерения определенной характеристики объекта называется


признаком. Формально признак описывается отображением 𝑓: 𝑋 → 𝐷𝑓 , где 𝐷𝑓 –
множество возможных значений признака. Следовательно, можно расценивать
как признак алгоритм 𝑎: 𝑋 → 𝑌 [4].
Признаки 𝐷𝑓 можно разделить на несколько типов в зависимости от
природы[5]:
 Бинарные признаки, если 𝐷𝑓 = {0,1};
 Номинальные признаки, если 𝐷𝑓 – конечное множество;
 Порядковые признаки, если 𝐷𝑓 – конечное упорядоченное множество;
 Количественные признаки, если 𝐷𝑓 = ℝ.
Однородными признаки называются в том случае, если весь их набор имеет
одинаковый тип, иначе признаки называются разнородными.
Пусть 𝑓1 , … , 𝑓𝑛 , тогда признаковым описанием объекта 𝑥 ∈ 𝑋 называется
вектор ((𝑓(𝑥)1 , … , 𝑓(𝑥)𝑛 ). В последующем будем полагать, что 𝑋 = 𝐷𝑓1 × … × 𝐷𝑓1 ,
т.е. признаковое описание объекта из 𝑋 – это есть и сам объект из множества 𝑋.
Матрицей признаков называется набор признаковых описаний для всех объектов
выборки 𝑋 𝑙 и имеет форму записи в виде таблицы 𝑙 × 𝑛:
𝑓1 (𝑥1 ) … 𝑓𝑛 (𝑥1 )
𝐹 = ‖𝑓𝑗 (𝑥𝑖 )‖ =( … … … ) (2.1)
𝑙×𝑛
𝑓1 (𝑥𝑙 ) … 𝑓𝑛 (𝑥𝑙 )
В прикладных задачах наиболее часто используется матрица объектов-
признаков (2.1).
Множество возможных ответов 𝑌 задачи обучения по прецедентам в
зависимости от природы можно разделить на следующие типы [5]:
 Задача классификации на 𝑀 непересекающихся классов, если 𝑌 =
{1, … , 𝑀}. Для данной классификации, алгоритм должен отвечать на вопрос
«какому классу принадлежит x?», т.е. все объекты множества 𝑋 разбиваются на
классы 𝐾𝑦 = {𝑥 ∈ 𝑋: 𝑦 ∗ (𝑥 ) = 𝑦};
 Классификация на 𝑀 пересекающихся классов, если 𝑌 = {0,1}𝑀 . В
15

простой формулировке это поиск решения для 𝑀неизвестных задач


классификации, имеющих два непересекающихся класса;
 Задача восстановления регрессии, если 𝑌 = ℝ;
 Задачи прогнозирования, которые являются частными случаями
восстановления регрессии и классификации, где прошлое поведение объекта
описывается 𝑥 ∈ 𝑋, а его будущее поведение описывается y∈ 𝑌.
Параметрическое семейство отображений 𝐴 = {𝑔(𝑥, 𝜃|𝜃 ∈ Θ} называется
моделью алгоритмов, где 𝑔: 𝑋 × Θ → 𝑌 является некоторой фиксированной
функцией, а Θ – пространство поиска(пространство параметров) – множество
допустимых значений параметра 𝜃 [1].
Обучением или настройкой алгоритма 𝑎 ∈ 𝐴 будет называться процесс
поиска оптимальных параметров по обучающей выборке 𝑋 𝑙 для модели 𝜃 [1].
Отображение 𝜇: (𝑋 × 𝑌)𝑙 → 𝐴, ставящее для произвольной конечной
выборки 𝑋 𝑙 = (𝑥𝑖 , 𝑦𝑖 )𝑙𝑖=1 некоторый алгоритм 𝑎 ∈ 𝐴, называется методом
обучения. Метод обучения должен допускать эффективную программную
реализацию.
В обучении по прецедентам различают два этапа [3]:
 Метод 𝜇 по выборке 𝑋 𝑙 строит алгоритм 𝑎 = 𝜇(𝑋 𝑙 ) на этапе
обучения;
 Сопоставление ответа 𝑦 = 𝑎(𝑥) для нового объекта 𝑥 происходит на
этапе применения алгоритма 𝑎.
Также обучение делится на два основных метода – это обучение с учителем,
где обучение происходит по размеченным данным, т.е. каждому значению
обучающей выборки соответствует какой-то ответ, и обучение без учителя, где
обучение осуществляется не по размеченным данным [2].
Самым сложным этапом является обучение, так как он заключается в
поиске оптимальных параметров модели, при которых работа данного алгоритма
будет соответствовать функционалу качества.
Неотрицательная функция 𝒵(𝑎, 𝑥), которая дает характеристику величине
16

ошибки для алгоритма 𝑎 на объекте 𝑥, называться функцией потерь. Корректным


ответ 𝑎(𝑥) называется в том случае, когда функция потерь равна нулю, т.е.
𝒵 (𝑎, 𝑥 ) = 0 [1].
Сумма всех функций потерь алгоритма 𝑎 на выборке 𝑋 𝑙 , деленной на
размерность выборки 𝑋, называется функционалом:
𝑙
1
𝑄 (𝑎, 𝑋 𝑙 ) = ∑ 𝒵(𝑎, 𝑥𝑖 ) (2.2)
𝑙
𝑖=1

Так как функция 𝑄 вычисляется по эмпирическим данным (𝑥𝑖 , 𝑦𝑖 )𝑙𝑖=1 , то ее


называют эмпирическим риском или функционалом средних потерь [1].
Бинарным функционал потерь называется в случае, когда принимает
значение 0 или 1. Тогда 𝒵 (𝑎, 𝑥 ) = 1 показывает, что алгоритм 𝑎 допускает
ошибку на объекте 𝑥, а частотой ошибок называется функционал 𝑄 [1].
Часто используются функции потерь, при 𝑌 ⊆ ℝ [1]:
 Индикатор ошибки - 𝒵 (𝑎, 𝑥 ) = [𝑎(𝑥 ) ≠ 𝑦 ∗ (𝑥)]. Обычно используется
для задач классификации;
 Отклонение от правильного ответа - 𝒵 (𝑎, 𝑥 ) = [𝑎(𝑥 ) − 𝑦 ∗ (𝑥)]. В таком
случае функционал 𝑄 называют средней ошибкой для алгоритма 𝑎 на выборке 𝑋 𝑙 ;
 Квадратичная функция потерь - 𝒵 (𝑎, 𝑥 ) = (𝑎(𝑥 ) − 𝑦 ∗ (𝑥 ))2 . Тогда
функционал 𝑄 будет называться средней квадратичной ошибкой для алгоритма 𝑎
на выборке 𝑋 𝑙 . Часто применяется в задачах регрессии.
Минимизация эмпирического риска – это классический метод обучения,
который состоит в том, чтоб найти в модели 𝐴 алгоритм 𝑎, который для
функционала качества 𝑄 (2.2) будет доставлять минимальное значение на
заданной обучающей выборке 𝑋 𝑙 [3]:
𝜇(𝑋 𝑙 ) = arg min 𝑄(𝑎, 𝑋 𝑙 ). (2.3)
𝑎∈𝐴

Элементы множества 𝑋 в задачах обучения по прецедентам не являются


реальными объектами, а представляют лишь доступные данные о них. Поскольку
значения признаков 𝑓𝑖 (𝑥 ) и целевой зависимости 𝑦 ∗ (𝑥) обычно измеряются с
17

погрешностями, то данные об объектах могут быть не точные. Также данные


могут оказаться неполными, в связи с тем, что измеряются не все признаки, а
лишь доступные для измерения. Поэтому при одних и тех же описаниях могут
соответствовать различные объекты и ответы. Тогда 𝑦 ∗ (𝑥) – не является
функцией. Для этого вводится понятие вероятностной постановки задачи [6].
Предположим наличие неизвестного вероятностного распределения, вместо
использования неизвестной целевой функции 𝑦 ∗ (𝑥), на множестве X × Y с
плотностью 𝑝(𝑥, 𝑦). Из данного множества случайно и не зависимо выбирается 𝑙
наблюдений 𝑋 𝑙 = (𝑥𝑖 , 𝑦𝑖 )𝑙𝑖=1 . Данные выборки называются случайно
распределенными или простыми [2].
Так как можно представить в виде вероятностного распределения 𝑝(𝑥, 𝑦) =
𝑝(𝑥 )𝑝(𝑦|𝑥) функциональную зависимость 𝑦 ∗ (𝑥), положив 𝑝(𝑦|𝑥 ) = 𝛿(𝑦 − 𝑦 ∗ (𝑥 )),
где 𝛿(𝑧) – дельта-функция, то такая вероятностная постановка задачи является
наиболее общей [3].
При вероятностной постановки задачи, используется модель совместной
плотности распределения ответов и объектов 𝜑(𝑥, 𝑦, 𝜃), которая апроксимирует
неизвестную плотность 𝑝(𝑥, 𝑦), взамен модели алгоритма 𝑔(𝑥, 𝜃), которая
производит аппроксимацию неизвестной зависимости 𝑦 ∗ (𝑥). Далее находится
параметр 𝜃, дающий максимально правдоподобную выборку данных 𝑋 𝑙 , т.е.
данная выборка лучше всего согласуется с моделью плотности [2].
Совместная плотность распределения всех наблюдений в случае, если
наблюдения в выборке 𝑋 𝑙 являются независимыми, равна произведению
плотностей 𝑝(𝑥, 𝑦) в каждом наблюдении. Если вместо 𝑝(𝑥, 𝑦) подставить модель
плотности 𝜑(𝑥, 𝑦), то получится функция правдоподобия [2]:
𝑙

𝐿(𝜃, 𝑋 𝑙 ) = ∏ 𝜑(𝑥𝑖 , 𝑦𝑖 , 𝜃). (2.4)


𝑖=1

Необходимо искать значение 𝜃, при котором функция (2.4) имеет


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

максимума. После нахождения параметра 𝜃, построить алгоритм 𝑎𝜃 (𝑥) по


плотности 𝜑(𝑥, 𝑦, 𝜃) не составит труда [2].
Минимизировать функционал − ln 𝐿 вместо максимизации 𝐿 проще, так как
он аддитивен по объектам выборки, т.е. имеет вид суммы [2]:
𝑙

− ln 𝐿(𝜃, 𝑋 𝑙 ) = − ∑ 𝑙𝑛 𝜑(𝑥𝑖 , 𝑦𝑖 , 𝜃) → min. (2.5)


𝜃
𝑖=1

Если вероятностную функцию потерь определить как 𝒵 ( 𝑎𝜃 , 𝑥 ) =


𝑙ln 𝜑(𝑥, 𝑦, 𝜃), то функционал − ln 𝐿 совпадает с функционалом эмпирического
риска, т.е. чем хуже пара (𝑥𝑖 , 𝑦𝑖 ) согласуется с моделью 𝜑, тем выше величина
потери 𝒵 (𝑎𝜃 , 𝑥 ) и меньше значение плотности распределения 𝜑(𝑥, 𝑦, 𝜃) [2].
Для формализации задачи обучения существует два родственных подхода:
один основан на введении функции потерь, другой – введение вероятностной
модели порождения данных. Данные подходы приводят к схожим
оптимизационным задачам, т.е. обучение – это оптимизация [4].
Важно понимать, что в машинном обучении нет одного «правильного»
ответа. Обычно дынные зашумлены, и тогда вредно было бы стараться найти
модель, которая бы сто процентов классифицировала обучающие данные, т.к. эта
модель бы оказалась переобученной, что в итоге привело бы к ошибкам во время
распознавания новых. Переобучением (переподгонкой) называется эффект, когда
алгоритм, работающий на объектах, не использующихся в обучающей выборке,
показывает качество существенно хуже, чем на обучающей. Если
минимизировать функционал 𝑄 (𝑎, 𝑋 𝑙 ) на алгоритме 𝑎, то это не значит, что
данный алгоритм на целевой произвольной контрольной выборке 𝑋 𝑘 = (𝑥𝑖′ , 𝑦𝑖′ )𝑘𝑖=1
будет хорошо приближать целевую зависимость [4].
Если метод минимизирует эмпирический риск, но при этом не способен
обучаться, то в итоге, он запомнит обучающую выборку 𝑋 𝑙 и построит алгоритм,
который будет проводить сравнение объектов 𝑥 с объектом 𝑥𝑖 из обучающей
выборки, т.е. если 𝑥 = 𝑥𝑖 , то алгоритм выдаст ответ 𝑦𝑖 , иначе алгоритм выдаст
произвольный ответ. Эмпирический риск в данном случае промает значение,
19

равное 0, т.е. наименьше возможное, но при этом алгоритм не обладает


способностью восстанавливать зависимость вне обучающих материалов. Из этого
можно сделать вывод, чтобы получить хорошее качество обучения необходимо
обобщать данные, а не только запоминать. Следовательно, обучающая
способность метода 𝜇, при условии, что выборки 𝑋 𝑙 и 𝑋 𝑘 являются
представительными, характеризуется величиной 𝑄(𝜇(𝑋 𝑙 ), 𝑋 𝑘 ).
Представительными называются такие выборки 𝑋 𝑙 и 𝑋 𝑘 , которые являются
простыми и получены из одного и того же вероятностного распределения на
множестве 𝑋 [1].
Если при малых значениях 𝜀 и 𝜂 справедливо неравенство
𝑃𝑋 𝑙,𝑋 𝑘 {𝑄(𝜇(𝑋 𝑙 ), 𝑋 𝑘 ) > 𝜀} < 𝜂, то метод обучения 𝜇 называется состоятельным.
Параметр 𝜀 называется точностью, а параметр (1 − 𝜂) – надежностью. Допустима
также эквивалентная формулировка: для любых простых выборок 𝑋 𝑙 и 𝑋 𝑘 оценка
𝑄 (𝜇(𝑋 𝑙 ), 𝑋 𝑘 ) ≤ 𝜀 справедлива вероятность 1 − 𝜂 [1].
В самых разных областях человеческой деятельности встречаются
различные задачи по классификации, регрессии и прогнозированию. Приведем
несколько примеров данных задач [4]:
 Задачи классификации: распознавание лиц, распознавание
рукописного текста, антиспам для электронной почты, кредитный скоринг;
 Задачи восстановления регрессии: оценка максимальной суммы
кредита, оценка объемов продаж;
 Задачи ранжирования: ранжирование поисковых запросов,
ранжирование в системах коллаборативной фильтрации;
 Задачи прогнозирования: сейсмопрдсказания, изменение стоимости,
нагрузка на call-центр;
 Задачи кластеризации: группировка текста, разделение людей на
психотипы;
 Задачи поиска ассоциаций: анализ рыночных корзин, анализ
поведения пользователей.
20

Так как не существует универсального метода обучения по прецедентам,


который будет способен решать практически все задачи одинаково хорошо, то
каждый существующий метод обладает своими преимуществами и недостатками,
а также границами применения. На практике приходится проводить численные
эксперименты, для подбора оптимального метода для решаемой задачи. Поэтом
существует два типа экспериментальных исследований [6]:
 Эксперименты на модели данных. Целью данных экспериментов
является выявление границ метода обучения, получения понимания, на что
влияют параметры обучения и построения примеров удачной и не удачной его
работы;
 Эксперименты на реальных данных. Данные эксперименты решают
цель решения конкретной прикладной задачи или поиска «слабых мест» в
используемом методе, а также границ его применения.

2.2. Основных методы машинного обучения для решения задачи


классификации

Подход к задачам обучения — это парадигма, концепция, точка зрения на


процесс обучения, которая приводит к поиску комбинаций базовых
предположений, эвристик и гипотез, на основе которых строится модель,
функционал качества и методы его оптимизации [2].
Разные подходы могут приводить к одной и той же модели, но обучение ее
будет проводиться разными способами. Существуют следующие основные
подходы[4]:
 классификация с помощью деревьев решений. Алгоритм заключается
в делении исходных данных на группы до получения однородных их множеств.
Совокупность правил, дающее такое разнообразие позволяет определять для
новых данных наиболее вероятные номера классов, т.е. делать прогноз. Принцип
«рекурсивного деления» используется в методе деревья решений. В узлах,
начиная с корневого, выбирается признак, значение которого используется для
21

разбиения всех данных на 2 класса. Процесс продолжается до тех пор, пока не


выполнится критерий остановки. Основные недостатки данного метода
заключаются в следующем: проблема получения дерева решений является NP-
полной задачей; при создании сложной конструкции происходит переобучение;
сложное описание концептов; чувствительность к обучающей выборки [2].
 байесовская классификация. Байесовский подход к классификации
основан на теореме, утверждающей, что если плотности распределения каждого
из классов известны, то искомый алгоритм можно выписать в явном
аналитическом виде. Более того, этот алгоритм оптимален, то есть обладает
минимальной вероятностью ошибок. На практике плотности распределения
классов, как правило, не известны. Их приходится оценивать (восстанавливать) по
обучающей выборке. В результате байесовский алгоритм перестаёт быть
оптимальным, так как восстановить плотность по выборке можно только с
некоторой погрешностью. Чем короче выборка, тем выше шансы подогнать
распределение под конкретные данные и столкнуться с эффектом переобучения.
Байесовский подход к классификации является одним из старейших, но до сих
пор сохраняет прочные позиции в теории распознавания. Он лежит в основе
многих достаточно удачных алгоритмов классификации. К числу байесовских
методов классификации относятся: логистическая регрессия, квадратичный
дискриминант, линейный дискриминант Фишера, наивный байесовский
классификатор, метод радиальных базисных функций [2].
 классификация с помощью искусственных нейронных сетей данный
метод подробно будет рассмотрен в данной работе;
 классификация с помощью метода опорных векторов. В основе
метода опорных векторов лежит идея разделения облаков данных
гиперплоскостями, находящихся на максимальном расстоянии от облаков. К
достоинствам метода можно отнести эффективную работу при малом размере
обучающей выборки, недостатки – необходимы ядра для конкретного случая и
большое время обучения [2].
22

 классификация с помощью метода ближайших соседей. Метод


ближайших соседей — простейший метрический классификатор, основанный на
оценивании сходства объектов. Классифицируемый объект относится к тому
классу, которому принадлежат ближайшие к нему объекты обучающей выборки.
Метод ближайшего соседа является, пожалуй, самым
простым алгоритмом классификации. Классифицируемый объект 𝑥 относится к
тому классу 𝑦𝑖 которому принадлежит ближайший объект обучающей выборки
𝑥𝑖 . Метод 𝑘 ближайших соседей. Для повышения надёжности классификации
объект относится к тому классу, которому принадлежит большинство из
его соседей — 𝑘 ближайших к нему объектов обучающей выборки 𝑥𝑖 . В задачах с
двумя классами число соседей берут нечётным, чтобы не возникало ситуаций
неоднозначности, когда одинаковое число соседей принадлежат разным классам.
Метод взвешенных ближайших соседей. В задачах с числом классов 3 и более
нечётность уже не помогает, и ситуации неоднозначности всё равно могут
возникать. Тогда -му соседу приписывается вес 𝑤𝑖 , как правило, убывающий с
ростом ранга соседа 𝑖. Объект относится к тому классу, который набирает
больший суммарный вес среди 𝑘 ближайших соседей [4].
 классификация с помощью генетических алгоритмов.
Для решения задач классификации в последнее время зарекомендовали
нейронные сети. Например, проект Clarifail является одним из лучших в решении
задачи классификации изображений и видео и основывается на модели
искусственных нейронных сетях. Другим примером по использованию нейронных
сетей можно привести российский сервис Findface от компании N-tech.Lab,
который по фотографии находит профиль в социальной сети «Вконтакте». А один
из интересных стартапов Ava по фотографии блюда может сообщить количество
калорий.
Подобных примеров можно привести много. Нейросетевые технологии для
решения задач классификации применяют многие известные компании, такие как
Google, Nvidia, Tesla Motors и другие, это показывает, насколько эффективно
23

проявляют себя нейронные сети. По этой причине в данной работе исследуется


метод нейронных сетей для задачи классификации символов на изображении [21].
Из достоинств нейросетевых алгоритмов можно выделить следующее:
эффективная работа с зашумленными данными; адаптация к изменениям
окружающей среды; отказоустойчивость, т.е. при повреждении некоторого
количества нейронов сеть продолжает функционировать; быстродействие.
24

3 Нейросетевая интерпретация задачи классификации


изображений

Человеческий мозг образуется сетью нейронов, которая представляет собой


параллельную высокоэффективную комплексную систему обработки
информации. Данная система распознает образы во много раз быстрее, чем будет
решена эта задача на современных вычислительных компьютерах. Мозг решает
задачу распознавания образов эффективнее и принципиально другим образом, в
отличие от того, как это делает любая вычислительная система. Именно этот факт
побудил ученых в исследовании и воссоздании нейронных сетей.
Искусственная нейронная сеть – это упрощенная модель биологической НС.
Реальная нейронная сеть — это скопление множества ячеек, которые называются
нейронами, связанных и взаимодействующих между собой различными
способами. Искусственная нейронная сеть дублирует лишь основные принципы
работы биологических НС [17].
При решении нелинейных задач в человеческий мозг в отличии от
современных компьютеров имеет ряд преимуществ [14]:
 Способность к самообучению;
 Устойчивость к ошибкам;
 Адаптивность;
 Массовый параллелизм;
 Распределенные методы представления;
 Практически полное отсутствие границ допустимой области решений;
 Гибкость решения нелинейных проблем.
В данной главе будут рассмотрены теоретические основы построения
нейронных сетей, а также решения задачи классификации изображений с
помощью сверточных НС.
25

3.1. Основные понятия нейронных сетей

Определение искусственной нейронной сети как адаптивной машины


является наиболее емким [17]:
Искусственная нейронная сеть (neural network)– это существенно
параллельно распределенный процессор, который обладает способностью к
сохранению и репрезентации опытного знания. Она сходна с мозгом в 2-х
аспектах:
 Знание приобретается сетью в процессе обучения;
 Для сохранения знания используются силы межнейронных
соединений, называемые также синоптическими весами.
Из основных понятий в нейронной сети можно выделить следующее:
нейрон, архитектура сети и обучение.

Рисунок 2.1 - Модель биологического нейрона

В 1943 году нейрофизиолог МакКаллок и Питтс впервые предложили


модель кибернетического нейрона в статье «Исчисление идей, имманентных
нервной активности». Формально искусственный нейрон представляет
упрощённую модель биологического (Рисунок 2.1) [16]. Он состоит из тела
нейрона (ядро), множества отростков – дендритов, по которым сигнал поступает
26

от других нейронов и аксон, через который нейрон передает импульс к дендритам


другого нейрона. Аксон одного нейрона соединяется с дендритами другого
нейрона с помощью синапсов. При превышении суммарного заряда,
накопленного в клетке нейрона, некоторого порогового значения, происходит
возбуждение нейрона. Возбуждённый нейрон передает сигнал через аксон и
синапсы на другие нейроны [15].
Формально искусственный нейрон состоит из трех частей (Рисунок 2.2):
входной сумматор, нелинейный преобразователь и точка ветвления на входе [17].

Точка
Входной Нелинейный ветвления
суммато преобразователь
р
Рисунок 2.2 - Модель искусственного нейрона

Адаптивный сумматор является одной из важных частей нейрона,


вычисляющий скалярное произведения вектор входного сигнала 𝑥 на вектор
настраиваемых параметров 𝑤. Далее сигнал проходит через функцию активности.
Функция активности или нелинейный преобразователь представляет собой
скалярный входной сигнал 𝑡 = (𝑤, 𝑥) в сигнал 𝜑 и передает его на аксон. В
качестве функций активаций обычно используется [16]:
 (1 + 𝑒 −𝑡 )−1 - cигмоидная функция;
 𝑡ℎ(𝑡) – гиперболический тангенс;
 ln(𝑡 + √𝑡 2 + 1) – логарифмическая функция;
1, 𝑡 > 0,
 𝑠𝑔𝑛(𝑡) = { – сигнум, или функция знака;
−1, 𝑡 ≤ 0
1, 𝑡 > 0,
 𝜂 (𝑡 ) = { – функция Хэвисайда;
0, 𝑡 ≤ 0
27

 𝜑(е) = 𝑡 – тождественная функция.


Синапс или линейная связь умножает входной сигнал 𝑥 на вес синапса 𝑤.
Для рассылки одного сигнала по другим нейронам используется точка ветвления
[14].
Архитектуру искусственной нейронной сети можно представить в виде
направленного взвешенного графа, где узлами являются нейроны. Рассматривая
архитектуру нейронных сетей, можно выделить следующие классы [17]:
 Сеть прямого распространения или многослойный персептрон. В
данной архитектуре сеть нейронная сеть проставляется последовательными
слоями, которые имеют однонаправленную связь между собой. Данные сети
являются статическими, т.е. они вырабатывают одну совокупность выходных
значений, не зависящих от предыдущего состояния сети;
 Сети с обратными связями или рекуррентные. Данные сети являются
динамическими, так как в силу обратных связей в них модифицируются входы
нейронов, что приводит к изменению состояния сети.
Фундаментальным свойством мозга является обучение. В искусственных
нейронных сетях можно дать следующее понятие обучения:
Обучение НС - настройка архитектуры сети и весов связей для
эффективного выполнения специальной задачи [20].
Процесс настройки весов или обучение нейронной сети происходит по
обучающей выборке. По мере итеративной настройки весовых коэффициентов
качество работы нейронной сети улучшается. По сравнению с системами,
следующими по определенной совокупности правил, выделенных экспертами,
способность нейронных сетей к обучению делают их привлекательными. Для
конструирования процесса обучения, прежде всего, необходимо иметь модель
внешней среды, в которой функционирует нейронная сеть - знать доступную для
сети информацию. Эта модель определяет парадигму обучения. Также
необходимо понять, каким способом проводить модификацию весовых
параметров сети - какие правила обучения управляют процессом настройки.
28

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


обучения для настройки весов.

3.2. Обучение нейронной сети методом обратного распространения


ошибок.
Алгоритм обратного распространения является одним из самых популярных
алгоритмов, который основывается на коррекции ошибок нетренированной сети.
В алгоритме обратного распространения ошибок существует два прохода [14]:
 Прямой, при котором данные из обучающей выборки, в виде вектора,
подаются на вход нейронной сети, и распространение сигнала происходит в
прямом направлении. После прохождение сигнала через все слои сети генерируя
выходной вектор.
 Обратный, при котором выходной вектор вычитается из желаемого из
учебных данных, в результате чего находится сигнал ошибки,
распространяющийся по сети в обратном направлении навстречу синоптическим
связям. При обратном проходе вычисляется величина коррекции для весов
нейронной сети.
Рассмотрим алгоритм обратного распространения ошибке на примере
двухслойного персептрона (Рисунок 2.3).

Рисунок 2.3 - модель двухслойного персептрона


29

На начальном этапе обучения веса нейронов инициализированы случайным


образом. Для тренировки сети используется обучающая подвыборка из 𝑁
входных векторов 𝑥1 , 𝑥2 , … , 𝑥𝑁 и соответствующие желаемые результаты на
выходе 𝑑1 , 𝑑2 , … , 𝑑𝑁 . 𝑁1 , 𝑁2 , 𝑁3 – количество нейронов соответственно в первом,
втором и третьем слое. Последовательное обучение подразумевает собой
представление по порядку входных векторов одним за одним и проводить
коррекцию весов согласно выбранным правилам. Тогда сигнал ошибки на 𝑗
выходном нейроне можно найти по следующей формуле [16]:
𝑒𝑗 (𝑛) = 𝑑𝑗 (𝑛) − 𝑦𝑖 (𝑛) (3.1)
Иногда применяется аналогия из термодинамики – энергия ошибки -го
1
нейрона, определенную как 𝑒𝑗2 . Общая энергия ошибки сети будет определена
2

как:
𝑁3
1
𝐸(𝑛) = ∑ 𝑒𝑗2 (𝑛) (3.2)
2
𝑗=1

Также (3.2) можно рассматривать в качестве функции для минерализации,


которая зависит от синоптических связей всей сети. Усреднению энергию по всем
образцам учебного набора можно рассматривать как энергию среднеквадратичной
ошибки, которую можно рассматривать в качестве эффективности обучения
нейронной сети [16]:
𝑁 𝑁 𝑁3
1 1
𝐸̅ (𝑛) = ∑ 𝐸(𝑛) = ∑ ∑ 𝑒𝑗2 (𝑛) (3.3)
𝑁 2𝑁
𝑛=1 𝑛=1 𝑗=1

Аргумент функции активации -го нейрона во втором слое сети на итерации


𝑛, т.е. при подаче из обучающей выборки 𝑛-го образца:
𝑁1

𝑣𝑗 (𝑛) = ∑ 𝑤𝑖𝑗 (𝑛)𝑦𝑖 (𝑛), (3.4)


𝑖=0

Где 𝑦𝑖 (𝑛) выходной сигнал предыдущего слоя. Функциональный сигнал на


выходе рассматриваемого -го нейрона равен:
30

𝑦𝑗 (𝑛) = 𝜎𝑗 (𝑣𝑗 (𝑛)) 3.5

Алгоритм обратного распространения заключается в использовании к


синоптическому весу 𝑤𝑗𝑖 (𝑛) коррекции ∆𝑤𝑗𝑖 (𝑛), которая пропорциональна
𝜕𝐸(𝑛)
частной производной . Для вычисления компонента градиента ошибки
𝜕𝑤𝑗𝑖 (𝑛)

можно использовать цепное правило, т.е.:


𝜕𝐸 (𝑛) 𝜕𝐸 (𝑛) 𝜕𝑒𝑗 (𝑛) 𝑦𝑗 (𝑛) 𝑣𝑗 (𝑛)
= (3.6)
𝜕𝑤𝑗𝑖 (𝑛) 𝜕𝑒𝑗 (𝑛) 𝜕𝑦𝑗 (𝑛) 𝜕𝑣𝑗 (𝑛) 𝜕𝑤𝑗𝑖 (𝑛)
Стоит учесть, что в (3.5) все обозначения относятся только к окружению -го
нейрона. Продифференцировав уравнения (3.2), (3.1), (3.5) и (3.4) по 𝑒𝑗 (𝑛), 𝑦𝑗 (𝑛),
𝑣𝑗 (𝑛) и 𝑤𝑗𝑖 (𝑛) соответственно получим:
𝜕𝐸 (𝑛)
= 𝑒𝑗 (𝑛) (3.7)
𝜕𝑒𝑗 (𝑛)
𝜕𝑒𝑗 (𝑛) (3.8)
= −1
𝜕𝑦𝑗 (𝑛)
𝑦𝑗 (𝑛) (3.9)
= 𝜎𝑗 ′ (𝑣𝑗 (𝑛))
𝜕𝑣𝑗 (𝑛)
𝑣𝑗 (𝑛) (3.10)
= 𝑦𝑖 (𝑛)
𝜕𝑤𝑗𝑖 (𝑛)
Используя все полученные выше выражения подставим в (3.6):
𝜕𝐸 (𝑛)
= −𝑒𝑗 (𝑛)𝜎𝑗 ′ (𝑣𝑗 (𝑛)) 𝑦𝑖 (𝑛) (3.11)
𝜕𝑤𝑗𝑖 (𝑛)
Коррекция ∆𝑤𝑗𝑖 (𝑛), применяемая к весу 𝑤𝑗𝑖 (𝑛), определяется по дельта-
правилу:
𝜕𝐸 (𝑛)
∆𝑤𝑗𝑖 (𝑛) = −𝜂 , (3.12)
𝜕𝑤𝑗𝑖 (𝑛)
где 𝜂 является параметром скорости обучения алгоритма обратного
распространения ошибок. Определить направление минимума (3.2) целевой
функции можно определить с помощью знака минус, который указывает на
движение в направление противоположному градиенту. Подставляя (3.11) в
31

(3.12), получим:
∆𝑤𝑗𝑖 (𝑛) = 𝜂𝛿𝑗 (𝑛) 𝑦𝑖 (𝑛) (3.13)
Обычный локальный градиент 𝛿𝑗 (𝑛) определяется с помощью выражения:
𝜕𝐸 (𝑛) 𝜕𝐸 (𝑛) 𝜕𝑒𝑗 (𝑛) 𝑦𝑗 (𝑛)
𝛿𝑗 (𝑛) = − = = 𝑒𝑗 (𝑛)𝜎𝑗 ′ (𝑣𝑗 (𝑛)) (3.14)
𝜕𝑣𝑗 (𝑛) 𝜕𝑒𝑗 (𝑛) 𝜕𝑦𝑗 (𝑛) 𝜕𝑣𝑗 (𝑛)
Как можно увидеть из этих выражений, сигнал ошибки 𝑒𝑗 (𝑛) необходим нам
для вычисления величины коррекции. В случае выходного нейрона, получить
сигнал ошибки не сложно, так как желаемый результат известен и остается только
вычислить локальный градиент используя (3.1) и (3.14), но, чтобы вычислить
сигнал ошибки нейрона в скрытом слое, необходимо вычислять рекурсивно
ошибки всех связанных с ним нейронов. Тогда для вычисления локального
градиента нейрона в скрытом слое можно использовать выражение [16]:
𝜕𝐸 (𝑛) 𝑦𝑗 (𝑛) 𝜕𝐸 (𝑛)
𝛿𝑗 (𝑛) = − =− 𝜎 ′ (𝑣 (𝑛)) (3.15)
𝜕𝑦𝑗 (𝑛) 𝜕𝑣𝑗 (𝑛) 𝜕𝑦𝑗 (𝑛) 𝑗 𝑗
𝜕𝐸(𝑛)
При вычислении частной производной в (3.16), где суммирование
𝜕𝑦𝑗 (𝑛)

производится по нейронам выходного слоя, получим:


𝜕𝐸 (𝑛) 𝜕𝑒𝑘 (𝑛)
= ∑ 𝑒𝑘 (𝑛) (3.16)
𝜕𝑦𝑗 (𝑛) 𝜕𝑦𝑗 (𝑛)
𝑘

Данное выражение можно переписать, при использование цепного правила


𝜕𝑒𝑘 (𝑛)
для производной , в форму:
𝜕𝑦𝑗 (𝑛)

𝜕𝐸 (𝑛) 𝜕𝑒𝑘 (𝑛) 𝜕𝑣𝑘 (𝑛)


= ∑ 𝑒𝑘 (𝑛) (3.17)
𝜕𝑦𝑗 (𝑛) 𝜕𝑣𝑘 (𝑛) 𝜕𝑦𝑗 (𝑛)
𝑘

Величина ошибки для k-го выходного нейрона при (3.1) и (3.5) составляет:
𝑒𝑘 (𝑛) = 𝑑𝑘 (𝑛) − 𝜎𝑘 (𝑣𝑘 (𝑛)) (3.18)
Отсюда
𝜕𝑒𝑘 (𝑛)
= −𝜎𝑘 ′(𝑣𝑘 (𝑛)) (3.19)
𝜕𝑣𝑘 (𝑛)
Чтоб не потерять общность рассуждений для нейрона в любом слое
32

,дальнейшее упрощение выражений не производится, несмотря на то, что 𝜎(𝑣 ) =


𝑣 и 𝜎 ′ = 1.
Предполагая, что 𝑦0 (𝑛) = 1, индуцированное локальное поле нейрона будет
равняться [16]:
𝑁2

𝑣𝑘 (𝑛) = ∑ 𝑤𝑘𝑗 (𝑛)𝑦𝑗 (𝑛) (3.20)


𝑘=0

Продифференцировав это выражения получим:


𝜕𝑣𝑘 (𝑛)
= 𝑤𝑘𝑗 (𝑛) (3.21)
𝜕𝑦𝑗 (𝑛)
Используя (3.21) и (3.19) в (3.17), получим соотношение:
𝜕𝐸 (𝑛)
= − ∑ 𝑒𝑘 (𝑛)𝜎𝑘′ (𝑣𝑘 (𝑛))𝑤𝑘𝑗 (𝑛) = ∑ 𝛿𝑘 (𝑛)𝑤𝑘𝑗 (𝑛) (3.22)
𝜕𝑦𝑗 (𝑛)
𝑘 𝑘

Для локального градиента 𝛿𝑗 (𝑛) j-го скрытого нейрона получим формулу


обратного распространения подставляя (3.22) в (3.15):

𝛿𝑗 (𝑛) = 𝜎𝑗′ (𝑣𝑗 (𝑛)) ∑ 𝛿𝑘 (𝑛)𝑤𝑘𝑗 (𝑛) (3.23)


𝑘

Собрав все воедино можно, для реализации алгоритма обратного


распространения ошибки можно определить дельта правило:
∆𝑤𝑗𝑖 (𝑛) = 𝜂𝛿𝑗 (𝑛)𝑦𝑗 (𝑛), (3.24)
где ∆𝑤𝑗𝑖 (𝑛) – коррекция веса, 𝜂 – параметр скорости обучения, 𝛿𝑗 (𝑛) – локальный
градиент, 𝑦𝑗 (𝑛) – входной сигнал j-го нейрона [16].
Стоит учесть, что локальный градиент 𝛿𝑗 (𝑛) будет завесить от положения в
нейронной сети:
 j-ый нейрон является выходным. В данном случае локальный
градиент 𝛿𝑗 (𝑛) согласно (3.14) будет равняться произведению производной

𝜎𝑗′ (𝑣𝑗 (𝑛)) на ошибку 𝑒𝑗 (𝑛);

 j-ый нейрон является скрытым. Локальный градиент 𝛿𝑗 (𝑛) согласно

(2.23) можно найти путем умножения производной 𝜎𝑗′ (𝑣𝑗 (𝑛)) на взвешенную
33

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


Каждая итерация алгоритма обратного распространения ошибки
заключается в двух этапах [16]:

 Прямой проход: 𝑦𝑖 (𝑛) = 𝜎𝑗 (𝑣𝑗 (𝑛)), где 𝑣𝑖 (𝑛) = ∑𝑖 𝑤𝑘𝑗𝑖 (𝑛)𝑦𝑖 (𝑛).

𝑦𝑖 (𝑛) = 𝑥𝑖 (𝑛), если нейрон находится в первом скрытом слое, и 𝑦𝑗 (𝑛) = 𝜎𝑗 (𝑛), где
𝜎𝑗 (𝑛) – на выходной терминале сети, если нейрон является выходным. Прямой
проход подает на вход очередной вектор 𝑥𝑛 и заканчивается, вычисляя ошибку на
выходе 𝑒𝑛 = 𝑑𝑛 − 𝑜𝑛 ;
 Обратный проход, на котором на выходной слой подается сигнал
ошибки, и при движении справа налево параллельно производится вычисление
локального градиента. При движении в обратном направлении осуществляется
коррекция весов, вычисляется локальный градиент, который в дальнейшем
используется для вычисления градиента последующего (при обратном
распространении) слоя нейронов.
К функции активации в нейронных сетях при использовании алгоритма
обратного распространения ошибки предъявляется требование
дифференцируемости [23]. Наиболее часто встречаемые функции активации были
приведены в разделе 3.1. Так как через значение самой функции можно выразить
производную функции активации, это позволяет при прямом проходе не
производить непосредственное вычисление производной функции, а использовать
значения функции, вычисленные при прямом проходе [22].
Алгоритм обратного распространения строит в пространстве весов
некоторую траекторию аппроксимации, которая вычисляется с помощью метода
наискорейшего спуска. При меньшем параметре обучения 𝜂 корректировка
синоптических связей производится меньше, а траектория в пространстве весов
становится более гладкой. Но чрезмерное уменьшение этого параметра это
приводит к замедлению процесса обучения, а использование слишком большого
параметра приводит к неустойчивости алгоритма и минимизировать ошибку не
получится. Обобщенное дельта правило позволяет повышать скорость обучения
34

без потерь устойчивости и является модернизированным дельта правилом (3.13)


путем использования «момента инерции»:
∆𝑤𝑗𝑖 (𝑛) =∝ 𝑤𝑗𝑖 (𝑛 − 1) + 𝜂𝛿𝑗 (𝑛)𝑦𝑖 (𝑛) (3.25)
где ∝ - постоянный момент, в большинстве случаев положительный. С точки
зрения теории оптимизации алгоритм обратного распространения может
рассматриваться как специфическая реализация градиентного метода
минимизации целевой функции 32.3). А обобщенное дельта правило может
рассматриваться как метод регуляризации решения задачи минимизации [16].

3.3. Задачи, решаемые с помощью нейронных сетей

На данном этапе развития НС хорошо зарекомендовали в решении многих


задач машинного обучения [17]:
 Классификация образов. Задача состоит в указании принадлежности
входного образа (например, речевого сигнала или рукописного символа),
представленного вектором признаков, одному или нескольким предварительно
определенным классам. К известным приложениям относятся распознавание букв,
распознавание речи, классификация сигнала электрокардиограммы,
классификация клеток крови. В робототехнике одним из основных приложений
является распознавание объектов из видеоинформации, полученной от системы
технического зрения [16];
 Аппроксимация функций. Предположим, что имеется обучающая
выборка ((𝑥1 , 𝑦1 ), … , (𝑥𝑛 , 𝑦𝑛 )) (пары данных вход-выход), которая генерируется
неизвестной функцией (𝑥), искаженной шумом. Задача аппроксимации состоит в
нахождении оценки неизвестной функции (𝑥). Аппроксимация функций
необходима при решении многочисленных инженерных и научных задач
моделирования;
 Кластеризация/категоризация. При решении задачи кластеризации,
которая известна также как классификация образов "без учителя", отсутствует
обучающая выборка с метками классов. Кластеризация - метод, применяющийся
35

для анализа больших наборов данных заключающийся в разбиении всего


множества на группы близкородственных элементов (кластеры). Кластеризация
может быть использована для решения таких задач как обработка изображений,
классификация, тематический анализ коллекций документов, построение
репрезентативной выборки. Известны случаи применения кластеризации для
извлечения знаний, сжатия данных и исследования свойств данных;
 Предсказание/прогноз. Пусть заданы n дискретных отсчетов
{𝑦(𝑡1 ), 𝑦(𝑡2 ), … , 𝑦(𝑡𝑛 )} в последовательные моменты времени t1, t2,..., tn . Задача
состоит в предсказании значения 𝑦(𝑡𝑛 + 1) в некоторый будущий момент времени
𝑡𝑛 + 1. Предсказание/прогноз имеют значительное влияние на принятие решений
в бизнесе, науке и технике. Предсказание цен на фондовой бирже и прогноз
погоды являются типичными приложениями техники предсказания/прогноза;
 Ассоциативная память. В модели вычислений фон Неймана, которая
используется в современных вычислительных машинах, обращение к памяти
доступно только посредством адреса, который не зависит от содержания памяти.
Более того, если допущена ошибка в вычислении адреса, то может быть найдена
совершенно иная информация. Ассоциативная память, или память, адресуемая по
содержанию, доступна по указанию заданного содержания. Содержимое памяти
может быть вызвано даже по частичному входу или искаженному содержанию.
Ассоциативная память чрезвычайно желательна при создании мультимедийных
информационных баз данных [18];
 Оптимизация. Многочисленные проблемы в математике, статистике,
технике, науке, медицине и экономике могут рассматриваться как проблемы
оптимизации. Задачей алгоритма оптимизации является нахождение такого
решения, которое удовлетворяет системе ограничений и максимизирует или
минимизирует целевую функцию. Задача коммивояжера, относящаяся к классу
NP-полных, является классическим примером задачи оптимизации;
36

3.4. Решение задачи классификации изображений с помощью


сверточной нейронной сети.

Задача классификации изображения заключается в приёме картинки на вход


некий классификатор, а на выход получать класс, соответствующий объекту на
изображении, или вектор вероятностей, который лучше всего классифицирует
изображение. В качестве классификатора может выступать, как и человек, так и
машина. В отличии от человека, компьютер видит изображение в виде массива
пикселей, а точнее в виде массива чисел, характеризующий каждый пиксель. Для
человека эти цифры бессмысленны, но для компьютера это единственные данные
для распознавания [19].
В машинном обучении одним из самых распространённых способов
классификации объекта на изображении является признаковое описание объекта,
характеризующая каждый объект набором признаков. Но стоит учесть, что не для
всех данных открытые признаки не дают хорошей точности классификации.
Такими признаками могут являться цифровой звуковой сигнал или цвет точек.
Для машины очень сложно производить классификацию изображений котов или
машин, чем человеку, так как эти данные имеют скрытые признаки, которые
тяжело понять машине, в отличии от человека [19].
Глубокое обучение – это набор алгоритмов машинного обучения. Данный
набор методов пытается моделировать высокоуровневые абстракции в данных,
т.е. старается выделить из данных скрытые признаки [3].
Автоэнкодер - один из алгоритмов машинного обучения без учителя, в
котором размер выходного вектора, равен входному. Нейронная сеть прямого
распространения без обратных связей является одной и распространённых
архитектур автоэнкодера, и состоит из входного слоя и выходного, равных по
количеству нейронов и скрытых слоев. Данные, полученные на входном слое,
сжимаются с помощью скрытого слоя, после чего происходит восстановление на
выходном слое, благодаря чему выделяются скрытые признаки [25].
Но автоэнкодер имеет существенный недостаток, а именно его стоит
37

применять на данных небольшого размера, так как при использовании больших


данных процесс обучения существенно вырастит. В качестве примера можно
рассмотреть классификацию картинок размером 𝑚 × 𝑛 = 8 × 8. Выделять мы
хотим 50 признаков. Тогда размер входного слоя составит 8 × 8 = 36 нейронов,
соответственно размер выходного слоя тоже будет 36 нейронов (из определения
автоэнкодера). Если мы хотим выделять 50 признаков, то и размер скрытого слоя
будет составлять 50 нейронов. Соответственно число весов равно 2 × 𝑚 × 𝑛 ×
𝑘 = 2 × 8 × 8 × 50 = 6400. Если же размер изображений для классификации
будет составлять 100 × 100, то количество связей увеличится до 100000 [26].
Для снижения зависимости размера нейронной сети от размера входного
изображения, используется метод сверточных нейронных сетей. Сверточные
нейронные сети были предложены Яном Лекуном на основе исследования
зрительно коры кошек. В данном исследовании были открыты простые клетки,
реагирующие на прямые линии под разным углом, и сложные, которые
реагировали только в случае комбинации нескольких простых клеток. Отсюда и
появилась идея сверточных нейронных сетей, которая заключается в чередовании
сверточных слоев и субдискретизирующих слоев [8].
Сверточная нейронная сеть отличается от обычно персептрона тем, что
каждый нейрон слоя связан не со всеми нейронами предыдущего слоя, а только с
его частью. В данном типе сетей для операции свертки используется небольшая
матрица, которая передвигается по обрабатываемому слою с некоторым шагом
смещения. Для первого слоя, данная матрица двигается по входному
изображению. После каждого сдвига формируется сигнал для активации нейрона
следующего слоя и с соответствующей позиции. Данная матрица называется
ядром свертки или фильтром, она производит кодирования какого-либо признака.
Следующий слой благодаря этой матрице показывает наличие того или иного
признак в предыдущем обрабатываемом слое и его координаты, тем самым
формируется карта признаков. В сверточных нейронных сетях используется не
одна матрица весов, а набор, характеризующий тот или иной признак. Ядра
38

сверти формируются автоматически во время обучения, например, методом


обратного распространения ошибки. Каждый набор весов при проходе формирует
свой признак. Таким образом сеть становится многоканальной [12].
Для уменьшения размерности карты признаков используется операция
субдискритизации, а слой сети в данном случае называется слоем
субдискритизации или пулинга. Для задачи классификации изображений
информация о присутствие признака важнее, чем его положения, поэтому слой
пулинга из нескольких соседних нейронов выбирает максимальный или находит
их среднее значение весов. Получившийся нейрон подставляется в новую
уплотнению карту признаков [19].

Рисунок 3.4 - Модель сверточной нейронной сети

Рассмотрим архитектуру сверточной нейронной сети поподробнее (Рисунок


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

Данное чередование слоев позволяет распознавать сложные иерархические


признаки. После прохождения скольких слоев свертки и субдискритизации,
обычно карта признаков превращается в вектор признаков, но таких векторов
становится сотни. Перед выходным слоем в сверточной нейронной сети
находится обычный многослойны персептрон, на вход которому подается карта
признаков. Этот персептрон и решает задачу классификации по карте признаков
[19].
Сверточная нейронная сеть обычно состоит из следующих слоев [27]:
 Слой свертки (Рисунок 3.5), который служит для составления карт
признаков;

Рисунок 3.5 - Слой свертки

 ReLU слой - блок линейной ректификации, используется в качестве


функции активации после сверточного слоя и представляет собой функцию вида
𝑓 (𝑥 ) = max(0, 𝑥 ).
 Слой субдискретизации или пулинга (Рисунок 3.6). Служит для
сокращений размерности карт признаков;

Рисунок 3.6 - Слой субдискретизации


40

 Полносвязанный слой (Рисунок 3.7) – слой, который по карте


признаков определяет к какому классу относится наблюдаемый объект и на выход
выдает вектор вероятностей принадлежности объекта к тому или иному классу;

Рисунок 3.7 - Полносвязанный слой

 Dropout слой. Используется для борьбы с переобучением, при


обучении стохастическим градиентным спуском. Работа данного слоя
заключается в модернизации структуры сети, путем выбрасывания нейрона с
некоторой вероятностью.
Говоря о преимуществах сверточной нейронной сети можно выделить
следующее [28]:
 Уменьшение количества параметров и повышение скорости обучения
сети, в отличии от многослойного персептрона;
 Устойчивость к помехам, искажениям, сдвигам и поворотам входного
изображения;
 Возможность распараллеливания вычислений и реализации
алгоритмов обучения сети на графических процессорах (GPU), что сокращает
время обучения нейронной сети;
 На данный момент является одним из самых лучших и
зарекомендовавших себя алгоритмов для задачи классификации изображений.
К недостаткам алгоритма можно отнести только большое количество
настраиваемых параметров.
41

При решении задачи классификации символов на изображении на вход


сверхточной нейронной сети подается массив, описывающий изображение
символа. После прохода сигнала через сеть на выходе формируется вектор, в
случае если распознавание проводится только по английскому алфавиту и
цифрам, то размер выходного вектора равен 62. В выходном векторе показывается
вероятность отношения символа к какому-либо классу. Как уже говорилось выше,
для обучения обычно применяется метод обратного распространения ошибок [29].
42

4 Экспериментальные исследования

4.1. Среда и оборудование для экспериментов

Для работы со сверточными нейронными сетями использовалась


программное обеспечение Matlab R2016a и встроенная библиотека
ConvolutionNeuralNetwork. Сред разработки Matlab имеет хороший функционал
для визуализации и анализа изображений (Image Processing Toolbox) и позволяет
быстро и легко исследовать разные конфигурации нейронных сетей,
анализировать процесс обучения с помощью графиков, а также поддержку для
работы с графическими ускорителями, что уменьшает время, затрачиваемое на
обучение нейронных сетей. Matlab Имеет хорошую документацию, что позволяет
быстро и без проблем изучить данную среду и начать с ней работать. Для
проведения экспериментов использовалась два компьютера со следующими
характеристиками:
 ПК1: CPU Intel core-i5 5200U, 8 ГБ ОЗУ, Nvidia GT 840M 2ГБ;
 ПК2: CPU Intel core-i3 4130, 10 ГБ ОЗУ, Nvidia GT 710M 2ГБ.
При составлении скриптов для чтения данных, работы с изображением и
обучением использовались следующие основные функции [31]:
 Для работы с изображением:
o imread(pathFile) - считывает файл pathFile и возвращает два
значения [image, map], где image - массив палитрового изображения,
map - палитра;
o imshow(image) - выводи изображение image на экран
o iminfo (pathFile) - возвращает информацию об изображении
pathFile и информации о его хранении.
o ind2rgb(image, map) - производит преобразование палитрового
изображения image в полноцветное, используя палитру map;
o im2double(image) - преобразует изображение в массив типа double;
o rgb2gray(image) - преобразует цветное изображение image в
43

градиент серого.
o imresize(image, [weight height]) - создает изображение изменяя
размер исходного image на [weight height];
o imrotate(arr, angle, 'bicubic','crop') - создает изображения, путем
поворота исходного image на угол angle, использую интерполяцию по
бикубической поверхности ('bicubic'), 'crop' используется для того, что
размер нового изображения соответствовал размерам исходного;
 Для работы со сверточными нейронными сетями [30]:
o imageInputLayer(inputSize) - задает входной слой размером
inputSize;
o convolution2dLayer(filterSize, numFilters) - задает слой свертки с
размером фильтра filterSize и количество этих фильтров numFilters;
o maxPooling2dLayer(poolSize) - задает слой подвыборки, путем
поиска максимального элемента в окне подвыборки с размером
оpoolsize;
o averagePooling2dLayer(poolSize) - задает слой подвыбрки, путем
поиском среднего значения в окне подвыборки с размером poolSize;
o fullyConnectedLayer(outputSize) - задает полносвязанный слой с
количеством нейронов равных outputSize;
o dropoutLayer(probability) - задает слой DropOut с коэффициентом
probability;
o softmaxLayer() - задает слой, который находит максимальный
элемент в выходном векторе и сопоставляет его соответствующему
классу;
o classificationLayer() - задает выходной слой размером
предшествующего полносвязанного слоя , который хранит выходной
вектор.
o trainingOptions('sgdm', 'MaxEpoches', maxepochs, 'MiniBatchSize',
minibatchsize, InitealLearnRate', initeallearnRate) - задает параметры
44

обучения нейронной сети, где 'sgdm' - тип обучения - стохастический


градиентный спуск; maxepochs - количество эпох обучения;
minibatchsize- размер партии, после которой происходит
корректировка весов; initeallearnrate - значение скорости обучения;
o trainNetwork(x_train, y_train, layer, options) - обчение нейронной
сети с архитектурой layer по входным данным x_train и выходным -
y_train, и параметрами обучения options;
o classify(net, x) - функция производит классификацию данных x на
нейронной сети net;

4.2. Выбор и подготовка данных для обучения

Для получения качественных результатов при обучении нейронной сети


необходимо подобрать репрезентативные данные для обучения, т.е. чтоб выборка
обладала достаточным количеством разнообразных данных для обучения, в
которых нейронная сеть смогла бы выделить необходимые признаки для
дальнейшей классификации объектов. Поэтому к обучающим данным выделяются
следующие требования [33]:
1) Достаточность, т.е. количество данных должно быть достаточно, чтоб
нейронная сеть смогла достигнуть обобщающей способности. Если данных будет
недостаточно, то сеть может переобучиться, т.е. запомнить данные, в результате
чего на обучающей выборки будет высокий процент распознавания, а на тестовой
низкий. Количество данных должно позволять их разделить на обучающую и
тестовую подвыборки. При разделении выборки на обучающую и тестовую стоит
учесть, что данные выборки не должны пересекаться.
2) Разнообразие, т.е. в обучающей выборки должно быть большое
разнообразие данных для каждого класса. Если все данные будут однообразны, то
нейронной сети не полечится достичь обобщающей способности;
3) Равномерность предоставления классов, т.е. количество данных,
представляющих каждый, класс должно быть примерно в одинаковом количестве.
45

Если количество данных по какому-либо классу будет преобладать, то возможен


"перекос" сети в сторону этого класса, что приведет к тому, что преобладающий
класс будет определен моделью, как наиболее вероятный для любых новых
объектов.
Поиск данных осуществлялся на Интернет-ресурсе kaggle.com. Kaggle
является крупнейшей платформой, где проводится соревнования по решению
прикладных задач машинного обучения. На данном ресурсе представлено
большое количество размеченных и хорошо подобранных данных для обучения и
тестирования разных методов машинного обучения. Также данный ресурс
позволяет ознакомится с решениями других участников какого-либо
соревнования (после завершения) и произвести анализ данного решения, сравнив
со своим. На данном ресурсе было выбрано соревнование "First Step With Julia"
[32], соответствующее задаче данной работы, т.е. распознавание символов на
изображении.
В соревновании "First Step With Julia" используется набор данных Chars74k,
состоящий из картинок символов, взятых из естественных изображений Google
Street View. Данные символы (Рисунок 4.1) имеют на картинках различный
шрифт, угол поворота, фон и зашумленность. Предоставленные данные на
соревновании сразу разбиты на две части: обучающую и тестовую. Все данные
обучающей выборки в размере 6283 изображения размечены. Тестовый набор
данных предоставлен только в виде набора 6222 картинок. Результаты проверки
решения по тестовые выборки отправляются на сайт, где и получается точность
классификации.

Рисунок 4.1 - Пример изображений для распознавания

Данные для обучения также были разбиты на 2 подвыборки: 2/3 -


46

изображений для обучения и 1/3 для проверки качества работы сети во время
обучения. Все изображения являются цветными, поэтому они были
преобразованы в градиент серого, т.к. цвет символов не должен оказывать
влияния на процесс классификации.
Для загрузки и предобработки изображений в среду Matlab были написаны
следующие функции (Приложение A):
 Load2ConvertSize (pathFolder, size, startIndex, finishIndex) – функция
для загрузки изображений из папки pathFolder, изменение размеров до size без
сохранения пропорций и преобразование в градиент серого;
 Load2ConvertSizeProp (pathFolder, size, startIndex, finishIndex) –
функция для загрузки изображений из папки pathFolder, изменение размеров до
size c сохранением пропорций и преобразование в градиент серого.

4.3. Поиск оптимальных параметров нейронной сети

Для характеристики качества обучения использовалась общепринятая


метрика – точность классификации, т.е. соотношение количества правильно
классифицированных символов из выборки к размеру самой выборки.
Для тестирования конфигураций был подготовлен скрипт test.m
(Приложение А).
В качестве отправной точки была взята простая конфигурация нейронной
сети (Рисунок 4.2), которую будем называть исходной конфигурацией, состоящая
из входного слоя размером 20х20, сверточного слоя размером фильтра 3х3 и
количеством фильтров равным 16, слоем пулинга (maxpool) – 2x2,
полносвязанным слоем, состоящим из 62 нейронов (по количеству классов) и
слоем softmax, который определяет к какому классу относится изображение.
Данная конфигурация показала точность классификации 50% (0,5099).
47

Рисунок 4.2 – Стартовая конфигурация

Такая точность классификации не удовлетворяет для решения задачи


классификации символов. Поэтому для улучшения точности классификации
необходимо решить следующие задачи:
1. Найти оптимальную структуру скрытых слоев: размер фильтров и их
количество в сверточных слоях, количество и разный порядок сверточных слоев,
слоев пулинга и полносвязанных слоев;
2. Исследовать влияние слоев ReluLayer и Dropout;
3. Найти оптимальный размер входного изображения;
4. Исследовать влияние увеличения обучающей выборки;
5. Подобрать оптимальные гиперпараметры обучения: количество эпох,
скорость обучения, размер минипартий (miniBachsize).
Для решения первой задачи были проведен ряд испытаний, в которых
проверялись конфигурации с различным набором слоев, их размером и
чередованием. Эксперименты проводились по 400 эпох, с измерением точности
классификации на проверочной выборке каждых 50 эпох.
На первом этапе исследовалось влияние размера фильтра (Таблица 4.1) в
сверточном слое, количество фильтров составляло 16, и количеством фильтров
(Таблица 4.2) в сверточном слое, размеры фильтров 3х3 на качество обучение. По
данным экспериментам, можно сделать следующее заключение, что чрезмерное
увеличение размера фильтра и количества фильтров в слое свертки приводит к
ухудшению точности классификации.
48

Таблица 4.1 – Влияние размера фильтра в свертоном слое


Количество эпох
MAX
50 100 150 200 250 300 350 400
0,5339 0,544 0,5453 0,5471 0,5458 0,5423 0,5431 0,353 0,5471
4
5 0,5589 0,5563 0,5554 0,5589 0,5615 0,5585 0,5528 0,551 0,5615

6 0,5764 0,5624 0,5646 0,569 0,5681 0,5664 0,5598 0,5629 0,5764


Размер фильтра

0,5646 0,5659 0,5664 0,5677 0,5725 0,5677 0,565 0,565 0,5725


7
8 0,5738 0,576 0,5729 0,5782 0,5786 0,5615 0,5699 0,5712 0,5786

9 0,5834 0,5686 0,5629 0,5545 0,5576 0,5703 0,5655 0,5655 0,5834


0,5677 0,5664 0,5642 0,5602 0,5624 0,5672 0,5734 0,5602 0,5734
10
11 0,5772 0,5707 0,5607 0,5427 0,5475 0,5488 0,5484 0,558 0,5772

12 0,5353 0,555 0,5449 0,5466 0,5418 0,537 0,5423 0,5493 0,555

Таблица 4.2 – Влияние количества фильтра в свертоном слое


Количество эпох
MAX
50 100 150 200 250 300 350 400
0,4674 0,4875 0,4858 0,4923 0,4862 0,4928 0,4897 0,4915 0,4928
Количество фильтров

8
16 0,4831 0,5101 0,498 0,4958 0,5011 0,4993 0,505 0,509 0,5101

32 0,4967 0,5068 0,5055 0,507 0,5077 0,511 0,5042 0,5064 0,511


0,4998 0,5142 0,5099 0,5068 0,5107 0,5187 0,5138 0,5164 0,5187
64
128 0,5138 0,5177 0,5182 0,5099 0,512 0,5155 0,5195 0,5199 0,5199

256 0,5106 0,5126 0,5164 0,5134 0,5142 0,5164 0,5155 0,5156 0,5164

Следующие исследования производились путем комбинирования в разной


последовательности слоев свертки и пулинга, а также были проведены испытания
с добавлением дополнительных полносвязанных слоев разной размерности.
Наилучшие результаты удалось получить экспериментальным по двум
конфигурациям (Таблица 4.3).
Данные конфигурации показали точность классификации порядка 62 %
(0,6245 для конфигурации 1 и 0,6201 для конфигурации 2). Дальнейшее
увеличение количества слоев или размерности приводило к тому, что сеть не
могла обучиться.
Дальнейшие испытания проводились только на данных конфигурациях.
49

Таблица 4.3 – Конфигурации сверточных нейронных сетей


N слоя Конфигурация 1 Конфигурация 2
1 Input layer: 1x20x20 Input layer: 1x20x20
2 Convolution: 64x9x9 Convolution: 128x4x4
3 Maxpool: 2x2 Convolution: 128x4x4
4 Convolution: 128x9x9 Maxpool: 2x2
5 Maxpool: 2x2 Convolution: 256x6x6
6 Convolution: 256x9x9 Convolution: 256x6x6
7 Maxpool: 2x2 Maxpool: 2x2
8 Fully connection 2048 Fully connection 2048
9 Fully connection 62 Fully connection 62
10 Softmax Softmax

Так как слой пулинга может находиться двумя способами: по среднему


(averagePool) по максимальному (maxPool), была поставлена задача проверить
разницу между использованием слоя maxPool и averagePool. После замены всех
слоев maxPool на averagePool точность классификации немного ухудшилась: для
конфигурации 1 точность составила 0,6201, а для конфигурации 2 – 0,6198,
поэтому в дальнейшем будем использовать слой подвыборки maxPool.
Следующей задачей в поиске оптимальной архитектуры стало исследование
слоев слоев ReLu и Dropout (Рисунок 4.3).

0,67
Точность классификации

0,62

0,57

0,52

0,47
50 100 150 200 250 300 350 400
Количество эпох
Стартовая конфигурация Конфигурация 1
Конфигурация 2 Конфигурация 1 с ReLu
Конфигурация 2 с ReLu Конфигурация 1 с Dropout

Рисунок 4.3 – Точность классификации при разных конфигурациях


50

ReLU(rectified linear unit) – это слой активации, имеющий следующую


формулу f(x)=max(0,x) и реализует пороговый переход в 0 [28]. После добавления
данного слоя после каждого слоя свертки удалось поднять точность
классификации до 65% (0,65 и 0,6566 для первой и второй конфигурации
соответственно) (Таблица 4.4).
Dropout – слой, который выполняет эффективный и простой метод
регуляризации. Алгоритм работы Dropout заключается в следующем: во время
обучения из сети выделяется подсеть, после чего обновление весов происходит
только в границах этой подсети. Нейроны, попадающие в подсеть выбираются
случайным образом с вероятностью p(коэффициент dropout) [28]. Добавление
данного слоя в совокупности с ReLU позволило добиться точности
классификации 67% (0,6715) для конфигурации 1 и 66% (0,6628) для
конфигурации 2 (Таблица 4.4).

Таблица 4.4. – Точность классификации при разных конфигурациях


50 100 150 200 250 300 350 400 MAX
Стартовая
0,4831 0,5101 0,498 0,4958 0,5011 0,4993 0,505 0,509 0,5101
конфиг.
Конфиг. 1 0,6058 0,5953 0,6245 0,6224 0,6198 0,6207 0,618 0,6198 0,6245
Конфиг. 2 0,6071 0,6116 0,6194 0,6201 0,6142 0,6116 0,612 0,6124 0,6201
Конфиг. 1 с ReLu 0,5786 0,6421 0,65 0,6474 0,6448 0,6439 0,6408 0,6426 0,65
Конфиг. 2 с ReLu 0,078 0,6093 0,6518 0,6557 0,6562 0,6553 0,6566 0,6557 0,6566
Конфиг. 1 с
0,078 0,1362 0,6154 0,6575 0,6702 0,6693 0,6702 0,6715 0,6715
Dropout
Конфиг. 2 с
0,4332 0,6461 0,6527 0,6597 0,6615 0,6628 0,6631 0,6615 0,6631
Dropout

Следующим шагом в работе стало исследование того, как влияет размер


входного изображения: 16х16, 20х20, 32х32 (Рисунок 4.4). Изменение размеров
изображения проводилось для двух случаев: с сохранением пропорций и без
сохранения. Также были протестированы разные размерности слоев свертки.
Стоит учесть, что первоначальные испытания производились на изображениях
размером 20x20 специально подготовленные на Kaggle.
51

0,74
Точность классификации
0,72
0,7
0,68
0,66
0,64
0,62
0,6
50 100 150 200 250 300 350 400
Количество эпох обучения

Конф. 1 с сох. пропорций Конф. 2 с сох. пропорций


Конф. 1 без сох. пропорций Конф. 2 без сох. пропорций

Рисунок 4.4 - Точность классификации при разных размерах входного


изображения

Наилучший результат удалось достичь при размере входного изображения


32х32 (Рисунок 4.4) при сохранении пропорций при масштабировании и
размерами фильтров для слоев свертки 7х7 для конфигурации 1 и 9х9 для
конфигурации 2. Точность классификации таким образом составила 71% (0,712)
для конфигурации 1 и 69% (0,6985) для конфигурации 2 (Таблица 3).
Масштабирование без сохранения пропорций только ухудшило качество
классификации и составило 66% и 65% для конфигурации 1 и 2 соответственно.
Проверить размер входного изображения 64х64 и выше не получилось из-за
технических ограничений компьютеров, на которых проводились испытания. С
увеличением размера входного слоя компьютеру не хватало видеопамяти для
размещения весов.
При анализе данных полученных при обучении заметно, что сеть
переобучается. Вероятно, это связанно с малым количеством данных. Поэтому
следующим этапом стало исследование по увеличению размера обучающей
выборки.
Для увеличения обучающей выборки в исходные изображения вносились
52

следующие изменения (параметры определись экспериментальным путем)


(Рисунок 4.5):
 Поворот изображения на случайный угол в диапазоне от -20 до 20
градусов;
 Сдвиг изображения влево-вправо, вверх-вниз на случайный шаг (на 3
пикселя для размера входного изображения 20х20 и на 5 пикселей, для размера
изображения 32х32);
 Инверсия цветов изображения;
 Наложение фильтра, для выделения границ изображения.

Рисунок 4.5 – Пример преобразования изображений

Для добавления изменённых данных были реализованы следующие


функции(Приложение A):
 ChangeImage (image, angle, step1, step2, flag_invert, flag_filter) –
функция возвращающая изменённое изображение путем поворота на
произвольный угол из промежутка angle, произвольный сдвиг по вертикали step1
и горизонтали step2, а также инвертирования цветов и наложения фильтров при
активности соответствующих флагов flag_invert, flag_filter;
 AddChangeImage(arr_image1, arr_image2, angle, step1, step2, flag_invert,
flag_filter) – функция, возвращающая массив, полученный из добавления в массив
arr_image1 измененного массива arr_image2 с помощью функции ChangeImage.
Для уменьшения времени на проведения экспериментов была уменьшена
структура сети: были убраны слои Dropout, уменьшена размерность слоев свертки
и размерность входного слоя (Таблица 4.5).
53

Таблица 4.5 – Описание конфигураций для экспериментов с увеличением


размеров обучающей выборки
N слоя Конфигурация 1 Конфигурация 2
1 Input layer: 1x20x20 Input layer: 1x20x20
2 Convolution: 32x3x3 Convolution: 32x4x4
3 ReLU ReLU
4 Maxpool: 2x2 Convolution: 32x4x4
5 Convolution: 64x3x3 ReLU
6 ReLU Maxpool: 2x2
7 Maxpool: 2x2 Convolution: 64x6x6
8 Convolution: 128x3x3 ReLU
9 ReLU Convolution: 64x6x6
10 Maxpool: 2x2 ReLU
11 Fully connection 62 Maxpool: 2x2
12 Softmax Fully connection 62
13 Softmax
Точность
классификации 0,6354 0,6397
(исходная)

Наилучший результат был получен при добавлении 12000 изображений с


указанными выше изменениями (Рисунок 4.6). Точность классификации
составила порядка 72% (0,7227) для конфигурации 1 и 69% (0,6916) для
конфигурации 2.

0,73 0,7227
Точность классификации

0,72
0,71 0,7162
0,7
0,69
0,68
0,67
0,66
0,65
0,64
0,63
0 2000 4000 6000 8000 10000 12000
Количество добавляемых изображений

Конф. 1 Конф. 2

Рисунок 4.6. – Влияние размера обучающей выборки на точность


классификации.
54

Также на точность классификации сети влияют гиперпараметры обучения


[33]. Для обучения нейронной сети в данной работе использовался алгоритм
стохастического градиентного спуска (SGD), который является наиболее
распространённым для начала изучения нейронных сетей. Параметры обучения
составляли следующие:
 Количество эпох обучения 350, дальнейшее увеличение количества
эпох не приводило к улучшению результата. Это моем мы наблюдать по всем
предыдущим экспериментам;
 Размер минипартий(miniBacnchsize), т.е. количества итераций, после
которых происходило обновление весов составило 128. Слишком большой размер
минипартий ускоряет обучение, но снижает точность классификации, слишком
маленький наоборот – сильно увеличивал время обучения, но и улучшал
сходимость.
 Скорость обучения: 1-150 эпох 0.01, 151-250 эпох - 0,001, 251-350
эпох – 0.0001. Данная настройка позволила очень точно настроить сеть, при этом
сократив время обучения, т.к. высокая скорость обучения уменьшает время
обучения сети, но ухудшает точность классификации, а низкая наоборот.

0,82
Точность распознавания

0,81
0,8121 0,8138 0,8135
0,8 0,8081
0,79
0,78 0,7885 0,7911
0,7832
0,77
0,76
0,75
50 100 150 200 250 300 350 400
Количество эпох
Конф. 1 Конф. 2

Рисунок 4.7 – Точность классификации на итоговых конфигурация


нейронной сети.
55

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


гиперпараметров обучения получилось добиться следующей точности
распознавания: конфигурация 1 - 0,8138, конфигурация 2 – 0,7911 (Рисунок 4.7).

4.4. Анализ результатов.

В результате данной работы получилось разработать сверточную


нейронную сеть для задачи распознавания символов на изображении с точностью
классификации порядка 81 %. Данный результат позволил занять 16 место из 56
участников на соревновании «First Steps With Julia» (kaggle.com).
Проанализировав решения участников, занявших 3 и 4 место в данном
соревновании с точностью классификации 0,8767 и 0,8745 соответственно,
получилось сделать следующие идеи, для увеличения точности классификации:
1. Использование размеров входного изображения 64x64;
2. Производить точечное увеличение обучающей выборки, т.е.
проанализировать результаты классификации и посмотреть, с какими объектами у
нейронной сети возникают сложности, и производить увеличение обучающей
выборки зачёт изменения этих объектов;
3. При увеличении обучающей выборки путем изменения исходных
объектов дополнительно использовать фильтры понижения четкости,
зашумления, а также масштабировать объект, сохраняя размер изображения;
4. Разделить процесс классификации на несколько этапов, т.е. на первом
этапе произвести бинарную классификацию на буквы и цифры, на втором этапе
уже в зависимости от результатов первого этапа использовать индивидуальную
сеть для классификации цифр и классификации букв.
56

ЗАКЛЮЧЕНИЕ
В результате теоретических и экспериментальных исследований были
получены следующие научные и практические результаты:
1. В работе были изучены теоретических аспекты задачи классификации
и современных методов ее решения, исследованы возможности сверточной
нейронной сети в задачи распознавания. Проведен анализ и возможности методов
машинного обучения в решении данной задачи
2. Разработана нейронная сеть для задачи классификации символов на
естественных изображений с точностью классификации порядка 81%, что
позволило занять 16 место в соревновании по классификации символов «First
Steps With Julia». Для выполнения работы использовались зарекомендовавший в
решении задачи классификации изображений алгоритм сверточных нейронных
сетей. Экспериментальные исследования проводились в среде Matlab.
3. Были изучены и опробованы методы, улучшающие качество обучение
сети и точность классификации в задачи распознавания символов. В работе
показано, как влияет выбор архитектуры, оптимальных параметров обучения и
размер обучающей выборки на точность классификации.
4. Проведен анализ аналогичных решений по задачи классификации
символов на естественных изображений участников соревнования на Kaggle «First
Steps With Julia», по которым получилось составить рекомендации по улучшению
качества обучения нейронной сети.
По ходу выполнения работы были получены навыки работы с методами
машинного обучения в прикладном программном обеспечении Matlab.
В перспективе данной работы исследовать полученные в четвертой главе
рекомендации по улучшению качества обучения нейросетевого алгоритма для
задачи классификации символов на изображении.
57

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


1. Michie D., Spiegelhalter D.J, Taylor C.C. Machine Learning, Neural and Statistical
Classification. University of Strathclyde, MRC Biostatistics Unit, Cambridge and
University of Leeds, 1994. 266 p;
2. Вьюгин В.В. Математические основы машинного обучения и прогнозирования.
Москва, 2013, 391 с;
3. Ciresan D. Multi-column deep neural networks for image classification / D. Ciresan,
U. Meier, J. Schmidhuber // Computer Vision and Pattern Recognition (CVPR). —
2012. — Pp. 3642–3649;
4. Воронцов К. В. Курс лекций по машинному обучению [Электронный ресурс].
URL: http://www.machinelearning.ru/wiki/index.php?title=Машинное
_обучение_(курс_лекций%2С_К.В.В.Воронцов) (Дата обращения: 19.09.2016);
5. Флах П. Машинное обучение. Наука и искусство построения алгоритмов,
которые извлекают знания из данных: Учеб. пособие. – 2-е изд., перераб. и
доп. – М.: ДМК Издательство, 2015. – 400 с;
6. Bengio Y. Representation learning: A review and new perspectives / Y. Bengio, A.
Courville, P. Vincent // Pattern Analysis and Machine Intelligence. — 2013. — no.
35(8). — Pp. 1798–1828;
7. Хуршудов А.А. Спонтанное выделение иерархии двумерных признаков / А.А.
Хуршудов, В.Н. Марков // Научно-технические ведомости СпбГУ.
Информатика. Телекоммуникации. Управление. — 2014. — № 6(210). — С.
58–69;
8. LeCun X. Z. Y. Comparison of learning algorithms for handwritten digit recognition
/ Y. LeCun // International conference on artificial neural networks. — 1995. — no.
60. — Pp. 111–115;
9. LeCun X. Z. Y. Text understanding from scratch / Xiang Zhang Yann LeCun //
Computer Science Department. — 2016;
10. Lindeberg, T. Scale invariant feature transform [Электронный ресурс] / T.
Lindeberg // Scholarpedia. — 2012. — http://www.scholarpedia.org/article/Scale
58

_Invariant _Feature _Transform (Дата обращения: 01.10.2016);


11. Блинов С.Ю., Методы и системы защиты информации, информационная
безопасность. Санк-Петербург. 2013. 97 с.;
12. Рысьмятова А.А., использование сверточных нейронных сетей. Москва, 2016.
34 стр.;
13. Хуршудов А.А., Построение констелляционной модели представления
визуальных образов / А.А. Хуршудов, В.Н. Марков // Prospero. XI
межнудародная научно-практическая конференция "Научное обозрение
физико-математических и технических наук в XXI веке". — 2014. — № 6. —
С. 35–40.;
14. Осовский С., Нейронные сети для обработки информации / Пер. с польского
И.Д. Рудинского. – М.: Финансы и статистика, 2004. – 344 с.
15. Hubel D. H. Brain and visual perception / D. H. Hubel, T. N. Wiesel. — ISBN13,
2005. — 36-46 pp.;
16. LeСun Y., Bottou L., Bengio Y., Haffne P., Gradient-Based Learning Applied to
Document Recognition // Proc. IEEE. – 1998. – P.59-67;
17. Aleksander I., Morton H., An Introduction to Neural Computing. — London:
Chapman&Hall, 1990;
18. Kohonen T., Self-organization and associative memory / T. Kohonen // Springer-
Verlag Berlin Heidelberg New York. — 1988. — no. 8(1). — Pp. 13–27;
19. Ле Мань Х., Сверточная нейронная сеть для решения задачи классификации.
Московско физико-технический институт. ТРУДЫ МФТИ.2016 г. Том 8, №3,
91-97;
20. Liu J., Seeing Jesus in toast: Neural and behavioral correlates of face pareidolia / J.
Liu // Cortex. — 2014. — no. 53. — Pp. 60–77;
21. Deng L., Recent advances in deep learning for speech research at Microsoft / L.
Deng // Acoustics, Speech and Signal Processing (ICASSP). — 2013. — Pp. 8604–
8608;
22. Хуршудов А.А., Обучение многослойного разреженного автоэнкодера на
59

изображениях большого масштаба / А.А. Хуршудов // Вестник компьютерных


и информационных технологий. — 2014. — № 2(116). — С. 27–31;
23. Хуршудов А.А., Проблема инверсии в компьютерном зрении / А.А. Хуршудов,
В.Н. Марков // Евразийский Союз Ученых (ЕСУ). VIII международная научно-
практическая конференция "Современные концепции научных исследований".
— 2014. — № 8. — С. 58–63;
24. Hinton G.E., Dropout: A simple way to prevent neural networks from overfitting /
G.E. Hinton, N. Srivastava // The Journal of Machine Learning Research. — 2014.
— no. 15.1. — Pp. 1929–1958;
25. Hinton G.E., Transforming auto-encoders / G.E. Hinton, A. Krizhevsky, S. D. Wang
// Artificial Neural Networks and Machine Learning–ICANN 2011. — 2014. — Pp.
44–51;
26. Droniou A., Gated autoencoders with tied input weights / A. Droniou, O. Sigaud //
International Conference on Machine Learning. — 2013. — Pp. 17–24;
27. Zhang X., Character-level convolutional networks for text classification / Xiang
Zhang, Junbo Zhao, Yann LeCun // In Advances in Neural Information Processing
Systems. — 2015. — Feb. — 649 - 657 p;
28. Krizhevsky A. Imagenet classification with deep convolutional neural networks / A.
Krizhevsky, I. Sutskever, G.E. Hinton // Advances in neural information processing
systems. — 2012. — Pp. 1097–1105;
29. Zhang X. Character-level convolutional networks for text classification / Xiang
Zhang, Junbo Zhao, Yann LeCun // In Advances in Neural Information Processing
Systems. — 2015. — Feb. — 649 - 657 p;
30. MathWorks. Convolutional Neural Networks [Электронный ресурс].
URL:https://www.mathworks.com/help/nnet/convolutional-neural-networks.html
(дата обращения 15.11.2016);
31. MathWorks. Image Processing Toolbox. [Электронный ресурс]. URL:
https://www.mathworks.com/help/images/ (дата обращения 09.11.2016);
32. First Steps With Julia [Электронный ресурс]. URL:
60

https://www.kaggle.com/c/street-view-getting-started-with-julia (дата обращения


8.10.2016);
33. Ключевые рекомендации по глубокому обучению [Электронный ресуср].
URL: http://datareview.info/article/eto-nuzhno-znat-klyuchevyie-rekomendatsii-po-
glubokomu-obucheniyu-chast-1/ (дата обращения 22.03.2017).
61

ПРИЛОЖЕНИЯ А. Функции для загрузки данных

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


массив изображений в градиенте серого
%Pathfolder - путь до загружаемых файлов
%Size - размер, в котором загружать изображения
%startIndex, finishIndex - индекс первого и последнего изображения соответственно
function [ arr_image] = Load2ConvertSize( pathFolder, Size, startIndex, finishIndex )

arr_image = [];

for i = startIndex:finishIndex;

pathFile = [pfthFolder '\' num2str(i) '.Bmp'];


disp(pathFile);
outFile = ['test' '\' num2str(i) '.Bmp'];
[X map] = imread(pathFile);
info = imfinfo(pathFile);

if ~isempty(map)
X = ind2rgb(X,map);
end
X = im2double(X);
disp(info.ColorType);

if info.ColorType == 'truecolor'
X = rgb2gray(X);
end

X = imresize(X,[Size Size],'nearest');
arr_image = [arr_image [X]];

end

count = length(arr_image)/Size;
arr_image = reshape(arr_image, Size,Size,1, count);

end

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


массив изображений в градиенте серого
%Pathfolder - путь до загружаемых файлов
%Size - размер, в котором загружать изображения
%startIndex, finishIndex - индекс первого и последнего изображения соответственно
function [ arr_image ] = Load2ConvertSize2( pathFolder, Size, startIndex, finishIndex )
arr_image = [];

for i = startIndex:finishIndex;

pathFile = [pathFolder '\' num2str(i) '.Bmp'];


disp(pathFile);
62

[X map] = imread(pathFile);
info = imfinfo(pathFile);

h = info.Height;
w = info.Width;

maxsize = max([h w]); %находим максимальную размерность

dw = maxsize - w; % расчитываем, сколько надо добавить по ширине


ldw = fix(dw/2);
rdw = dw - ldw;

dh = maxsize - h; %расчитываем, сколько добавить по высоте


ldh = fix(dh/2);
rdh = dh - ldh;

if ~isempty(map)
X = ind2rgb(X,map);
end

X = im2double(X);

disp(info.ColorType);

if info.ColorType == 'truecolor'
X = rgb2gray(X);
end

color = mean([X(1,:) X(h,:) X(:,1)' X(:,w)']);

left = zeros(maxsize,ldw);
left(:) = color;
right = zeros(maxsize,rdw);
right(:) = color;
up = zeros(ldh,maxsize);
up(:) = color;
down = zeros(rdh,maxsize);
down(:) = color;

X = [left X right];
X = [up; X; down];

X = imresize(X,[Size Size],'nearest');
arr_image = [arr_image [X]];

end

count = length(arr_image)/Size;
arr_image = reshape(arr_image, Size,Size,1, count);

end
63

ПРИЛОЖЕНИЕ Б. Скрипт тестирования конфигураций

rng('default'); %сбрасываем датчик случайных чисел

x_train = image16_1(:,:,:,1:4000); %размечаем данные для обучения


x_test = image16_1(:,:,:,4001:6283); %размечаем данные для тестирования

y_train = target(1:4000); %размечаем ответы для обучения


y_test = target(4001:6283); %размечаем ответы для тестирования

diary on
diary('D:\Studies\MastersWork\Garbage\NewWork\res\1_16.txt'); %путь сохранения результатов

disp('Данные без сохранения пропорций. Размер 16x16. Конфигурация 1.')

rng('default');

%описываем архитектуру нейронной сети


layers = [imageInputLayer( [16 16 1]); %входной слой
convolution2dLayer(3, 32); %сверточный слой
reluLayer(); %слой ReLU
maxPooling2dLayer(2); %слой пулинга
dropoutLayer(0.5); %слой регуляризации Dropout
convolution2dLayer(3, 64);
reluLayer();
maxPooling2dLayer(2);
dropoutLayer(0.5);
convolution2dLayer(3, 128);
reluLayer();
maxPooling2dLayer(2);
dropoutLayer(0.5);
fullyConnectedLayer(62); %полносвязанный слой
softmaxLayer(); %слой поиска выходного нейрона с максимальным весом
classificationLayer(); %слой ответа
];

epoche = 50

%параметры для обучения


options = trainingOptions('sgdm', ...
'MiniBatchSize', 128, ... %размер минипартии
'MaxEpochs', 50 ...
);

rng('default');
r = [];
arr_accuracy = [];
arr_accuracy_train = [];

r = [r rand];
64

epoche_max = 500; %количество эпох обучения

tic
net = trainNetwork(x_train,y_train,layers,options); %обучение нейроной сети
time = toc
all_time=time;

%тетирования нейроной сети на тестовой выборке


YTest = classify(net, x_test);
accuracy = sum(YTest == y_test)/numel(y_test)
arr_accuracy = [arr_accuracy accuracy];

%тетирования нейроной сети на обучающей выборке


YTrain = classify(net, x_train);
accuracy_train = sum(YTrain == y_train)/numel(y_train)
arr_accuracy_train = [arr_accuracy_train accuracy_train];

h_epoche = 50;

epoche = epoche + h_epoche;

iter = (epoche_max - epoche)/h_epoche;


for i=0:iter
rng('default');
r = [r rand];
epoche
tic;
net = trainNetwork(x_train,y_train,net.Layers,options);
time = toc
all_time = all_time + time;

YTest = classify(net, x_test);


accuracy = sum(YTest == y_test)/numel(y_test)
arr_accuracy = [arr_accuracy accuracy];

YTrain = classify(net, x_train);


accuracy_train = sum(YTrain == y_train)/numel(y_train)
arr_accuracy_train = [arr_accuracy_train accuracy_train];

epoche = epoche + h_epoche;


end

%вывод результатов
arr_accuracy
arr_accuracy_train
all_time
net.Layers
r
options

diary off;
65

ПРИЛОЖЕНИЕ В. Функции для изменения обучающей


выборки

%Функция изменяющая изображение путем поворота, сдвига, инферсии цветов и наложении


фильтра
%image - исходный массив изображений
%angle - массив угла поворота, например [-5 5]
%step1 - массив сдвига по вертикале, например [-3 3]
%step2 - массив сдвига по горизонтали
%flag_invert - флаг, показывающий инвертировать цвета изображения или нет
%flag_filter - флаг, показывающий, накладывать ли нафильтр на изображение или нет
function [ out_image ] = ChangeImage ( image, angle, step1, step2, flag_invert, flag_filter )

angle = randi([arr_angle(1),arr_angle(2)],1,1,'int8'); %выбор угла поворота


step1 = randi([step1(1),step1(2)],1,1,'int8'); %выбор шага сдвига по горизонтали
step2 = randi([step2(1),step2(2)],1,1,'int8'); %выбор шаг сдвига оп вертикали
invert = randi([0,1],1,1,'int8'); %инвертировать или нет
filter = randi([0,1],1,1,'int8'); %накладывать фильтр или нет

size_image = length(in_image);

color = mean([in_image(1,:) in_image(size_image,:) in_image(:,1)' in_image(:,size_image)']);

%поворот изображения
out_image = imrotate(in_image,angle,'bicubic','crop');

%сдвиг изображения
if (step1<0) %влево
k = out_image;
dop = zeros(-step1,size_image);
dop(:) = color;
k = [k dop'];
out_image = k(:,-step1+1:size_image+(-step1));
end

if (step1>0) %вправо
k = out_image;
dop = zeros(step1,size_image);
dop(:) = color;
k = [dop' k];
out_image = k(:,1:size_image);
end

if (step2<0) %вниз
k = out_image;
dop = zeros(-step2,size_image);
dop(:) = color;
k = [dop; k];
out_image = k(1:size_image,:);
end
66

if (step2>0) %вверх
k = out_image;
dop = zeros(step2,size_image);
dop(:) = color;
k = [k; dop];
out_image = k(step2+1:size_image+step2,:);
end

%инвертирование цветов
if (flag_invert == 1 && invert==1)
out_image = 1-out_image;
end

%наложение фильтра
if (flag_filter == 1 && filter==1)
h=fspecial('log', 3, .5);
out_image = imfilter(out_image,h,'replicate');
end

out_image(out_image<0) = color;
end

%Функция добавляющая в исходный массив изображения с изменениями с помощью поворота,


сдвига, инферсии цветов и наложении фильтра
%arr_image1 - массив изображений, к которому добавляются
%arr_image1 - массив изображений, который добавляется
%angle - массив угла поворота, например [-5 5]
%step1 - массив сдвига по вертикале, например [-3 3]
%step2 - массив сдвига по горизонтали
%flag_invert - флаг, показывающий инвертировать цвета изображения или нет
%flag_filter - флаг, показывающий, накладывать ли нафильтр на изображение или нет
function [ out ] = AddChangeImage( arr_image1, arr_image2, angle, step1, step2, flag_invert,
flag_filter)

size_in = length(arr_image1(1,1,1,:));;
size_change = length(arr_image2(1,1,1,:));
size_image = length(arr_image1(1,:,1,1));

out = reshape(arr_image1, size_image,size_image*size_in);

for i=1:size_change
out = [out ChangeImage(arr_image2(:,:,:,i), angle, step1, step2, flag_invert, flag_filter)];
end

out = reshape(out, size_image,size_image, 1, size_in+size_change);

end