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/Сеть_Кохонена