Найти тему

РЕАЛИЗАЦИЯ АЛГОРИТМА ОБУЧЕНИЯ НЕЙРОННОЙ СЕТИ НА ПЛК ОВЕН В СРЕДЕ CODESYS.

Оглавление

Ключевые слова: ПЛК, искусственные нейронные сети, АСУ ТП.

Авторы:
Гуськов К.С. - Студент СПбПУ
Олейников В.С. - Старший преподаватель СПбПУ

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

Такие нейросетевые модели все чаще применяются во многих сферах жизни, начиная от прогнозирования погоды и заканчивая моделированием поведения элементарных частиц.

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

В данной работе рассмотрен один из стандартных методов обучения нейронных сетей в среде программирования CoDeSys для ПЛК ОВЕН.

Для обучения нейронной сети был выбран метод обратного распространения ошибки. Данный метод (Back-propagation) был создан для многослойных сетей прямого прохода, такими как ADALINE или персептрон. Особенностью данного алгоритма является то, что в нем используется нелинейные дифференцируемые функции активации. К таким функциям можно отнести сигмоиду или гиперболический тангенс.

В нашей практической работе мы будем пользоваться функцией сигмоиды:

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

Принцип обратного распространения ошибки базируется на определении сети таким образом, чтобы получить минимальную среднеквадратичную ошибку на обучающих выборках. Поэтому в данном методе мы будем пользоваться понятием градиента функции ошибки. Математической модели предоставляются последовательно входные вектора из выборки, которая определена заранее. Далее вычисляются градиенты функции ошибки для каждого нейрона модели. Также в обучении нейронной сети применяется такое понятие, как вес функции. Данное определение позволяет нейронной сети корректировать входной вектор таким образом, чтобы на выходе мы получали желаемый результат. В алгоритме Back-propagation веса изменяются в направлении, противоположном градиенту. Иногда, сам метод еще называют градиентным спуском из-за данной особенности.

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

-2

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

Алгоритму обратного распространения ошибки выглядит следующим образом:

1) Все весовые коэффициенты инициализируются малыми ненулевыми значениями в интервале [0,1].

2) Определяется выборка:

- Представляется входной вектор x.

- Задается для данного вектора желаемые выходные значения (y).

3) Перед переходом к вычислению и настройке весов, необходимо организовать прямой проход нейронной сети, то есть получить выходной вектор на основании действительной нейронной сети:

Для вычисления значения нейрона в скрытом слое, необходимо выполнить суммирование всех произведений весов на входную величину. Например, взять следующую систему:

-3

Чтобы вычислить нейрон L1 нам необходимо сложить произведения весов на входные значения входящих в данный нейрон. Ниже приведен пример расчета:

-4

Где f(x) — это активационная функция, в данном случае сигмоида. Таким образом необходимо выполнить такие же вычисления с остальными нейронами и получить на выходе вектор, состоящий из двух элементов L5 и L6, с учетом того, что к последним нейронам не применяется функция активации.

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

5) После выполнения прямого прохода по нейронной сети, необходимо приступить к выполнению обратного прохода. То есть на данном этапе вычисляется градиент полученной ошибки. Таким образом будет получаен локальный градиент для последних нейронов:

-5

Где e – это разность между текущим значениями вектора и желаемым:

-6

А f'(x) – это производная функции активации которая определяется следующим образом:

-7

Тогда получаем:

-8

6) После того как определена градиент ошибки по выходным нейронам, то необходимо выполнить корректировку весов, примыкающих к выходному вектору.

-9

Где k- номер слоя, i- номер нейрона в k-ом слое и j- номер веса, примыкающего к i-му нейрону k-го слоя, а (лямбда) - это шаг сходимости обычно ставиться либо 0.1 либо 0.01 или 0.001, в зависимости от скорости сходимости.


7) Далее вычисляются градиенты для нового слоя. Отличием от последнего слоя является то, что за место градиента по ошибке мы берем градиент предыдущего слоя. Вычисление нового значения происходит по следующей формуле:

-10

8) После чего повторяется процедура корректировки весов, но уже для следующего слоя.

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

10) Как только ошибка достигнет заданного значения по всем выборкам, то нейронная сеть обучена. Далее идет тестирование на неизвестных входных данных.

