Научная статья на тему 'О МЕТОДОЛОГИИ ПРЕПОДАВАНИЯ ОСНОВ ИСПОЛЬЗОВАНИЯ СРЕДСТВ ДЛЯ РАБОТЫ С ИСКУССТВЕННЫМИ НЕЙРОННЫМИ СЕТЯМИ ПРЯМОГО РАСПРОСТРАНЕНИЯ СРЕДЫ MATLAB'

О МЕТОДОЛОГИИ ПРЕПОДАВАНИЯ ОСНОВ ИСПОЛЬЗОВАНИЯ СРЕДСТВ ДЛЯ РАБОТЫ С ИСКУССТВЕННЫМИ НЕЙРОННЫМИ СЕТЯМИ ПРЯМОГО РАСПРОСТРАНЕНИЯ СРЕДЫ MATLAB Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
42
12
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
НЕЙРОННЫЕ СЕТИ / МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ / MATLAB

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Кавинов Алексей Владимирович, Велищанский Михаил Александрович

Одним из наиболее важных и перспективных направлений развития искусственного интеллекта является использование искусственных нейронных сетей (ИНС). В основе принципов работы ИНС лежит стремление подражать нервной системе человека и животных, что в сочетании с использованием вычислительной мощности современных ЭВМ позволяет успешно применять их для решения ряда задач. Среда разработки Matlab содержит средства для работы с некоторыми типами ИНС. Настоящая статья посвящена методическим вопросам изучения этих средств.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Кавинов Алексей Владимирович, Велищанский Михаил Александрович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ON THE METHODOLOGY OF TEACHING THE BASICS OF USING THE MATLAB TOOLS FOR WORKING WITH FEEDFORWARD NEURAL NETWORKS

One of the most important and promising areas for the development of artificial intelligence is the use of artificial neural networks (ANNs). The principles of ANN operation are based on the imitation of the nervous system of humans and animals, which, combined with the use of the computing power of modern computers, allows them to be successfully used to solve a number of problems. The Matlab development environment contains tools for working with some types of ANNs. This article is devoted to methodological issues of studying these means.

Текст научной работы на тему «О МЕТОДОЛОГИИ ПРЕПОДАВАНИЯ ОСНОВ ИСПОЛЬЗОВАНИЯ СРЕДСТВ ДЛЯ РАБОТЫ С ИСКУССТВЕННЫМИ НЕЙРОННЫМИ СЕТЯМИ ПРЯМОГО РАСПРОСТРАНЕНИЯ СРЕДЫ MATLAB»

О МЕТОДОЛОГИИ ПРЕПОДАВАНИЯ ОСНОВ ИСПОЛЬЗОВАНИЯ СРЕДСТВ ДЛЯ РАБОТЫ С ИСКУССТВЕННЫМИ НЕЙРОННЫМИ СЕТЯМИ ПРЯМОГО РАСПРОСТРАНЕНИЯ СРЕДЫ MATLAB

Аннотация

Одним из наиболее важных и перспективных направлений развития искусственного интеллекта является использование искусственных нейронных сетей (ИНС). В основе принципов работы ИНС лежит стремление подражать нервной системе человека и животных, что в сочетании с использованием вычислительной мощности современных ЭВМ позволяет успешно применять их для решения ряда задач. Среда разработки МаиаЬ содержит средства для работы с некоторыми типами ИНС. Настоящая статья посвящена методическим вопросам изучения этих средств.

Ключевые слова

нейронные сети, математическое моделирование, МаиаЬ

АВТОРЫ

Кавинов Алексей Владимирович,

кандидат физико-математических наук, доцент ФГБОУ ВО «Московский государственный технический университет им. Н. Э. Баумана», г. Москва [email protected]

Велищанский Михаил Александрович,

кандидат физико-математических наук, доцент ФГБОУ ВО «Московский государственный технический университет им. Н. Э. Баумана», г. Москва [email protected]

Введение

