УДК 004.4
АНАЛИЗ РЕЗУЛЬТАТОВ ЭКСПЕРИМЕНТАЛЬНЫХ ИССЛЕДОВАНИЙ С ИСПОЛЬЗОВАНИЕМ КОНСТРУКТОРА НЕЙРОННЫХ СЕТЕЙ
© 2017 Е.А. Ганцева, В.Ф. Барабанов, Н.И. Гребенникова, Д.^ Болдырев
В работе «Программная реализация конструктора нейронных сетей» описан разработанный современный программный продукт конструирования нейронных сетей, который прост в освоении, имеет наглядный и понятный интерфейс, является свободно распространяемым, с открытым исходным кодом. Созданное программное приложение позволяет пользователю освоить технологии построения нейронных сетей и решать широкий спектр практических задач, к которым, в частности, можно отнести задачи регрессии и классификации образов. В данной статье приводятся результаты экспериментальных исследований с использованием созданного программного приложения конструирования нейронных сетей, а также рекомендации по выбору параметров конструирования сети для повышения качества и скорости обучения нейронных сетей. В связи с тем, что обучение нейронных сетей является весьма долгим процессом и требует большого количества тестовых данных, был создан тестовый набор данных для модуля функции синуса объёмом 30000 отсчётов, и на этом примере продемонстрировано влияние различных настраиваемых параметров конструирования сети на скорость её обучения. Проведённые исследования позволили выработать рекомендации по выбору архитектуры и настройке значений параметров конструирования нейросети, которыми следует воспользоваться при работе с программным приложением «Конструктор нейронных сетей»
Ключевые слова: линейный нейрон, персептрон, многослойная сеть, обучение, тестирование
Назначение и условия применения программы
Разработанное программное приложение «Конструктор нейронных сетей» предназначено для конструирования, решения практических задач и исследования различных типов многослойных нейронных сетей. В процессе разработки была построена библиотека классов Neuron.dll, основные классы которой содержат методы и свойства, обеспечивающие параллельное выполнение задач для увеличения скорости работы реализованных алгоритмов, что требует применения платформы .NET Framework, начиная с версии 4.5 [7].
Структура программного обеспечения «Конструктор нейронных сетей» представлена двумя модулями: исполняемым файлом «Кон-структорНейросетей.ехе» и библиотекой классов «Neuron.dll».
Ядром программы является библиотека классов «Neuron.dll», содержащая набор классов, необходимых для создания нейронных сетей, которые, в свою очередь, содержат необходимые для этого методы и свойства.
Настройка параметров конструирования и создание новой сети
В главном окне программного приложения (рис. 1), помимо строки меню, расположена рабочая область для указания параметров настройки создаваемой сети.
Ганцева Екатерина Александровна - ВГТУ, канд. техн. наук, доцент, e-mail: [email protected] Барабанов Владимир Федорович - ВГТУ, д-р техн. наук, профессор, e-mail: [email protected]
Гребенникова Наталия Ивановна - ВГТУ, канд. техн.
наук, доцент, e-mail: [email protected]
Болдырев Денис Сергеевич - ВГТУ, магистр, e-mail:
Рис. 1. Главная форма «Конструктор нейронных сетей»
В процессе создания новой сети можно выделить следующие основные этапы:
1) выбор типа сети;
2) выбор типа решаемой задачи;
3) определение числа входов и слоёв для многослойной сети (для линейного и нелинейного нейрона задается только число входов);
4) ввод параметров каждого слоя для многослойной сети (для одного нейрона данный шаг необходимо пропустить);
5) ввод скорости обучения, размера обучающего множества и точности обучения.
После ввода всех необходимых данных выполняется решение задачи выбранного типа с отображением промежуточных и итоговых результатов в новой форме.
Создание одного нейрона
Базовым элементом сети является линейный (нелинейный) нейрон, обладающий множеством входов и одним выходом и используемый в решении задач регрессии и классификации [1, 2, 3].
При построении нейронной сети в «Конструкторе» для создания линейного нейрона в рабочей области главной формы из раскрывающегося списка «Тип нейронной сети» необходимо выбрать значение «Линейный нейрон». Далее задаются число входов нейрона, скорость обучения - значение из интервала (0;1). Действия пользователя контролируются, например, если пользователь неверно указал значение параметра, появляется предупреждающее сообщение об ошибке. Задаваемое число эпох определяет размер обучающего множества. Точность обучения используется в критерии останова обучения, её значение меньше единицы и в идеале должно стремиться к нулю. Однако следует обоснованно задавать значение данного параметра, так как при указании высокой точности процесс обучения может занять довольно длительный период времени.
Для нелинейного нейрона (персептрона) можно выбрать функцию активации и настроить её параметры. Для этого следует воспользоваться раскрывающимся списком «Функция активации» полями ввода соответствующих функции параметров.
После того, как все параметры будут заданы, следует приступить к созданию сети (кнопка «Создать» или пункт меню Файл -> Создать). После создания сети на экране отображается новая форма визуализации процесса обучения. Для обучения сети следует подготовить входные данные, загружаемые из заранее заполненного файла, или же введённые пользователем вручную в таблицы «Входные данные» и «Эталон».
Загрузка данных из файла происходит при выполнении команды главного меню Действия -> Загрузить обучающий набор. Для загрузки эталонов необходимо выполнить Действия -> Загрузить набор эталонов. После загруз-
ки/ввода данных следует запустить процесс обучения (кнопка «Обучить»). Отслеживать процесс обучения пользователь может по графикам. На первом графике «Выход нейрона» пользователю демонстрируются реальный и желаемый выходы. На втором графике «Оценка обучения сети» приводятся значения целевого функционала, на который накладывается условие минимизации при обучении сети. На третьем графике «Ошибка» показана разница между текущим выходом и эталоном на текущей итерации. Внизу формы показывается счётчик времени обучения. Обучение заканчивается при достижении заданной точности.
Пользователь может вмешиваться в процесс обучения, принудительно остановив его, нажав на кнопку «Остановить». Результаты обучения можно сохранить в файле, выполнив команду Файл -> Сохранить.
После завершения обучения можно протестировать полученные результаты на тестовых наборах исходных данных, задав необходимое значение в поле «Число тестовых наборов» и выполнив тестирование (кнопка «Тестировать»). Результаты проведённого тестирования отображаются на экране в виде графиков.
Кроме того, для нелинейного нейрона предусмотрен ряд дополнительных возможностей, таких как масштабирование входных и выходных данных (флажок в пункте «Масштабирование данных»). В дальнейшем этот процесс полностью скрыт от пользователя, что помогает избежать ошибок.
Создание многослойной сети
С помощью приложения «Конструктор нейронных сетей» можно создавать многослойные сети для решения двух типов задач: регрессии и классификации образов.
При создании сети для решения задач классификации образов необходимо указать тип сети «Многослойный персептрон» и тип задачи «Классификация образов». Для решения задач регрессии - тип задачи «Прогнозирование». Дальнейшая настройка параметров сети происходит одинаковым образом.
После указания типа нейронной сети и типа решаемой задачи следует задать число слоев и число входов, выполнить действия, нажав кнопку «Задать».
Далее задаются параметры для каждого слоя сети при выборе необходимого слоя из раскрывающегося списка. Имеется возможность задавать число нейронов, диапазон изменения начальных значений весовых коэффициентов, а также тип активационной функции.
Для некоторых активационных функций можно задавать коэффициенты, значения которых по умолчанию равны единице. Если какие-либо заданные значения некорректны, пользователь получит соответствующее сообщение об ошибке.
После задания параметров каждого слоя необходимо инициировать действие нажатием на кнопку «Применить».
Затем следует указать скорость обучения, число обучающих наборов, точность обучения, инициировать создание сети (кнопка «Создать»). В зависимости от типа решаемой задачи открывается специфичная новая форма, хотя обе формы схожи по внешнему виду.
Настройки сконструированной сети можно сохранить в файл или загрузить из сохраненного ранее файла, выполнив соответствующую команду меню «Файл». При открытии формы создается новая таблица для входных данных. Число столбцов таблицы равно число входов, а число строк равно числу обучающих наборов данных. Для таблицы эталонов число столбцов равно числу нейронов в выходном слое. Пользователь может записать входные данные в таблицу вручную, а также загрузить наборы данных из файла.
Процесс обучения начинается (после нажатия на кнопку «Обучить») и длится до тех пор, пока не будет достигнута заданная точность, или пока пользователь не примет решение прервать процесс, воспользовавшись кнопкой «Остановить». После завершения процесса обучения можно протестировать результат работы сети. Для этого необходимо загрузить обучающий набор входов и эталонов. В строке «Число тестовых наборов» необходимо указать число итераций и нажать на кнопку «Создать». Тестирование начинается после выполнения действия «Тестировать». Если результаты тестирования удовлетворительны, то пользователь может сохранить их в файл, команда Файл -> Сохранить.
Общие рекомендации по настройке параметров конструктора нейронных сетей
Обучение нейронных сетей является ресурсоёмким процессом, поэтому необходимо очень тщательно подходить к выбору архитектуры сети и настройки её параметров [8]. Кроме того, огромную роль играет аппаратное обеспечение компьютера, на котором выполняется приложение «Конструктор нейронных сетей». К примеру, на многоядерных процессорах обучение будет выполняться гораздо быстрее.
При настройке значений параметров сети первым делом необходимо правильно задать количество слоев и количество нейронов в них. Многослойная сеть является мощным вычислительным механизмом, поэтому для большинства задач требуется порядка десяти нейронов в каждом слое. Если создавать более 3 слоев сети, то это приведёт к существенному замедлению обучения. Для подобных сетей существуют более продвинутые методы глубинного обучения. Значение параметра скорости обучения берётся из интервала [0;1]. При высоких значениях параметра, например, 0.9, скорость обучения будет достаточно высокой, однако возрастает риск попасть в локальный минимум, и на данном этапе может произойти так называемый «паралич» сети, когда желаемая точность станет недостижимой. При слишком малых значениях скорости обучение будет существенно замедляться, поэтому рекомендуется начинать с высоких значений этого параметра и постепенно снижать его, если это будет действительно оправданно.
Более подробно следует описать выбор параметра - количества нейронов в слоях сети. Как было отмечено ранее, их число не должно быть слишком большим, так как это замедляет процесс обучения [4, 6]. Кроме того, может возникнуть «переобучение» сети, в результате которого происходит некорректная интерпретация выходного сигнала. Данная ситуация возможна в случае, если сеть будет обладать чрезмерно большими вычислительными ресурсами.
Так как для обучения сети необходимо последовательно подавать на вход обучающие данные и сравнивать реальный выход сети с его желаемым аналогом, необходимо соблюдать некоторые правила формирования обучающих данных. Во-первых, для лучшего обучения сети объём данных должен быть большим. Естественно, чем больше таких данных, тем лучших результатов можно добиться в процессе обучения. Во-вторых, следует учитывать, что значения выхода активационной функции, как правило, расположены на отрезке [0;1] или [-1;1], поэтому необходимо подготовить корректные входные и выходные данные. Разработанное приложение выполняет масштабирование входных и выходных данных на основе Softmax-шкалирования.
Результаты экспериментальных исследований
Обучение нейронных сетей является трудоёмким процессом и требует большого коли-
чества исходных данных. Причём для решения конкретной задачи требуются специфичные данные, что может кардинально влиять на выбор архитектуры сети и её параметров [9].
Для проведения вычислительного эксперимента был создан тестовый набор данных модуля функции синуса в количестве 30000 отсчетов, на котором исследовалось влияние
различных параметров настройки сети на скорость её обучения. Исследования проводились на сетях с тремя слоями, пятью входами и одним выходом. Значения весовых коэффициентов брались из отрезка [0.3; 0.5]. Значение параметра активационной функции полагалось равным 1. Результаты тестирования приведены в таблице.
№ п/ п Тип активационной функции Число нейронов в слое Скорость обучения Время обучения Среднеквадрати-ческая ошибка Текущая ошибка
1 Сигмоидальная - сигмо-идальная - сигмоидальная 5 - 5 -1 0.9 6 мин. 51 сек. 0.017 0.069
2 Гиперболический тангенс - гиперболический тангенс - сигмоидальная 5 - 5 -1 0.9 7 мин. 59 сек. 0.064 0.031
3 Сигмоидальная - сигмо-идальная - сигмоидальная 5 - 5 -1 0.1 7 мин. 37 сек. 0.062 0.256
4 Гиперболический тангенс - гиперболический тангенс - сигмоидальная 5 - 5 -1 0.1 6 мин. 57 сек. 0.117 0.184
5 Сигмоидальная - сигмо-идальная - сигмоидальная 50 - 50 -1 0.9 12 мин. 2 сек. 0.231 0.363
6 Гиперболический тангенс - гиперболический тангенс - сигмоидальная 50 - 50 -1 0.9 11 мин. 44 сек. 0.344 0.363
7 Сигмоидальная - сигмо-идальная - сигмоидальная 50 - 50 -1 0.1 11 мин. 43 сек. 0.457 0.363
8 Гиперболический тангенс - гиперболический тангенс - сигмоидальная 50 - 50 -1 0.1 16 мин. 19 сек. 0.571 0.363
На рис. 2 показан результат обучения первой нейронной сети, имеющей по 5 нейронов в скрытых слоя и сигмоидальную функцию активации. Во всех эспериментах скорость обучения полагалась равной 0.9. Этот параметр является безразмерным и влияет на величину шага корректировки значений весовых коэффициентов [1].
Выход нейронной сети
1, |
> (• : шi >1 • !* 'I ' ■ ■ ■ 1 1 * ■ ■ ■
• Ъ 1 1 • 1 ■ • 1 1 • »
~ Г :»:1 * • ■ ■ ! I 1 *.
I у * ял ■ ■ ■ ? ; «а • И ч
29799 29839 29879 29919 29959 29999
Номер итерации • Эталон • Текущее значение
Рис. 2. Результат обучения нейронной сети № 1
Из рис. 2 видно, что значения выходов сети близко расположены к эталонным значениям. Для получения более точных значений потребуется либо изменить число нейронов и скорость обучения, либо повторить обучение на текущих примерах до получения значений выходов сети с заданной точностью.
На рис. 3 приведен результат обучения второй нейронной сети. В данном случае акти-вационная функция для скрытых слоев изменена на гиперболический тангенс.
Выход нейронной сети
0.8 э 06
г
т 0.4-
ш ; V 1 » * I.
• ■■ • ■ ■ ■ • ■ •• ■ • « ■ ■ ■ • • • •
■ « ^ « ■ ■ • | • ■ 1 1
• ■ • ■ .». » ■ ■ • • • _ 1 ■ 11
Г II < • > £ : » • ■ ■ 1 ( 1 • г е т •
02 О
29799 29839 29879 29919 29959 29999 Номер итерации
• Эталон * Текущее значение
Рис. 3. Результат обучения нейронной сети № 2
Сравнив результаты, представленные на рис. 2 и рис. 3, видно, что для второй сети результаты обучения более точны. Если сравнивать значения целевой функции, то здесь во втором случае значение целевой функции будет больше, чем в первом, но при более высокой точности. Поэтому можно предположить, что во втором случае обучение идет медленнее, и это связано с вычислением значений гиперболического тангенса, более затратного по арифметическим операциям. Однако обучение происходит точнее.
На рис. 4 показан результат обучения третьей нейронной сети. В данном случае скорость обучения была снижена до значения 0.1. Акти-вационной функцией для всех слоев выбрана сигмоидальная функция.
Эталон • Текущее значение
Рис. 4. Результат обучения нейронной сети № 3
На рис. 4 можно увидеть, что выходы сети имеют большую ошибку по отношению к целевым выходам, в отличие от второй нейросети. Можно сделать естественный вывод, что при уменьшении скорости обучения время обуче-
ния увеличивается. Но уменьшение скорости необходимо, например, в случае достижения целевой функции локального минимума. Преодолеть локальный минимум помогает снижение скорости обучения.
На рис. 5 приведён результат обучения четвёртой нейронной сети, подобной предыдущей, с различием в типе активационной функции скрытых слоёв. В четвёртой сети выбрана функция гиперболического тангенса в качестве активационной.
Выход нейронной сети
1
08 5 06 " 04
02 0
29799 29839 29879 29919 29959 29999 Номер итерации
" Эталон • Текущее значение
Рис. 5. Результат обучения нейронной сети № 4
Как и следовало ожидать, наличие разных типов активационных функций улучшает обучаемость сети. Однако для достижения требуемой точности при малых значениях скорости обучения требуется большее количество итераций обучения [10].
В следующих примерах число нейронов в скрытых слоях было увеличено до 50. Ошибка обучения для последующих опытов является одинаковой. Один из результатов обучения приведён на рис. 6.
лГ ■ • X* м •
■ •• ; • ■ •■ • !■ > ■ ■. ■ • * ■ 111
■ % и л г ■ • 1 * ■ , * 1 •
•! •: Г г ■:. ■ ( ■ • •. • • • , ■
1 о « ■ с <■ ч ■ ■ г * ф ■
Выход нейронной сети
1
08
5 06 Ш 0-4
• 7ТГ * » ГХ I « ■ • ■ ■ ■
• • ■ < ■ ■ • • ■ ■ ■ ■ ■ • ■ ■. ■. ■ ■ ■ ■ ■
и % г а. • -■ ; 1 1 •
■ ■ • ■ • ■ . ■ ■ ■ • ■ ■ ■ ■ • ■ 1 ■ ■ ■ • ■ ■
• ■■ ' ■ ■ ■ а ■ ■ : /
02 О
29799 29839 29879 29919 29959 29999
Номер итерации
• Эталон • Текущее значение
Рис. 6. Результат обучения нейронных сетей № 5 - 8
Рис. 6 показывает, что значение выхода сети близко к единице, что объясняется поступлением на вход нейрона значений, примерно равных единице. Увеличение числа нейронов заметно снижает скорость обучения. В данных примерах такое количество нейронов является избыточным. Высока вероятность, что сеть переобучится, если подавать ей обучающий набор до тех пор, пока не будет достигнута точность.
Проанализировав результаты, сведённые в таблицу, можно сделать вывод, что число нейронов в слоях заметно влияет на время обучения. Соответственно, чем больше нейронов, тем больше вычислительная мощность сети и тем большее время требуется на её обучение. Уменьшение значения скорости обучения также заметно увеличивает время обучения. Однако уменьшение значения этого параметра порой оправданно, так как оно позволяет обходить локальные минимумы целевой функции. Комбинирование различных типов активационных функций может улучшить качество обучения, не влияя на его скорость, в связи с тем, что каждая функция вносит больше возмущения и оказывает влияние на качество обучения.
Таким образом, при построении нейронных сетей следует очень аккуратно выбирать её архитектуру и настраивать параметры. В самом начале стоит задать небольшое количество нейронов и слоёв сети и достаточно высокую скорость обучения. Затем следует провести анализ изменения целевой функции. Если её значения уменьшаются с высокой скоростью, можно предположить, что архитектура выбрана правильно. Если же значения функции актива-
ции колеблются около некоторого значения и требуемая точность не достигнута, то рекомендуется либо увеличить число нейронов в слоях сети, либо уменьшить скорость обучения [1, 6].
Разработанное приложение позволит пользователю грамотно конструировать нейронные сети, настраивать их параметры и в итоге решать поставленные практические задачи.
Литература
1. Хайкин С. Нейронные сети: полный курс / С. Хайкин. - 2-е изд., испр.; пер. с англ. - М.: ООО «И.Д. Вильямс», 2006. - 1104 с.
2. Калинин А.В. Технология нейросетевых распределённых вычислений: монография /А.В. Калинин, С.Л. Подвальный. - Воронеж: ВГТУ, 2004. - 121 с.
3. Калинин А.В. Методы решения плохо обусловленных систем линейных уравнений на основе распределённых нейросетевых вычислений / А.В. Калинин, С.Л. Подвальный // Системы управления и информационные технологии. - 2004. - № 3 (15). - С. 22-26.
4. Круглов В.В. Искусственные нейронные сети. Теория и практика / В.В. Круглов, В.В. Борисов. - 2-е изд., стереотип. - М.: Горячая линия-Телеком, 2002. - 382 с.
5. Ясницкий Л.Н. Введение в искусственный интеллект / Л.Н. Ясницкий. - М.: Издательский центр «Академия», 2008. - 176 с.
6. Каллан Р. Основные концепции нейронных сетей / Р. Каллан. - пер. с англ. - М.: ООО «И.Д. Вильямс»,
2001. - 287 с.
7. Троелсен Э. Язык программирования C# и платформа .NET 4.5 / Э. Троелсен. - 6-е изд.; пер. с англ. - М.: ООО «И.Д. Вильямс», 2013. - 1312 с.
8. Медведев В.С. Нейронные сети. MATLAB 6 / В.С. Медведев, В.Г. Потемкин. - М.: ДИАЛОГ-МИФИ,
2002. - 496 с.
9. Ясницкий Л.Н. Искусственный интеллект. Элективный кур]: учеб. пособие / Л.Н. Ясницкий. - М.: БИНОМ. Лаборатория знаний, 2011. - 240 с.
10. Круг П.Г. Нейронные сети и нейрокомпьютеры: учебное пособие по курсу «Микропроцессоры» / П.Г. Круг. - М.: Издательство МЭИ, 2002. - 176 с.
Воронежский государственный технический университет
EXPERIMENT RESULTS ANALYSIS USING THE NEURAL NETWORKS DESIGNER E.A. Gantseva1, V.F. Barabanov2, N.I. Grebennikova3, D.S. Boldyrev4
'PhD, Associate Professor, Voronezh State Technical University, Voronezh, Russian Federation,
e-mail: [email protected] 2Full Doctor, Professor, Voronezh State Technical University, Voronezh, Russian Federation,
e-mail: [email protected]
3PhD, Associate Professor, Voronezh State Technical University, Voronezh, Russian Federation,
e-mail: [email protected] 4MA, Voronezh State Technical University, Voronezh, Russian Federation, e-mail: [email protected]
In the work "Software implementation of the neural network designer", a developed modern software product for neural network design is described, which is easy to learn, has a clear and intuitive interface, is freely distributed, open source. The created software application allows the user to master the technologies for building neural networks and solve a wide range of practical problems, which include, in particular, the problems of regression and classification of images. The article presents the results of experimental studies using the created software application for neural networks design, as well as recommendations on the choice of network design parameters for improving the quality and speed of training neural networks. Due to the fact that training neural networks is a very long process and requires a large amount of test data, a test set of data for a sine function module with a volume of 30,000 readings was created, and this example demonstrates the effect of various configurable parameters of the network design on the speed of its training. The conducted researches made it possible to develop recommendations on the choice of architecture and adjustment of the values of the neural network design parameters, which should be used when working with the "Neural Networks Designer" software application
Key words: linear neuron, perceptron, multilayer networks, training, testing
References
1. Haykin S. "Neural networks" Russ. ed., Moscow, Vil'yams, 2006, 1104 p.
2. Kalinin A.V., Podval'ny S.L. "The technology of neural network distributed computing: monograph" ("Tekhnologiya ney-rosetevykh raspredelyonnykh vychisleniy: monografiya"), Voronezh, VSTU, 2004, 121 p.
3. Kalinin A.V., Podval'nyy S.L. "Methods for solving ill-conditioned systems of linear equations on the basis of distributed neural network calculations", Automation and Remote Control, 2004, no. 3 (15), pp. 22-26.
4. Kruglov V. V., Borisov V. V. "Artificial neural networks. Theory and Practice, 2nd ed., Stereotype" ("Iskusstvennye ney-ronnye seti. Teoriya i praktika, 2-e izd., stereotip"), Moscow, Hotline - Telecom (Goryachaya liniya - Telekom), 2002, 382 p.
5. Yasnitskiy L. N. "Introduction to the Artificial Intelligence" ("Vvedenie v iskusstvennyy intellekt"), Moscow,Akademiya, 2008, 176 p.
6. Callan R. "Neural networks", Russ. ed., Moscow, Vil'yams, 2001, 287 p.
7. Troelsen A. "C# and the .NET Platform", Russ. ed., Moscow, Vil'yams, 2013, 1312 p.
8. Medvedev V. S., Potemkin V. G. "Neural networks. MATLAB 6" ("Nejronnye seti. MATLAB 6"), Moscow, DIALOG-MIFI, 2002, 496 p.
9. Yasnitskiy L. N. "Artificial Intelligence. Elective course. Textbook" ("Iskusstvennyy intellekt. Elektivnyy kurs: ucheb. posob."), Moscow, BINOM, Laboratoriya znaniy, 2011, 240 p.
10. Krug P. G. "Neural networks and neurocomputers: A manual on the course "Microprocessors"" ("Neyronnye seti i ney-rokomp'yutery: Uchebnoe posobie po kursu «Mikroprotsessory»"), Moscow, MEI, 2002, 176 p.