Нейро-автоматное управление. Введение Искусственный разум – одна из наиболее интересных теоретических и прикладных областей в информатике. Существует широкий спектр приемов и подходов для создания элементов искусственного интеллекта в прикладных программах и управляющих системах реального времени. Наиболее активное развитие получили нейронные сети[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