Важность искусственных нейронных сетей как направления развития искусственного интеллекта трудно переоценить. Их применение позволяет успешно решать те задачи, для которых традиционный жёсткий алгоритмический подход неэффективен. В настоящее время для использования доступно несколько библиотек, позволяющих разработчику использовать ИНС в своих разработках. Среда разработки инженерных приложений Matlab также предоставляет пользователю ряд пакетов расширения для работы с нейронными сетями. В частности, такие средства входят в состав пакета Deep learning toolbox (в ранних версиях Matlab - Neural Network Toolbox)[1-4], методическим аспектам обучения основам работы с которым и посвящена данная статья. В статье рассматриваются средства работы с нейронными сетями прямого распространения, которые, несмотря на свою относительную простоту, успешно применяются для решения ряда задач.

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

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

Методология и результаты исследования

Нейронные сети прямого распространения могут быть представлены как статические системы, состоящие из одного или более нейронных слоёв, соединённых последовательно. Каждый слой производит некоторую трансформацию входного сигнала, передавая его далее на вход следующего слоя или на выход сети. Конкретный вид этой трансформации зависит от параметров слоя, называемых весами и смещениями. Задавая различные веса и смещения слоёв, можно получать разные преобразования «вход-выход», что позволяет использовать одни и те же сети для решения широкого спектра различных задач. Процесс назначения весов и смещений сети называется её обучением.

Действие к-го нейронного слоя сети можно описать формулой

у* = гк(1.%™№ + ь1)> (1)

где рк - компоненты вектора входа к-го слоя, гк - размерность входа слоя, w^- -вес i -го нейрона к-го слоя, соответствующий j- му входу к-го слоя, Ьк- смещение i -го нейрона к-го слоя, ук - выход i -го нейрона к-го слоя, fk - так называемая активирующая функция к-го слоя. Далее обозначим функцию, сопоставляющую выход слоя его входу, как

lay е rk(pk,wk,bk),

где рк, wk, Ьк - векторы входов, весов и смещений соответственно.

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

nnet(x) = layers(layers-1(—(layer1(x,w1,b1), — ),ws-1,bs-1),ws,bs). (2)

Все слои сети, кроме выходного layers, называются скрытыми. Если количество нейронов в выходном слое определяется задачей и совпадает с размерностью выхода, то количества нейронов в скрытых слоях могут быть разными. Чем больше нейронов имеют скрытые слои, тем более сложный вид может иметь функция (2).

Таким образом, можно понимать нейронную сеть прямого распространения как функцию нескольких переменных с параметрами. Задачу обучения нейронной сети прямого распространения можно сформулировать следующим образом. Пусть хл, — ,xm е Rri- некоторые входные векторы, а y-t,---,ym е Rn- значения, которые мы ожидаем получить на выходе сети для соответствующих входных векторов. Эта совокупность данных называется обучающей выборкой. Потребуем от весов и смещений слоёв сети, чтобы функция ошибки

Q(w1,b1, ■■■ ,ws,bs) = Yi=imse(nnet(xi) — yi), (3)

где

mse(z) =\"Enn=1z2

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

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

Перейдём к описанию средств Neural Network Toolbox для работы с нейронными сетями прямого распространения. Основных операций с ИНС три: создание/задание структуры, обучение и вычисление выхода по заданному входу.

Создание модели ИНС прямого распространения в памяти ЭВМ осуществляется с помощью функций feedforwardnet, fitnet и patternnet. Основной из этих функций является feedforwardnet. Остальные две реализуются посредством первой и отличаются от неё другими настройками по умолчанию в создаваемых сетях. Конкретные различия в настройках не раскрываются в документации Matlab, но считается, что fitnet предназначена для создания сетей, решающих задачи аппроксимации, а patternnet -задачи распознавания/классификации. Далее будем описывать процесс создания сети с помощью функции feedforwardnet.

Способ использования feedforwardnet следующий:

net = feedforwardnet(hiddenSizes)

или

net = feedforwardnet(hiddenSizes,trainFcn).

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

Здесь аргумент hiddenSizes задаёт количества нейронов в скрытых слоях. Он представляет из себя массив чисел размера s - 1 (напомним, s - количество слоёв сети). Элемент массива с индексом i задаёт количество нейронов в t-м слое. Например, массив [10,2,3] задаёт сеть прямого распространения, состоящую из четырёх слоёв, причём первый слой имеет 10 нейронов, второй - 2 и третий - 3.

