Ю.В. Коновалова, С.О. Ветлужских Создание нейронных сетей с использованием современных симуляторов В последнее время среди спектра методик прогнозирования все более получают распространение интеллектуальные информационные технологии, в которых используется искусственная нейронная сеть [2]. Нейронная сеть позволяет воспроизводить очень сложные зависимости входных от выходных данных. Методика создания и обучения многослойных нейронных сетей довольно сложна, поэтому последнее время получили распространение симуляторы нейронных сетей. На рисунке 1 представлена модель, реализующая идею, которая лежит в основе почти всех конфигураций искусственных нейронов. Итак, множество сигналов, обозначенных вектором X = [x1, x2 ... xn], поступает на вход искусственного нейрона. Вектор входного сигнала умножается на вектор веса W = [w1, w2 ... wn], и поступает на суммирующий блок, который складывает взвешенные входы алгебраически, создавая выход Y. Каждый вес вектора W соответствует «силе» одной биологической синаптической связи. В векторных обозначениях это запишется следующим образом: [1]. Рисунок 1. Искусственный нейрон. Сигнал Y далее, как правило, преобразуется активационной функцией и дает выходной нейронный сигнал F. Активационная функция может быть различной, например линейной функцией вида: , [2]. где К – постоянная пороговой функции. F = 1, если Y > T, F = 0 в остальных случаях, T – порог активации, может быть постоянной или функцией, более точно моделирующей нелинейную передаточную характеристику нейрона и предоставляющей нейронной сети большие возможности [3]. Рисунок 2. Искусственный нейрон с активационной функцией. Для реализации нейронных сетей в Delphi предусмотрена библиотека компонентов NeuralBase. Назначением этой библиотеки является интеграция нейронной сети в информационные системы для расширения различных аналитических возможностей прогноза. Нейронная сеть реализована в виде компонентов, код которых открыт, что позволяет легко встраивать ее в другие программы. Объектно-ориентированное исполнение придает особую гибкость, достаточно переписать пару методов и вы можете получить компонент, оптимизированный под ваши задачи. Рисунок 3. Иерархия классов. Существует три базовых класса TNeuron, TLayer, TNeuralNet. Все остальные являются производными от них. На рисунке 3 приведена иерархия классов, сплошными линиями показано наследование (стрелкой указан потомок), а пунктирными– в каких классах они используются. TNeuron служит базовым классом для нейронов, несет всю основную функциональность, имеет индексированное свойство Weights, представляющее собой весовые коэффициенты (синапсы), свойство Output, которое является выходом нейрона (результатом вычислений) и сумматор, роль которого выполняет метод ComputeOut. TNeuronHopf, потомок TNeuron, реализует нейрон, используемый в нейронной сети Хопфилда, единственным отличием от базового класса является использование активационной функции в перекрытом методе ComputeOut. Следующим порожденным классом является TNeuronBP, служащий для программной реализации многослойных нейронных сетей. Аббревиатура BP в имени класса не должна вводить вас в заблуждение, что нейрон этого типа используется исключительно в сетях, обучаемых по алгоритму обратного распространения, этим мы лишний раз хотели подчеркнуть, что в нашем случае нейронная сеть обучается по этому алгоритму. Переписан метод ComputeOut, использующий теперь нелинейную активационную функцию, которая реализована в виде индексированного свойства процедурного типа OnActivationF. Кроме того, добавлены два важных свойства: Delta, содержащая локальную ошибку и индексированное свойство PrevUpdate, содержащее величину коррекции весовых коэффициентов на предыдущем шаге обучения сети. Основным назначением базового класса TLayer и его потомков TLayerHopf и TLayerBP является объединение нейронов в слой для упрощения работы с нейронами. Компонент TNeuralNet – базовый компонент для всех видов нейронных сетей. TNeuralNet обеспечивает необходимую функциональность производных компонентов. Этот компонент поддерживает методы для работы со слоями сети (AddLayer, DeleteLayer) и методы для манипуляций с исходными данными (AddPattern, DeletePattern, ResetPatterns). Метод Init служит для построения нейронной сети. Большинство методов, объявленных в разделе public в базовом компоненте и его потомках, виртуальные, что позволяет легко перекрывать их. Компонент TNeuralNetHopf реализует нейронную сеть Хопфилда. Дополнительно включены следующие методы: InitWeights – запоминает предъявленные образцы в матрице образов и метод Calc – вычисляет выход сети Хопфилда. Рассмотрим теперь процесс создания и обучения нейронной сети в пакете Matlab. Для обучения нейросети нужно создать выборку входящих данных и создать для них рассчитанные значения выходных данных. Теперь, если описать функцию SetLight, которая будет выдавать нам обученную нейросеть: function [net] = light Входящие данные для обучения INP = [1 3 2 1 3 2 4 5 4 7 1 10]; Исходящие данные для обучения OUTP = [60 21 12 6 18 15 24 30 27 45.2 9 0.6]; Нейросеть, которая будет правильно обучать нашу нейросеть для решения поставленной задачи net = newff(minmax(INP),[20,1],{‘tansig’,’purelin’},’trainlm’); Где: newff – создает сеть обратного распостранения, minmax. Задает диапазон значений для входящих данных, [20,1] – размер для каждого слоя, tansig – функция гиперболического тангенса, purelin – транспортная линейная функция, trainlm – функция, тренирующая сеть, которая обновляет значения весов по методу оптимизации Лавенберга Параметры для обучения сети: net = train(net, INP, OUTP); Функция обучения сети: net.trainParam.epochs = 1200; net.trainParam.show = 25; В процессе обучения нейросеть должна понять, что ей нужно сделать с входящими значениями, чтобы получить исходящие. Функция описана. Теперь ее можно использовать в matlab. После обучения мы просто используем нашу нейросеть для получения новых значений, которых не было в обучающей сборке, проверяя тем самым, насколько верно обучилась сеть. Еще более простой, но не менее мощный пакет для имитации нейронных сетей, это Statistica neural networks. Этот пакет позволяет создавать нейронные сети различных типов и обучать по различным методам [1]. Здесь можно выделить три основных вида сети: с прямыми, перекрестными, обратными связями. Задать различный тип сети: персептронные, линейные, радиально-базисные. STATISTICA Automated Neural Networks (SANN) является одним из самых передовых и самых эффективных нейросетевых продуктов на рынке. Он предлагает множество уникальных преимуществ и богатых возможностей. Например, уникальные возможности инструмента автоматического нейросетевого поиска. Автоматизированная нейронная сеть (АНС) позволяет использовать систему не только экспертам по нейронным сетям, но и новичкам в области нейросетевых вычислений. Кроме этого, данный пакет позволяет выводить код нейронной сети на языках C, C++, C#, Java, PMML (Predictive Model Markup Language), который может быть легко интегрирован во внешнюю среду для создания собственных приложений. Библиографический список 1. Ветлужских С.О., Коновалова Ю.В. Разработка методов и алгоритмов принятия решений и обработки информации в нормальных и аварийных режимах работы системы электроснабжения // Материалы Всероссийской научной конференции «Вузовская наука Северо-Кавказскому федеральному округу». Пятигорск, 2013. Т 2 (ч. 1). С. 74-78. 2. 3. Ветлужских С.О., Коновалова Ю.В. Перспективные информационные технологии в задачах оперативного управления электроэнергетическими системами // Материалы 5-й Международной научной конференции «Системный синтез и прикладная синергетика». Пятигорск, 2013. С. 18-22. Ветлужских С.О., Коновалова Ю.В. Использование нейронных сетей для создания моделей прогнозирования. Материалы VII Международного конгресса «Мир через языки, образование, культуру: Россия-Кавказ-Мировое сообщество». Пятигорск: ПГЛУ, 2013. С. 109-115.