[paper] Neuro-Automata based controlling

advertisement
Neuro-Automata Based Controlling.
Yuri Gubin
DataArt
ygubin@dataart.com
Anatoly Shalyto
SPbSU IFMO
shalyto@mail.ifmo.ru
Abstract
Artificial intelligence - one of the most interesting theoretical and applied areas of computer science. There
is a wide range of techniques and approaches for creation of artificial intelligence in the applications and realtime control systems.
In this paper, it is proposing a realization of neuro-automata based controlling based on neural networks
and automaton paradigm. And considering an example of application of this idea.
Keywords: Automata based programming, neural networks
Нейро-Автоматное Управление.
Юрий Губин
DataArt
ygubin@dataart.com
Анатолий Шалыто
СПбГУ ИТМО
shalyto@mail.ifmo.ru
Abstract
Искусственный разум – одна из наиболее интересных теоретических и прикладных областей в
информатике. Существует широкий спектр приемов и подходов для создания элементов
искусственного интеллекта в прикладных программах и управляющих системах реального времени.
В данной работе предлагается реализация нейро-автоматного управления, основанного на
использовании нейронных сетей и автоматной парадигмы программирования. И рассмотрен пример
применения этой идеи.
Keywords: Автоматное программирование, нейронные сети
1. Введение
Искусственный разум – одна из наиболее
интересных
теоретических
и
прикладных
областей в информатике. Существует широкий
спектр приемов и подходов для создания
элементов
искусственного
интеллекта
в
прикладных
программах
и
управляющих
системах реального времени.
Наиболее активное развитие получили
нейронные сети[1] и генетические алгоритмы.
Особенно стоит отметить нейронные сети,
особенностью которых является ассоциативная
память и возможное самообучение. Но их
применение сильно зависит от предметной
области, и они выступают в роли специальных
объектов, задача взаимодействия с которыми
возлагается на дополнительные средства и
компоненты программы.
В то же время существует парадигма
автоматного программирования [2], которая
позволяет формализовать логику программы,
выделить
состояния
и
определить
взаимодействие
компонентов
с
помощью
переходов. В данной работе описывается вариант
совместного
использования
автоматной
парадигмы и нейронных сетей для реализации
неопределенной логики[3].
2. Автоматы и программы разумной
деятельности
Автоматное программирование используется
для реализации логики работы программы. Вся
логика работы представляется в виде набора
состояний, групп и переходов между ними.
Таким образом, получая внешнее воздействие,
автомат обрабатывает его, и выполняются
действия или вычисления в зависимости от
структуры
автомата.
Пример
автоматной
программы,
реализующей
регистрацию
пользователя в системе, представлен на рисунке
1.
Рис. 1. Автомат регистрации
пользователей.
Автоматная парадигма включает в себя
методику составления спецификации и описания
разработанных автоматов, что делает ее удобной
для разработки сложных систем.
Однако вся логика работы автомата зависит
от внешних воздействий, заданных переходов и
граничных условий на переходах. Тем самым
автоматная программа реализует определенную
логику,
которая
заранее
определена
программистом на момент создания программы.
С другой стороны, размышление и принятие
решения человеком – это тоже процесс, который
имеет определенный путь развития. Принятие
решения производится, основываясь не только на
внешних событиях, но и на оценке различных
факторов. Часто невозможно заранее просчитать
всевозможные комбинации факторов и четко
определить зависимость принимаемого решения
от них.
Для решения подобных задач предлагаются
М-автоматы [4]. Идея данных автоматов
заключается в том, что принятие решения
происходит
по
определенному
пути
размышления. Каждый участок такого пути
выделяется в отдельное интеллектуальное
состояние, которое оценивает определенный
фактор и влияет на процесс размышления.
Каждое состояние в М-автомате обладаем
своими свойствами, присущими определенному
чувству или шагу в размышлении. Из каждого
состояния М-автомата есть переходы в
некоторые другие состояния. Эти переходы
задаются
программистом
на
этапе
проектирования модуля принятия решения на
основе М-автомата.
В работе [4] описываются возможные методы
для управления процессом принятия решения в
М-автоматах. Так же возможны различные
варианты реализации таких состояний. Можно
использовать
алгоритмы,
управляемые
задаваемыми
параметрами,
логические
выражения и другие способы.
Отдельное
внимание
стоит
уделить
возможности использования нейронных сетей для
реализации этих состояний. М-автомат в этом
случае будет выступать как взаимосвязь
небольших нейронных сетей, каждая из которых
будет отвечать за оценку определенных
параметров и факторов. Задавая структуру Мавтомата, программист определяет процесс
размышления и значимость различных факторов.
Достоинствами подобного подхода являются:
возможность использования ассоциативной
памяти в принятии решения.
упрощение процесса обучения – быстрее
обучить 5 небольших сетей, отвечающих за
различные аспекты, чем 1, которая будет
оценивать все факторы.
В тоже время М-автоматы требуют
создания
отдельных
контролирующих
компонентов в программе и не предназначены
для выполнения дополнительных действий. Такие
автоматы выступают в роли специально
выделенных блоков принятия решений.
Решением указанных выше недостатков
может
являться
расширение
состояний,
используемых в автоматной парадигме.
3. Использование нейронных сетей в
состояниях автомата.
Для реализации описанного выше подхода
предлагается расширить
набор элементов
автоматных программ особым состоянием с
нейронной сетью внутри состояния. Причем от
программиста не требуется самостоятельно
создавать нейронную сеть и организовывать
работу с ней. В данном случае нейронная сеть
является неотъемлемой частью состояния.
Каждое состояние может выполнять действия
на входе в него. Поэтому работа с нейронной
сетью может осуществляться при входе в
состояние.
Таким
образом,
если
при
определенном внешнем воздействии автомат
переходит в состояние с нейронной сетью, то
работа с ней будет автоматически выполнена.
Результат работы нейронной сети предлагается
использовать в качестве источника нового
события для автомата.
Применяя предложенный подход, появляется
возможность
моделирования
процесса
размышления в рамках автоматной программы.
На рисунке 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, после
чего начинается размышление. После работы
расширенных состояний автомат окажется в
одном из простых состояний. Так, получив лишь
одно внешнее воздействие, автомат выполнит
несколько
переходов,
задействованных
в
размышлении, и перейдет в другое состояние. В
какое именно состояние перейдет автомат –
зависит от того, какое решение будет принято
задействованными расширенными состояниями.
4. Реализация идеи.
Для реализации описанной в предыдущем
разделе
идеи
используется
специальная
автоматная библиотека, описанная в работе [5].
Достоинствами данной автоматной библиотеки
является простота создания автоматов, используя
объектно-ориентированный
язык
программирования Java. Одновременно с этим
библиотека
предоставляет
средства
для
представления разработанных автоматов в виде
графической модели.
Для того, чтобы создать состояние с
нейронной сетью разработан отдельный класс
NState, который использует библиотеку SNeuro
[6], предоставляющую базовые интерфейсы и ряд
реализованных нейронных сетей.
Для создания экземпляра состояния с
нейронной сетью необходимо передать в
конструктор
дополнительные
параметры:
размерности входного и выходного векторов для
нейронной сети, события, которые будут
использованы
при
обработке
результатов
вычисления и базовый набор данных для
обучения сети. Нейронная сеть будет создана и
обучена при создании этого состояния.
Каждое состояние автомата может выполнять
действие на входе в него. Это действие
используется
состоянием
NState
для
взаимодействия с сетью и получения результатов.
Входные параметры считываются из контекста
автомата и передаются на вход в нейронную сеть
для получения результатов.
Следующим важным моментом реализации
является возможность состояния NState подавать
новое входное воздействие на автомат в целом.
Благодаря этому блок принятия решений,
реализованный с помощью таких состояний
будет самостоятельно размышлять, переходя от
одного состояния NState к другому без внешнего
воздействия. Более подробно этот механизм
описан в следующем разделе на примере.
Еще одним важным моментом является то,
что нейронные сети в состояниях могут быть
откорректированы в процесс работы автомата.
При
обработке
результатов
вычислений
нейронной сети состояние NState сохраняет себя,
входные данные и результат в памяти
размышлений автомата. Эта память расширяет
возможности
автомата.
Используя
метод
correction реализованный в базовом классе DSL,
можно провести коррекцию нейронных сетей
всех состояний, которые участвовали в
последнем
принятии
решения.
Данная
особенность предоставляет дополнительный
инструмент для совершенствования автомата.
Ниже представлен код, который создает
экземпляр класса NState в автомате.
public State wait = new
State("Wait");
String [] goodBadEvents =
{"GOOD", "BAD"};
String [] enoughEvents = {"YES",
"NO"};
public 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.
Расширенные
состояния
используют
однослойные нейронные сети, состоящие из слоя
Кохонена [7], и обучаемые при создании
состояния. Ниже представлен фрагмент работы
логики ежика (лог работы поделен на 3 столбца):
Food: (10.0)
THINK
GOOD
YES
Eating (10.0)
STEP
Weight is 35.0
Food: (20.0)
THINK
GOOD
YES
Eating (20.0)
STEP
Weight is 50.0
Food: (40.0)
THINK
GOOD
YES
Eating (40.0)
STEP
Weight is 85.0
Food: (-40.0)
THINK
BAD
SKIP
STEP
Weight is 80.0
Food: (10.0)
THINK
GOOD
NO
SKIP
STEP
Weight is 75.0
Food: (20.0)
THINK
GOOD
YES
Eating (20.0)
STEP
Weight is 90.0
Food: (40.0)
THINK
GOOD
YES
Eating (40.0)
STEP
Weight is 125.0
Food: (-40.0)
THINK
BAD
SKIP
STEP
Weight is 120.0
Food: (10.0)
THINK
GOOD
NO
SKIP
STEP
Weight is 115.0
Food: (20.0)
THINK
GOOD
NO
SKIP
STEP
Weight is 110.0
Result is 110.0
Сначала обновляется контекст автомата,
добавляется новый припас для обработки. Далее
автомату подается сигнал Think и автомат
начинает думать, в результате он попадает в одно
из состояний группы Do something. Стоит
отметить, что автомату не подавались события,
необходимые
для
переходов
между
расширенными состояниями
5. Заключение
Рис. 3. Структура автомата управления
ежиком
Автомат включает в себя элементы:
Wait – ежик ждет команды.
Good_Bad – определение, впереди яд или
полезный припас (расширенное состояние).
Enough? – наелся ежик или нет (расширенное
состояние).
Do something – группа, содержит в себе
состояния Skip (пропустить) и Eating (скушать
припас).
Так же на рисунке 3 показаны переходы
между
состояниями
и
расширенными
состояниями.
Описанный подход позволяет реализовать
элементы
искусственного
интеллекта
с
использованием нейронных сетей в автоматном
программировании. Преимуществами нейроавтоматного управления является то, что
используются небольшие сети, каждая из
которых отвечает за определенное решение, а не
большая сеть, которая принимает общее решение.
Несколько простых сетей проще обучить и они
быстрее в работе, так как некоторые участки
размышления могут быть не задействованы, если
решение развивается по другому пути.
Данная работа дает возможность для
развития
методов
обучения
автоматов,
использующих расширенные состояния и
дальнейшего развития данной идеи.
6. Список литературы
[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/Сеть_Кохонена
Download