C# - Моделирование «разумной» жизни на базе нейронных сетей
Данная статья посвящена исследованию возможностей нейронных сетей при их использовании в качестве основы для индивидуального разума моделируемого объекта.
Цель: показать, способна ли нейронная сеть (или ее данная реализация) воспринимать "окружающий" мир, самостоятельно обучаться и на основе собственного опыта принимать решения, которые можно считать относительно разумными.
Задачи:
Цель: показать, способна ли нейронная сеть (или ее данная реализация) воспринимать "окружающий" мир, самостоятельно обучаться и на основе собственного опыта принимать решения, которые можно считать относительно разумными.
- Описать и построить информационную модель.
- Реализовать модель и объекты на языке программирования
- Реализовать основные свойства, присущие разумным созданиям.
- Реализовать мыслительный аппарат и механизмы "восприятия" объектом модели окружающего мира
- Реализовать механизм взаимодействия объекта модели с окружающим миром и другими объектами
Для описания информационной модели нужно понять какие основные характеристики объекта мы хотим увидеть, в качестве "основных" характеристик разумного существа я выделил следующие:
- Наличие механизмов восприятия окружающего мира
- Наличие механизма взаимодействия с окружающим миром
- Наличие памяти,
- Наличие мыслительных систем (какие бы они ни были),
- Возможность принимать решения о взаимодействии с окружающим миром на основе информации, которая воспринимается и опыта
Наличие памяти возможно реализовать следующим образом: объекту будет сохранять информацию о данных с сенсоров и текущих "ускорениях" в движителях, таким образом имея массив из подобной информации можно составить полную информацию о том, что происходило с объектом.
Под мыслительной системой будет подразумеваться нейронная сеть в той или иной конфигурации.
Возможность принимать решения обусловлена архитектурой нейронной сети, опыт и воспринимаемая информация предоставляется памятью и сенсорами.
Для того, чтобы решения имели какой либо смысл примем "стремления" для объектов:
1. "Съесть" другой объект (в нашем случае объект будет "съеден" другим в случае, если приблизится на достаточное расстояние и будет "достаточно силен")
2. "Не быть съеденным", в нашем случае стараться не позволить другим объектам приблизиться к себе, чтобы не дать им возможности себя "съесть"
Для принятия решения о "силе" ближайшего объекта примем еще 1 канал информации, который будет сообщать "сильнее ли ближайший объект".
Таким образом описанная модель объекта удовлетворяет всем поставленным требованиям.
2. Реализация модели
Для реализации модели будет использоваться язык программирования C#
В качестве реализации нейронной сети будет применяться Encog Machine Learning Framework. Он очень гибкий и быстрый, не говоря уже о простоте использования.
Код модели достаточно простой, это не единственная возможная его реализация, данную модель может дополнить и изменить каждый.
Функционирование объекта в данной реализации модели построено вокруг функции DoLive(), в которой поочередно происходят следующие жизненные этапы объекта:
RefreshSense - обновление данных сенсоров (огляделся вокруг)
Move - сделал шаг (переместился в пространстве)
SaveToMemory - обновил память, запомнил текущую обстановку
Train - "обучился", проанализировал память
Compute - принял решение о положении движителей на основе опыта и информации о ближайшем объекте
Output - задал параметры движителей на основе принятого решения
Таким образом протекает каждый жизненный цикл всех объектов на протяжении всего их существования.
3. Проверка модели
Для просмотра результата моделирования потребуется каким либо образом извлечь информацию о текущем состоянии модели на каждом ее этапе, т.к. модель динамическая наиболее эффективным будет использование видеозаписи. Для реализации вывода в видео файл воспользуемся библиотекой AForge.Video.FFMPEG.
Пример 1. Без информации о силе ближайшего объекта (нет стремления избежать гибели)
Пример 2. Высокая "инертность" мышления (реже останавливается поразмышлять о окружающем его мире и проанализировать опыт)
Пример 3. Конечный вариант реализации
Пример 3. Конечный вариант реализации
4. Выводы
Объектам подавалось минимум информации, не было никаких правил относительно движения или управления движителями, только информация об окружающем пространстве, объектах и обратная связь о своем состоянии. Этой информации оказалось достаточно, чтобы объекты "научились" самостоятельно находить и "поедать" "слабых" и "убегать" от "сильных.
В целом нейронная сеть может использоваться для моделирования действий, достаточно разумных.
Применение нейронных сетей в моделировании может иметь и прикладное значение, например в управлении игровыми объектами, достаточно описать "возможности", далее объекты будут "жить" своей жизнью, используя доступные возможности для своей выгоды. Принцип показанный в статье может найти применение в робототехнике, достаточно дать программе доступ к сенсорным системам, системам управления и поставить цель, благодаря памяти и нейронной сети устройство может самостоятельно "научиться" управлять доступными системами так, чтобы поставленная цель была достигнута.
Все материалы, исходные коды бесплатны и доступны всем желающим.
Надеюсь данная статья поможет тем, кто хочет научиться использовать нейронные сети.
Комментарии