Программная реализация алгоритма обучения нейронной сети
О.А. Кабышев, М.П. Маслаков, А.М. Кабышев
Северо-Кавказский горно-металлургический институт (государственный
технологический университет)
Аннотация: В статье рассматриваются вопросы, связанные с проектированием устройств управления технологическим оборудованием на основе искусственных нейронных сетей. Разработан алгоритм процесса обучения нейронных сетей, основанный на методе Уидроу-Хоффа, предназначенный для автоматизированного проектирования искусственных нейронных сетей, функционирующих в среде микропроцессорной системы или персонального компьютера. Выполнена программная реализация алгоритма обучения трехслойной нейронной сети с использованием языка программирования С# на платформе Microsoft.NET. В программе используется алгоритм обучения нейронной сети с «учителем». В статье показан интерфейс взаимодействия разработанной программы с «учителем» (проектировщиком нейронных сетей). Приведен пример разработки искусственной нейронной сети, выполняющей функцию сумматора двоичных чисел. Полученные в статье результаты могут быть в дальнейшем использованы при разработке компьютерной системы автоматизированного проектирования искусственных нейронных сетей, а также могут найти применение при разработке программного обеспечения для микропроцессорных систем управления технологическим оборудованием. Ключевые слова: Иискусственная нейронная сеть, обучение, алгоритм, язык программирования, смещение нейрона, сумматор, входные сигналы, выходные сигналы, синаптические связи, нейрон.
Искусственные нейронные сети находят применение для обработки сигналов в системах управления и диагностики режимов работы технологического оборудования [1]. Применение в системах управления комбинационных логических автоматов, выполненных на основе искусственных нейронных сетей, позволяет разрабатывать технологическое оборудование, адаптирующееся к конкретным условиям технологического процесса.
Функционирование нейронных сетей невозможно без обучения нейронов, входящих в их состав. Обученная искусственная нейронная сеть должна находить зависимости между входными и выходными данными и выполнять их обобщение. В процессе обучения необходимо найти баланс между способностью сети выдавать правильные результаты в ответ на обучающую выборку, и способностью правильного ответа на данные,
которые отсутствовали в обучающей выборке. При этом достаточно трудоемким процессом, требующим большого объема вычислений, является поиск величин весовых коэффициентов синаптических связей и смещений нейронов сети [2, 3]. Поэтому при разработке и реализации нейронных сетей целесообразно использовать возможности современных средств микропроцессорной и вычислительной техники с соответствующим программным обеспечением, реализующим определенный алгоритм обучения. Алгоритмам обучения нейронных сетей посвящено большое количество разработок и публикаций [4-6].
На рис.1 показана схема процесса обучения нейронной сети, в которой использован алгоритм обратного распространения ошибки на основе метода Уидроу-Хоффа [3-5]. Программная реализация этой схемы в вычислительной среде микропроцессорной системы или персонального компьютера позволяет автоматизировать процесс разработки искусственных нейронных сетей.
В процессе обучения, согласно алгоритму, на вход нейронной сети подаются сигналы из массива обучающих выборок "х'\ а также сети
предоставляется информация, в виде массива эталонных значений "у0п, о
том, как необходимо реагировать на каждую обучающую выборку. Эта информация задается разработчиком нейронной сети в блоке №1 алгоритма. В блоке №2 формируются начальные значения весов синаптических связей "м" и смешений (порогов)11Ь11 нейронов сети. В блоке №3 разработчик задает
скорость обучения "а" (выбирается число в диапазоне: 0<и <1) и количество
итераций "п", эти величины влияют на качество обучения [7]. Вычисление
текущих состояний "б" и выходных сигналов "у" нейронов, входящих в
состав сети, осуществляется в блоке №4. Текущее состояние каждого нейрона сети вычисляется по формуле: 5=27=1 ** * гДе: Х1 ~ входной I-
й сигнал; w¿ - вес синаптической связи по которой передается г-й сигнал; Ь-смещение нейрона; ш - количество входных сигналов. Величины сигналов
II П •_» II II
у на выходах нейронов зависят от величин текущего состояния s и от
того, какая функция активации применяется в нейронах [2, 4]. Вычисление ошибок и корректировка весовых коэффициентов выполняется в блоке №5.
Рис. 1. Алгоритм обучения искусственной нейронной сети
М Инженерный вестник Дона, №3 (2021) ivdon.ru/ru/magazine/arcliive/n3y2021/6850
При использовании в нейронах логистической функции активации ошибка, между эталонным значением выходного сигнала "уО" и его
реальным значением "у", рассчитывается по формулам:
- = О - ) ■.'. ; 1 - !- для нейронов выходного слоя,
- для остальных слоев,
где: <5,- ошибка нейрона с номером /; у у выход нейрона с номером ;; ¿-
номер слоя, который посылает ошибку по сети в обратном направлении (с выхода сети на вход).
Рассчитываются величины, на которые надо изменить весовые коэффициенты: Ди7г;=а* <5, * хи где: ск - скорость обучения; х{ - сигнал,
поступающий от нейрона с номером г; ошибка нейрона].
Выполняется коррекция весов синаптических связей путем прибавления величин к предыдущим значениям весовых
коэффициентов. Для корректировки смещений (порогов) нейрона с номером ] используется формула: Ь;= Ъ ; -На* .
В блоке №6 контролируется количество выполненных итераций обучения.
В блоке №7 выводятся, для визуального контроля, полученные в процессе обучения величины весов синаптических связей и смещений нейронов сети и выполняется расчет реакции обученной сети на сигналы обучающей выборки.
Программная реализация рассмотренного алгоритма выполнена на языке программирования С# (платформа Microsoft.NET) [8, 9, 10].
Ниже приведена основная часть кода разработанной программы:
//задание типа переменных и начальных значений весов
double w11=0, w21=0, w12=0, w22=0,
w13=0, w23=0, b1=0, b2=0, b3=0, a, s1, s2,
s3, error3, error2, error1, y1, y2;
int n; // число итераций
// интерфейс ввода обучающей выборки
"xl"
double[] x1 = new double[4] {
double.Parse(textBox11.Text),
double.Parse(textBox12.Text),
double.Parse(textBox14.Text),
double.Parse(textBox13.Text)};
// интерфейс ввода обучающей выборки
"x2"
double[] x2 = new double[4] {
double.Parse(textBox18.Text),
double.Parse(textBox17.Text),
double.Parse(textBox16.Text),
double.Parse(textBox15.Text)};
// интерфейс ввода эталонных значений
выхода сети
double[] y0 = new double[4] {
double.Parse(textBox22.Text),
double.Parse(textBox21.Text),
double.Parse(textBox20.Text),
double.Parse(textBox19.Text)};
double[] y = new double[4]; // массив
выходных значений сети
// процедура функции вычисления
for (int j = 1; j <= n; j++)
{for (int k = 1; k <= 4; k++)
{// вычисление текущих состояний "s" и
выходных значений "y" нейронов
s1 = (w11 * x1[k]) + (w21 * x2[k]) + b1;
у1=1/(1+МаШ.Ехр(-Б1));
62 = ^12 * х1[к]) + ^22 * х2[к]) + Ь2; у2 = 1 / (1 + МаШ.Ехр(-Б2));
63 = (w13 * у1) + (w23 * у2) + Ь3; у[к] = 1 / (1 + МаШ.Ехр(-Бз));
// вычисление ошибок еггогЭ = (у0[к] - у[к]) * (1 - у[к]) * у[к]; еггог1 = у1 * (1 - у1) * (еггогЭ * w13); еггог2 = у2 * (1 - у2) * (еггогЭ * w23); // корректировка весов и смещений w11 += а * еггог1 * х1[к]; w12 += а * еггог1 * х2[к]; w21 += а * еггог2 * х1[к]; w22 += а * еггог2 * х2[к]; w13 += а * еггогЭ * у1; w23 += а * еггогЭ * у2; Ь1 += а * еггог1; Ь2 += а * еггог2; ЬЭ += а * еггогЭ;}} //вывод результатов обучения сети 1ех1Бох1.Тех1 = w11.ToStгing(м0.00м 1ех1Бох2.Тех1 = w21.ToStгing(м0.00м textБox3.Text = Ь1.^й^("0.00"); textБox6.Text = w12.ToStгing("0.00" textБox5.Text = w22.ToString("0.00" textБox4.Text = Ь2.ToStгing("0.00"); textBox9.Text = w13.ToStгing("0.00" textБox8.Text = w23.ToStгing("0.00" textБox7.Text = Ь3.ToStгing("0.00"); textБox26.Text = у[0].^№^("0.00"); textБox25.Text = y[1].ToStгing("0.00"); textBox24.Text = y[2].ToStгing("0.00"); textБox23.Text = y[з].ToStгing("0.00");
Программа адаптирована для обучения нейронной сети, показанной на рис.2. Сеть состоит из трех нейронов, входные сигналы "х1, х2" образуют первый слой сети, нейроны 1 и 2 входят в состав второго (промежуточного) слоя, нейрон с номером 3 находится в выходном слое, сигнал на его выходе характеризует реакцию сети на входные сигналы. В состав нейронов входят преобразователи, устанавливающие логистическую зависимость выходных сигналов нейронов "у1, у2, у" от их текущих состояний "б" [2].
и
Рис. 2. Структурная схема нейронной сети
Интерфейс обеспечивающий взаимодействие программы с оператором (разработчиком нейронной сети) представлен на рис. 3. Для обучения нейронной сети необходимо ввести обучающую выборку, ожидаемые выходные данные («Эталонный выход») и «нажать» кнопку «Вычислить» (рис.3). Веса синаптических связей нейронов автоматически корректируются и в поле «Выходной сигнал» отобразится полученный результат работы нейронной сети. Изменяя параметры «Скорость обучения» и «Количество итераций», можно корректировать скорость и точность обучения нейронной сети.
Рис.3. Интерфейс программы
и
В качестве примера, с помощью разработанной программы, был проведен процесс обучения нейронной сети, выполняющей функцию сумматора двоичных чисел, схема и таблица истинности сумматора представлены на рис. 4. Схема выполнена на основе нейронной сети, показанной на рис. 2.
Рис. 4. Схема сумматора
Полученные в статье результаты могут найти применение при разработке программного обеспечения для микропроцессорных систем управления технологическим оборудованием. Рассмотренный алгоритм и текст программы могут быть использованы при разработке автоматизированной системы проектирования искусственных нейронных сетей.
Литература
1. Minsky M. L., Papert S. A. Perceptrons. — Cambridge: MIT Press, 1969. 258 ^
2. Хайкин С. Нейронные сети: полный курс, 2-е издание.: Пер. с англ. М.: Издательский дом «Вильямс», 2006. 1104 с.
3. Тархов, Д.А. Нейронные сети. Модели и алгоритмы. Кн.18. Справочное издание. (Серия 'Нейрокомпьютеры и их применение'): - М.:Радиотехника, 2005. 256 с.
4. Круглов В.В., Борисов В.В. Искусственные нейронные сети. Теория и практика. М.: Горячая линия - Телеком, 2002. 382 с.
5. Романов Д.Е. Нейронные сети обратного распространения ошибки // Инженерный вестник Дона, 2009, №3. URL: ivdon.ru/magazine/archive/n3y2009/143/.
6. Лила В.Б. Алгоритм и программная реализация адаптивного метода обучения искусственных нейронных сетей // Инженерный вестник Дона, 2012, №1. URL: ivdon.ru/magazine/archive/n1y2012/626/.
V. Handbook of neural network signal processing/ Edited by Yu Hen Hu, Jenq-Neng Hwang. - Boca Raton; London; New York, Washington D.C.: CRC press, 2001. 384 c.
8. Головко В.А., под ред. проф. Галушкина А.И. Нейронные сети: обучение, организация и применение, ИПРЖР, Москва, 2001. 256 с.
9. Фаронов В. В., Создание приложений с помощью C#: Руководство программиста. М.: Эксмо, 2008. 575 с.
10. Пахомов Б. И. C# для начинающих. СПб.: БХВ-Петербург, 2014. 432 с
References
1. Minsky M. L., Papert S. A. Perceptrons. Cambridge: MIT Press, 1969. 258
p.
2. Khaykin S. Neyronnye seti: polnyy kurs [Neural Networks: a complete course], 2-e izdanie. Per. s angl. M.: Izdatel'skiy dom «Vil'yams», 2006. 1104 p.
3. Tarkhov, D.A. Neyronnye seti. Modeli i algoritmy [Neural networks. Models and algorithms]. Kn.18. Spravochnoe izdanie. (Seriya 'Neyrokomp'yutery i ikh primenenie'): M.: Radiotekhnika, 2005. 256 p.
4. Kruglov V.V., Borisov V.V. Iskusstvennye neyronnye seti. Teoriya i praktika [Artificial neural networks. Theory and practice]. M.: Goryachaya liniya Telekom, 2002. 382 p.
5. Romanov, D.E. Inzhenernyj vestnik Dona, 2009, №3. URL: ivdon.ru/magazine/archive/n3y2009/143/.
6. Lila V.B. Inzhenernyj vestnik Dona, 2012, №1. URL: ivdon.ru/magazine/archive/n1y2012/626/.
7. Yu Hen Hu, Jenq-Neng Hwang. Boca Raton; London; New York, Washington D.C.: CRC press, 2001. 384 p.
8. Golovko V.A., pod red. prof. Galushkina A.I. Neyronnye seti: obuchenie, organizatsiya i primenenie [Neural networks: Training, organization, and application], IPRZhR, Moscow, 2001. 256 p.
9. Faronov V. V., Sozdanie prilozheniy s pomoshch'yu C#: Rukovodstvo programmista [Creating Applications with C#: A Programmer's Guide]. M.: Eksmo, 2008. 575 p.
10. Pakhomov B. I. C# dlya nachinayushchikh [C# for beginners]. SPb.: BKhV-Peterburg, 2014. 432 p.