Таким образом получена нейронную сеть, которая в состоянии решать определенную задачу на основе обучающих выборок. Далее вышеописанный алгоритм реализован в среде программирования CodeSysдля ПЛК ОВЕН на языке ST.

Необходимо учесть, что из-за низкой скорости последовательных вычисления (т.к. работа программ в ПЛК выполняется в реальном времени) нельзя реализовывать нейронные сети больших структур.

Для тестирования алгоритма была выбрана простейшая задача — это определение значения функции:

-11

Необходимо для данных функций определить выборочные наборы данных, которые будут являться обучающими и тестирующими (выделено в таблице № 1 выделено):

Таблица 1. Выборка данных.

-12

Для реализации алгоритма для ПЛК ОВЕН в среде CoDeSys 2.3, объявлены глобальные переменные, которые необходимы во всех в будущем созданных программах:

Рисунок 2- Глобальные переменные
Рисунок 2- Глобальные переменные

Переменные, используемые в программе:

- DesiredMatrix – вектор желаемых выходных значений;

- Weights, WeightsIsh – веса нейронной сети;

- Delta, delta1 – градиенты слоев математической модели;

- NumWeights – количество матриц весовых коэффициентов;

- InitialMatrix – Вектор входных значений;

- SizeInit, StrokOut- размерность входного и выходного векторов;

- Layer – вектор нейронов скрытого слоя;

- Error – ошибка выходной величины, которая равна разности выходного вектора и желаемого;

- flagStop – флаг инициализации;

- StrokW, StolbW – размерности матриц весовых коэффициентов;

- MainError – среднеквадратичная ошибка

- Viborka – номер выборки входного вектора;

- Lb – скорость сходимости;

Произведена инициализация весов, входных и выходных векторов. Необходимо произвести определение весовых коэффициентов. В среде CoDeSys существует библиотека oscat_basic, в которой существует функция генерации случайных чисел RDM. На вход данной функции подается значение и на выходе случайным образом генерируется величина в диапазоне (0,1]. Ниже приведена программа, инициализирующая начальное значение весов:

-14

Фрагмент кода, где происходит прямой проход по нейронной сети:

-15

Данный фрагмент кода аналогичен ранее описанному алгоритму.

Далее необходимо вычислить среднеквадратичную ошибку:

-16

После того как получена среднеквадратичную ошибку, необходимо приступить к обратному проходу и корректировки весов. Фрагмент кода, где вычисляется градиенты нейронов k-го слоя:

-17

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

-18

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

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

Полученные значения на выходе прямого прохода:

-19

Где Itog[1] – это выходное значение 9-й выборки, Itog[2] – соответственно 10-й выборки.

Количество итераций обновления весов:

-20

Исходные весовые коэффициенты системы:

-21

Скорректированные весовые коэффициенты системы:

-22

Вывод

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

Во время работы был реализован данный метод в среде программирования CodeSyS 2.3 для ПЛК ОВЕН.

Программа протестирована на некоторой линейной функции и получен результат схожий с ожидаемыми величинами. За время обучения прошло более 5000 итераций, в которых происходила настройка весов, до указанной точности. Время обучения заняло более 4 минут, так как вычисления в ПЛК производятся циклично в реальном времени.

Литература

1. Руководство пользователя по программированию ПЛК в CoDeSys 2.3 Редакция RU 2.4, для CoDeSys V2.3.6.x Смоленск – : 3S Software, 2006. – 453 c. – Текст : непосредственный

2. www. AIportal.ru: Портал искусственного интеллекта : сайт. – Москва, 2022 – URL: http://www.aiportal.ru/articles/neural-networks/back-propagation.html (дата обращения: 2.06.2022). – Режим доступа : для всех пользователей. – Текст : электронный.

3. Haykin, Simon Neural networks and learning machines / Simon Haykin.— 3rd ed. p. cm., 2008. -905 c: - Текст : непосредственный

4. Riedmiller M. Advanced Supervised Learning in Multi-layer Perceptrons - From Backpropagation to Adaptive Learning Algorithms / Martin Riedmiller – FRG, Karlsruhe : University of Karlsruhe, 1994. – 10 c. – Текст : непосредственный