Нейроавтоматное управление

advertisement
Нейро-автоматное управление.
Введение
Искусственный разум – одна из наиболее интересных теоретических и прикладных
областей в информатике. Существует широкий спектр приемов и подходов для создания
элементов искусственного интеллекта в прикладных программах и управляющих
системах реального времени.
Наиболее активное развитие получили нейронные сети[1] и генетические алгоритмы.
Особенно стоит отметить нейронные сети, особенностью которых является ассоциативная
память и возможное самообучение. Но их применение сильно зависит от предметной
области, и они выступают в роли специальных объектов, задача взаимодействия с
которыми возлагается на дополнительные средства и компоненты программы.
В то же время существует парадигма автоматного программирования [2], которая
позволяет формализовать логику программы, выделить состояния и определить
взаимодействие компонентов с помощью переходов. В данной работе описывается
вариант совместного использования автоматной парадигмы и нейронных сетей для
реализации неопределенной логики[3].
1. Автоматы и программы разумной деятельности
Автоматное программирование используется для реализации логики работы программы.
Вся логика работы представляется в виде набора состояний, групп и переходов между
ними. Таким образом, получая внешнее воздействие, автомат обрабатывает его, и
выполняются действия или вычисления в зависимости от структуры автомата. Пример
автоматной программы, реализующей регистрацию пользователя в системе, представлен
на рисунке 1.
Рис. 1. Автомат регистрации пользователей.
Автоматная парадигма включает в себя методику составления спецификации и описания
разработанных автоматов, что делает ее удобной для разработки сложных систем.
Однако вся логика работы автомата зависит от внешних воздействий, заданных переходов
и граничных условий на переходах. Тем самым автоматная программа реализует
1
определенную логику, которая заранее определена программистом на момент создания
программы.
С другой стороны, размышление и принятие решения человеком – это тоже процесс,
который имеет определенный путь развития. Принятие решения производится,
основываясь не только на внешних событиях, но и на оценке различных факторов. Часто
невозможно заранее просчитать всевозможные комбинации факторов и четко определить
зависимость принимаемого решения от них.
Для решения подобных задач предлагаются М-автоматы [4]. Идея данных автоматов
заключается в том, что принятие решения происходит по определенному пути
размышления. Каждый участок такого пути выделяется в отдельное интеллектуальное
состояние, которое оценивает определенный фактор и влияет на процесс размышления.
Каждое состояние в М-автомате обладаем своими свойствами, присущими
определенному чувству или шагу в размышлении. Из каждого состояния М-автомата
есть переходы в некоторые другие состояния. Эти переходы задаются программистом на
этапе проектирования модуля принятия решения на основе М-автомата.
В работе [4] описываются возможные методы для управления процессом принятия
решения в М-автоматах. Так же возможны различные варианты реализации таких
состояний. Можно использовать алгоритмы, управляемые задаваемыми параметрами,
логические выражения и другие способы.
Отдельное внимание стоит уделить возможности использования нейронных сетей для
реализации этих состояний. М-автомат в этом случае будет выступать как взаимосвязь
небольших нейронных сетей, каждая из которых будет отвечать за оценку определенных
параметров и факторов. Задавая структуру М-автомата, программист определяет процесс
размышления и значимость различных факторов. Достоинствами подобного подхода
являются:

возможность использования ассоциативной памяти в принятии решения.

упрощение процесса обучения – быстрее обучить 5 небольших сетей, отвечающих
за различные аспекты, чем 1, которая будет оценивать все факторы.
В тоже время М-автоматы требуют создания отдельных контролирующих компонентов в
программе и не предназначены для выполнения дополнительных действий. Такие
автоматы выступают в роли специально выделенных блоков принятия решений.
Решением указанных выше недостатков может являться расширение состояний,
используемых в автоматной парадигме.
2. Использование нейронных сетей в состояниях автомата.
Для реализации описанного выше подхода предлагается расширить набор элементов
автоматных программ особым состоянием с нейронной сетью внутри состояния. Причем
от программиста не требуется самостоятельно создавать нейронную сеть и
организовывать работу с ней. В данном случае нейронная сеть является неотъемлемой
частью состояния.
Каждое состояние может выполнять действия на входе в него. Поэтому работа с
нейронной сетью может осуществляться при входе в состояние. Таким образом, если при
определенном внешнем воздействии автомат переходит в состояние с нейронной сетью,
то работа с ней будет автоматически выполнена. Результат работы нейронной сети
предлагается использовать в качестве источника нового события для автомата.
2
Применяя предложенный подход, появляется возможность моделирования процесса
размышления в рамках автоматной программы. На рисунке 2 представлена схема
автомата, использующего расширенные состояния.
No
Waiting
Think!
Ready?
No
Enough power?
Yes
Yes
pit there?
Jump
Step
Jump
Step
Рис. 2. Автомат с расширенными состояниями
На рисунке 2 представлен автомат для управления роботом, который может шагнуть или
прыгнуть вперед. Робот имеет свое состояния, которое сохраняется в контексте автомата.
Этот автомат использует расширенные состояния.
Он состоит из нескольких простых состояний:

Waiting – ожидание команды.

Jump – прыгнуть вперед.

Step – шагнуть вперед.
Следующие состояния содержат в себе нейронные сети:

Ready? – в зависимости от контекста автомата определяет, готов ли робот к
действиям.

Enough power? – определяет, достаточно ли у робота энергии для выполнения
срочных действий.

Pit there? – определяет, есть ли перед роботом яма.
На рисунке видно несколько переходы, соединяющие расширенные состояния между
собой и с другими состояниями. Переходы, начинающиеся в расширенных состояниях,
срабатывают автоматически без внешнего воздействия. Так, автомат, при нахождении в
состоянии Waiting получает событие Think, после чего начинается размышление. После
работы расширенных состояний автомат окажется в одном из простых состояний. Так,
получив лишь одно внешнее воздействие, автомат выполнит несколько переходов,
задействованных в размышлении, и перейдет в другое состояние. В какое именно
состояние перейдет автомат – зависит от того, какое решение будет принято
задействованными расширенными состояниями.
3. Реализация идеи.
Для реализации описанной в предыдущем разделе идеи используется специальная
автоматная библиотека, описанная в работе [5]. Достоинствами данной автоматной
3
библиотеки является простота создания автоматов, используя объектно-ориентированный
язык программирования Java. Одновременно с этим библиотека предоставляет средства
для представления разработанных автоматов в виде графической модели.
Для того, чтобы создать состояние с нейронной сетью разработан отдельный класс NState,
который использует библиотеку SNeuro [6], предоставляющую базовые интерфейсы и ряд
реализованных нейронных сетей.
Для создания экземпляра состояния с нейронной сетью необходимо передать в
конструктор дополнительные параметры: размерности входного и выходного векторов
для нейронной сети, события, которые будут использованы при обработке результатов
вычисления и базовый набор данных для обучения сети. Нейронная сеть будет создана и
обучена при создании этого состояния.
Каждое состояние автомата может выполнять действие на входе в него. Это действие
используется состоянием NState для взаимодействия с сетью и получения результатов.
Входные параметры считываются из контекста автомата и передаются на вход в
нейронную сеть для получения результатов.
Следующим важным моментом реализации является возможность состояния NState
подавать новое входное воздействие на автомат в целом. Благодаря этому блок принятия
решений, реализованный с помощью таких состояний будет самостоятельно размышлять,
переходя от одного состояния NState к другому без внешнего воздействия. Более
подробно этот механизм описан в следующем разделе на примере.
Еще одним важным моментом является то, что нейронные сети в состояниях могут быть
откорректированы в процесс работы автомата. При обработке результатов вычислений
нейронной сети состояние NState сохраняет себя, входные данные и результат в памяти
размышлений автомата. Эта память расширяет возможности автомата. Используя метод
correction реализованный в базовом классе DSL, можно провести коррекцию нейронных
сетей всех состояний, которые участвовали в последнем принятии решения. Данная
особенность предоставляет дополнительный инструмент для совершенствования
автомата.
Ниже представлен код, который создает экземпляр класса NState в автомате.
public
String
String
public
State wait = new State("Wait");
[] goodBadEvents = {"GOOD", "BAD"};
[] enoughEvents = {"YES", "NO"};
NState goodBad = new NState("Good_Bad", 2, goodBadEvents ,
HungryTrainData.goodBad());
public NState enough = new NState("Enough?", 2,enoughEvents,
HungryTrainData.enough());
public Transition think = new Transition("think", "THINK", wait,
goodBad);
На представленном коде создаются два состояния с нейронной сетью, обычное состояние
и переход от состояния wait, который запускает механизм размышления в автомате.
4. Использование расширенных состояний.
В качестве примера разработан простой автомат для управления ежиком, который ходит
вперед, затрачивая на шаг 5 единиц энергии, и находит разные припасы. Припасы могут
быть ядовиты (-40 энергии), а могут быть полезны (10, 20, 40 энергии). Кроме того, когда
ежик «наедается» (>100 энергии), он не хочет кушать. Структура автомата, полученная
автоматически, представлена на рисунке 3.
4
Рис. 3. Структура автомата управления ежиком
Автомат включает в себя элементы:

Wait – ежик ждет команды.

Good_Bad – определение, впереди яд или полезный припас (расширенное
состояние).

Enough? – наелся ежик или нет (расширенное состояние).

Do something – группа, содержит в себе состояния Skip (пропустить) и Eating
(скушать припас).
Так же на рисунке 3 показаны переходы между состояниями и расширенными
состояниями.
Расширенные состояния используют однослойные нейронные сети, состоящие из слоя
Кохонена [7], и обучаемые при создании состояния.
Ниже представлен фрагмент работы логики ежика (лог работы поделен на 5 столбцов):
Weight is 30.0
Food: (40.0)
BAD
Eating (40.0)
Weight is 115.0
Food: (10.0)
THINK
SKIP
STEP
Food: (20.0)
THINK
GOOD
STEP
Weight is 125.0
THINK
GOOD
YES
Weight is 75.0
Food: (-40.0)
GOOD
YES
Eating (40.0)
Food: (20.0)
THINK
NO
Eating (10.0)
STEP
THINK
BAD
SKIP
STEP
Weight is 85.0
GOOD
SKIP
STEP
Weight is 35.0
Food: (-40.0)
YES
STEP
Weight is 110.0
Food: (20.0)
THINK
Eating (20.0)
Weight is 120.0
Result is 110.0
THINK
BAD
STEP
Food: (10.0)
GOOD
SKIP
Weight is 90.0
THINK
YES
STEP
Food: (40.0)
GOOD
Eating (20.0)
Weight is 80.0
THINK
NO
STEP
Food: (-40.0)
GOOD
SKIP
Weight is 50.0
THINK
YES
STEP
5
Сначала обновляется контекст автомата, добавляется новый припас для обработки. Далее
автомату подается сигнал Think и автомат начинает думать, в результате он попадает в
одно из состояний группы Do something. Стоит отметить, что автомату не подавались
события, необходимые для переходов между расширенными состояниями
Заключение
Описанный подход позволяет реализовать элементы искусственного интеллекта с
использованием нейронных сетей в автоматном программировании. Преимуществами
нейро-автоматного управления является то, что используются небольшие сети, каждая из
которых отвечает за определенное решение, а не большая сеть, которая принимает общее
решение. Несколько простых сетей проще обучить и они быстрее в работе, так как
некоторые участки размышления могут быть не задействованы, если решение развивается
по другому пути.
Данная работа дает возможность для развития методов обучения автоматов,
использующих расширенные состояния и дальнейшего развития данной идеи.
Список литературы
1. http://ru.wikipedia.org/wiki/Нейросеть
2. Поликарпова Н. И., Шалыто А. А. Автоматное программирование. СПб.: Питер, 2009.
http://is.ifmo.ru/books/_book.pdf
3. Штовба С.Д. "Введение в теорию нечетких множеств и нечеткую логику". Сообщество
пользователей Matlab и Simulink. Режим доступа: http//matlab.exponenta.ru, свободный. – Заглавие
с экрана. – Яз. рус.
4. Н.М.Амосов, А.М.Касаткин, Л.М.Касаткина, С.А.Талаев Автоматы и разумное поведение.
Опыт моделирования. Под ред. Н.М.Амосова. -Киев: "Наукова думка", 1973.
5. Yuri Gubin, Kirill Timofeev, Anatoly Shalyto. «Creation of Automaton Classes from Graphical
Models and Automatic Solution for Inverse Problem», Moscow, SYRCoSE 2009.
6. https://java-neuro.googlecode.com/svn/trunk - библиотека для создания нейросетей.
7. http://ru.wikipedia.org/wiki/Сеть_Кохонена
6
Download