Аргумент trainFcn задаёт алгоритм оптимизации, который будет использован при обучении сети. Не вдаваясь в сравнительный анализ различных методов, скажем, что наиболее эффективные с точки зрения скорости обучения алгоритмы обычно наименее эффективны в смысле расхода памяти. При обучении сетей с большим количеством нейронов приходится использовать более медленные алгоритмы обучения из-за ограничений на используемый объём памяти. Общий список доступных алгоритмов обучения представлен в таблице 1.

_Таблица 1. Список алгоритмов обучения_

Значение trainFcn Название алгоритма

'trainlm' Метод Левенберга-Марквардта

'trainbr' Байесовская регуляризация

'trainbfg' Квазиньютоновский алгоритм Бройдена, Флетчера, Гольдфарба и Шанно

'trainrp' Устойчивое обратное распространение

'trainscg' Алгоритм масштабированных сопряженных градиентов

'traincgb' Алгоритм сопряженных градиентов с перезапуском Пауэлла-Била

'traincgf Метод сопряжённых градиентов

'traincgp' Метод сопряжённых градиентов, модификация Полака-Рибьера

'trainoss' Одношаговый метод секущих

'traingdx' Градиентный спуск с переменной скоростью обучения

'traingdm' Градиентный спуск с импульсом

'traingd' Градиентный спуск

По умолчанию для обучения используется trainlm, т.е. метод Левенберга-Марк-вардта. Это оптимальный выбор для небольших сетей, когда задействованные в этом методе матрицы могут поместиться в оперативной памяти. В случае, если объём оперативной памяти не позволяет хранить матрицы, аппроксимирующие матрицу Гессе, следует использовать методы первого порядка, например, traingdx.

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

netl = train(net,input,output).

Здесь net - созданный ранее объект нейронной сети, input - матрица, составленная по столбцам из входных векторов для обучения, output - матрица, составленная по столбцам в том же порядке из желаемых выходов обученной сети, netl - обученная сеть. Здесь нужно обратить внимание на то, что функция train не меняет свой входной аргумент, а возвращает новый объект, содержащий обученную сеть. Игнорирование этого факта часто приводит к ошибкам на первых этапах освоения пакета.

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

У= net(x),

где x - входные данные, y - вычисленный выход сети, net - объект обученной

сети.

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

% Аппроксимация синуса с помощью ИНС

x=0:0.25:6; % массив входных данных обучающей выборки

net = feedforwardnet(6); % создание сети из 2х слоёв с 6 нейронами

% в скрытом слое net = train(net,x,sin(x)); % обучение сети z = net(x); % вычисление выхода на входных данных % проверка результатов обучения с помощью графиков x_dense= 0:0.01:6;

plot(x_dense,sin(x_dense),'b-,,x,z,,ro',... x_dense,net(x_dense),'r-,,x,sin(x),,b*');

Приведённая программа создаёт модель двухслойной сети прямого распространения и обучает её аппроксимации функции «синус». Заметим, что практического смысла в этой программе нет. Она имеет чисто методическое значение. В результате работы программы на экране появляются графики (см. рис. 1). Синим цветом на рисунке изображён график синуса, синими кружками отмечены точки, координаты которых были использованы при обучении сети. Красной линией изображён график функции выхода нейронной сети, красными кружками - значения выхода в точках обучения. График показывает, что созданная нейронная сеть действительно аппроксимирует значения синуса на отрезке от 0 до 6.

Заметим, что при повторном запуске программы картина может отличаться от приведённой на рисунке. Это вызвано тем, что задача оптимизации, возникающая при обучении сети, имеет, вообще говоря, несколько решений. Целевая функция (3) может иметь несколько локальных минимумов, причём шансы на это повышаются при увеличении количества нейронов. Никакого общего способа проверки того, соответствует ли найденный набор весов и смещений глобальному минимуму (3), не известно. Можно лишь повторно производить обучения, выбирая разные начальные значения весов и смещений. По умолчанию функция train делает это автоматически, выбирая начальные значения случайным образом. Это позволяет, обучив нейронную сеть несколько раз, выбрать наилучший результат для дальнейшего использования.

1.5 -I-I-I-I-I-

-1.5 -1-1-1-1-1-

0 1 2 3 4 5 6

Рис.1 Результат работы программы «Аппроксимация синуса с помощью ИНС»

Коснёмся важного вопроса выбора количества слоёв и нейронов сети. В приведённой выше программе создаётся нейронная сеть с двумя слоями и шестью нейронами в первом слое. Почему именно 6? Что произойдёт, если выбрать большее или меньшее количество нейронов в скрытом слое? От количества нейронов зависит количество оптимизируемых параметров сети. Если их будет слишком мало, функция (2) окажется слишком простой и не сможет достаточно точно обеспечить соответствие между желаемыми и реальными значениями выхода. Но и слишком большое количество параметров сети на практике нежелательно, поскольку влечёт за собой возникновение явления так называемого переобучения. Оно заключается в том, что хотя значения выхода на входных значениях из обучающей выборки близки к желаемым, выход на других входных значениях может сильно отличаться от того, к чему стремится пользователь. На рисунках 2 и 3 показаны примеры графиков выхода для случаев недообучения и переобучения. В первом случае была использована сеть с двумя нейронами, во втором - с 35.

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

К сожалению, проанализировать качество обучения графически можно лишь для случаев размерности входов 1 или 2. Для задач более высокой размерности приходится прибегать к следующему способу. Разобьём обучающую выборку на две части.

Данные из первой части будем использовать для вычисления ошибки по формуле (3) при обучении сети. Данные из второй части не будем учитывать в целевой функции оптимизации. Эти данные будут контрольными. Их будем использовать для проверки качества обучения сети.

0 1 2 3 4 5 6

Рис. 2. Результат работы программы в случае недообучения

Функция train по умолчанию разбивает обучающую выборку на три части. Первая, обучающая (имеет название train в документации Matlab) используется для обучения сети, вторая, проверочная (validation в документации Matlab) используется для контроля качества обучения, и, наконец, третья, тестовая (test в документации Matlab) никак не используется в процессе обучения и может быть использована пользователем для дополнительного контроля. Если пользователь не задал настройки разбиения

обучающей выборки, то для обучения случайным образом отбирается 70 процентов данных, а для проверки и тестирования - по 15 процентов. При желании пользователь может изменить это соотношение. Для этого необходимо после создания объекта сети, но перед её обучением задать соответствующие количества в виде долей единицы через свойства divideParam.trainRatio, divideParam.valRatio и divideParam.tes-tRatio объекта сети:

net = feedforwardnet(6); % создание сети net.divideParam.trainRatio= 0.8; % для обучения net.divideParam.valRatio= 0.2; % для проверки net.divideParam.testRatio= 0; % для тестирования

В приведённом выше коде для обучения выделяется 80 процентов обучающей выборки, для проверки - 20. Для тестирования не выделяется ничего.

Одним из критериев остановки обучения является неубывание ошибки на проверочных данных в процессе обучения. Если эта ошибка не убывает на протяжении более чем net.trainParam.max_fail итераций подряд, где net - объект сети, обучение останавливается.

Осталось рассказать о том, как пользователь может проконтролировать качество обучения сети и проанализировать возможное влияние пере- или недообучения. В процессе работы функции train на экране появляется окно информации о ходе обучения (рис. 4):

Рис.4 Окно информации о ходе обучения

Окно информации о ходе обучения содержит массу полезной информации об обучении сети, однако нас интересуют лишь графики ошибок на обучающей выборке. При нажатии на кнопку Performance (выделена красным на рис.4) на экране появляется окно с графиками изменения ошибок на обучающей выборке в процессе обучения. По оси абсцисс на графике отложено количество выполненных итераций оптимизационного алгоритма. Синим цветом отображён график ошибки на обучающих данных, зелёным - на проверочных и красным - на тестовых. В случае нормального хода обучения графики ошибок выглядят примерно так, как показано на рис. 5.

Best Validation Performance is 3.2372e-09 atepoch 300

10 f ;

Train

Validation

Test

0 50 100 150 200 250 300

305 Epochs

Рис.5 Графики ошибок при нормальном обучении

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

Примерный вид графиков ошибок в случае переобучения показан на рис. 6.

Best Validation Performance is 0.60444 at epoch 5

0 1 2 3 4 5

5 Epochs

Рис.6 Графики ошибок при переобучении

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

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

6 8 10 16 Epochs

Рис.7 Графики ошибок при переобучении

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

На этом мы закончим элементарное введение в средства пакета Neural Network Toolbox. Дальнейшее изучение его возможностей выходит за рамки данной статьи. Для самостоятельного решения читателям и студентам предлагаются следующие задания.

1. Напишите программу, создающую нейронную сеть прямого распространения и с её помощью аппроксимирующую функцию двух переменных /(х,у) = х2 - у3 на множестве х е [-2,2], у е [-2,2]. Какой размер обучающей выборки достаточен для аппроксимации с точностью 0.1? Постройте графики f(x,y) и функции обученной сети. Проанализируйте возможность наличия недо- или переобучения.

2. Напишите программу, создающую нейронную сеть прямого распространения и с её помощью аппроксимирующую функцию трёх переменных f(x,y,z) = х2 - у3 + z4 на множестве х е [-2,2], у е [-2,2], z е [-2,2]. Проанализируйте возможность наличия недо- или переобучения с помощью графиков ошибок.

3. Напишите программу, создающую нейронную сеть прямого распространения и с её помощью классифицирующую точки плоскости следующим образом: для точек внутри единичной окружности с центром в начале координат на выходе сети должно быть значение 1, для остальных точек - 0. Проверьте результат работы программы графическим способом. Проанализируйте возможность наличия недо- или переобучения.

Заключение

В настоящей статье авторы на основании собственного опыта преподавания приводят конспект занятия по введению в моделирование ИНС средствами МаиаЬ, включающий описание основных функций, применяемых для работы с искусственными нейронными сетями прямого распространения в среде МаиаЬ, примеры их применения и возможные задания для самостоятельного выполнения студентами. Эта информация может быть использована при проведении занятий со студентами соответствующих специальностей.

ССЫЛКИ НА ИСТОЧНИКИ

1. Neural Network Toolbox (ЦИТМ Экспонента). (2022 г.) - URL: https://exponenta.ru/news/Neural-Network-Toolbox

2. Deep Learning Toolbox (Документация Mathworks). (2022 г.) - URL: www.mathworks.com/help/deeplearning/

3. Медведев В.С. Нейронные сети. Matlab 6 / В.С. Медведев, В.Г.Потёмкин. - М.:Диалог-МИФИ, 2001. - 496 с.

4. Beale M.H. Matlab Neural Network Toolbox Reference / M. H. Beale, M.T. Hagan, H.B. Demuth. - Natick: The MathWorks, Inc, 2018. - 1146 p.

Alexey V. Kavinov,

Candidate of Physical-Mathematical Sciences, Associate Professor, Moscow State Technical University named after N.E. Bauman, Moscow, Russia alekseyvladimirovichl @yandex. ru Mikhail A. Velishchanskiy,

Candidate of Physical-Mathematical Sciences, Associate Professor, Moscow State Technical University named after N.E. Bauman, Moscow, Russia velmiha@yandex. ru

On the methodology of teaching the basics of using the MATLAB tools for working with feedforward neural networks

Abstract. One of the most important and promising areas for the development of artificial intelligence is the use of artificial neural networks (ANNs). The principles of ANN operation are based on the imitation of the nervous system of humans and animals, which, combined with the use of the computing power of modern computers, allows them to be successfully used to solve a number of problems. The Matlab development environment contains tools for working with some types of ANNs. This article is devoted to methodological issues of studying these means.

Keywords: neural networks, mathematical modeling, Matlab.

i Надоели баннеры? Вы всегда можете отключить рекламу.