Нейронные сети

В общем есть куча материала на данную тему, просто на сколько актуальна данная тема, используется ли она в играх вооюще как система принятия решения или всётаки современных можностей пока маловато чтобы в полной мере реализовать задумку, тк алгоритмика нейронных сетей идет уже с прошлого века, а резултат только распознавание образов и то х.з. FineReader и тот лажается иногда Biggrin

Последняя правка: чт, 25/04/2013 - 15:39
Submitted by Relyer on

Комментарии

Ну это понятно, я не про элементы самообучения я именно про нейроные сети. сення приду домой выложу конкретнее доки )

Submitted by Relyer on
Ваще если хошь сделать самообучение, то есть простой и провереный способ на основе нейронных и семантических сетей.Хошь узнать конкретно, обращайся...Работает очень быстро...1-я версия была направлена на обучение понимать фразы и за 10 минут я ее научил различать по смыслу слова он, она, оно в предложениях... (10 минут не процессорного времени, а общения со мной потипу чата)2-я версия была сделана для управления ботами в игре Чокнутые дровосеки на gamedev.ru, но проект стопорнулся...Даже есть 3d редактор мозгов для ботов... Причем очень простой... Тогда каждый бот будет индивидуальным...При тесте на модели мира они вели себя хорошо, сначала тупили били друг друга, но потом стали класно вести себя...

При этом получился еще 1 плюс, когда в команду приходил новичок, который еще к примеру не воевал, то он ничерта не умел, а со временем обучался и становлися круче, кароче как в реальной жизни...

Надо обращайтесь...

P.S: учусь я на Искуственном Интеллекте Smile

Submitted by Denis on

Ну а поподробнее можешь расписать, Какая входящая инфа была у твоих ботов какая выходящая, ну и класс или структурку нейрона глянуть тоже былобы интересно.

ПЫСЫ гриш обращайся а кантактов никаких в профиль не выложил )

Submitted by Relyer on
Ищи меня в ИРЦ...bynets: * nick: _Denis_, Ъы

irc.freenode.org: nick: DenisKoronchik

к сожалению исходников не осталось... надо бут редактор... он есть надо тока плагин дописать или конвертилку в формат...если хош, то могу расписать принципы...

понравица или нет... тебе решать...

Submitted by Denis on
Ну одним из первых вопросов это вопрост о скорости обучения, я так понял он связан со случайностью, ну например сеть на 100 нейронов скоко обучать чтобы логика стала более менее жесткой )

Ну и второй вопрос это собсна производительность этой сетки, насколько сильно буит тормозить комп(это понятие такое относительное), с такойже приблезительно сеткой, если логику щитать приблизительно 15-20 раз в секунду. Ну и общую структуру нейрона в твойм понятии хотелось бы увидеть )

Submitted by Relyer on
;-) Насчет скорости не волнуйся... На pIII-450 16 ботов по 8 в команде бегали уж очень шустро... Логика очень проста... Учти, что это смесь нейронной сети и семантической сети... Общая идея такая...

У тебя есть 3 типа узлов (вершин графов или нейронов):

  • узлы действия
  • узлы условия
  • узлы состояния
В редакторе ты рисуешь все эти узлы давая им имена, например:
  • бежать, стоять, сидеть, атаковать
  • вижу противника, слышу противника, если сижу, если стою
  • сижу, стою, ...
Дальше ты связываешь их дугами, фактически эти дуги играют роль дендрит и аксонов...

Теперь у нас есть что-то на подобии модели человека, где наши узлы действия это нейроны, которые посылают сигналы мышцам, ...; узлы условия принимают логические решения, а узлы состояния принимают сигнал извне (тоесть коснулся чего-то, боль, ...)

Вот следующая стадия самая интересная на этой стадии надо определится что делать с сетью... Есть 4 способа работы с ней и укаждого способа можно придумать сотни модификаций... Для того, чтобы сеть могла обучаться нужно изменять ее структуру.

Способ 1.

Самый простой из всех способов. Заключается в том, что физически структура не меняется, меняется лишь вес дуг между узлами... Например действие бота принесло пользу, тогда все дуги входящие в узел действия увеличивают свой вес...Тут куча модификаций как это все считать... Надо просто экспереминтировать...

Причем не обязательно увеличивать только вес дуг входящих в узел упешно выполненого действия, также можно и нужно это делать и для других дуг..(сдесь смысл в том, чтобы усилить пути прохождения сигнала, чтобы в следующий раз (в похожей ситуации) он скорее всего прошол именно этим путем)... Также в случае неудачного действия вес можно уменьшать.

Способ 2.

В этом способе количество узлов не меняется. Смысл его заключается в том, что между узлами достраиваются новые дуги. При этом его можно скомпоновать с первым способом для большего эффекта.

Способ 3.

Здесь надстроцка над первыми двумя способами ко всему прочему можно достраивать новые узлы, что сделает сеть больше размером, но гораздо умнее. При этом новые узлы могут быть одного из 3-х типов. Тоесть на лету добавлять боту новые возможности.

Например он не знал, что значит атаковать и допустим узнал... тогда мы добавили ему этот узел действия.. а дальше он начнет обучаться и со временем использовать его...

Способ 4.

Это когда на старте есть только узлы, но они связаны по минимуму... и в процессе сеть начинает строится... самый сложный, но самый эффективный способ реализации...

Боты даже при первом способе ведут себя иногда даже "гениально"...Что касается скорости, то она приемлимая... тут все зависит от количества связей в большей степени...

Гибкость модели высокая... Ибо вы написали один раз ядро, которое работает с сетью (проводит по ней сигналы) и забыли... А дальше вы лишь дописываете классы узлов и они сразу готовы к использованию...

Буду дома... выложу скрины сети в редакторе для Чокнутых дровосеков...Тут я описал лишь общие принципы, и разделил способы лишь условно...Так-что не прирекайтесь, если верите в эту чухню, то могу помочь, если что-то интересует...

Если нет, то удачи... пишите скрипты с рандомной или жостко прописаной логикой... Bye

P.S: да и кстати, случайности здесь не больше чем в реальной жизни Biggrin

Submitted by Denis on

А ну и ешо вопрос по поводу, логики понижения или повышения Веса узла, как это далать, нада же бить на какието итерации чтобы обучение было более эффективно..., в общем это тоже интересный вопрос Smile

Submitted by Relyer on

Еще очень интересный вопрос - нужно ли реализовать эффект забывания - типа если долго не юзается какая-то последовательность действий то веса на них уменьшаются. И как это лучше всего сделать.

Во первых, жизнь жизнью, а в CPU есть понятие переполнение, и даже если на веса использовать long то он тоже имеет свои границы Smile Или просто время от времени проводить как нибудь нормирование весов.

Во вторых, забывание оно естествено для природы, возможно поведение такой системы будет выглядеть более правдоподобно.

Submitted by Victor on

тут вам предоставляется полная гибкость, если хочешь сделать ээфект забывания, то можешь уменьшать вес ссвязей на каждой итерации потиху, вот тебе и проблема переполнения отпадет...

что касается проблемы переполнения, если мы возьмем float,то мы вес можем увеличивать и уменьшать по 0.0000001 к примеру...

ведь в итоге нас интересует лишь сумирующий результат на узле действия...

если флоат медленно, то можно и инт, только нормировать...искать минимальный и отнимать его от всех к примеру...

и выполнять нормирование по надобности...

P.S.: Вижу заинтересовало))) или нет?

Submitted by Denis on

Сама по себе тема довольно интересна.

Погуглив нашел пару интересных статей:

Дмитрий Шуклин о развитии моделей семантических нейронных сетей (там интересны обсуждения статьи) и Лекции по теории и приложениям искусственных нейронных сетей.

Интересно, есть ли какие-нибудь крупные игровые проекты в которых использующие нейронные сети.

Submitted by Victor on

врядли ибо по своей сути чистые нейронные сети уж много времени берут на обработку...

кстати вот обещаный скрин

[img_assist|nid=166|title=вот оно... разум дровосека|desc=|link=popup|align=left|width=100|height=84]

А вообще у меня стопорнулся проект мой... Точной модели мозга человека...Суть его в том, что реализуем нейронную сеть причем нейрон точная копия биологического (максимально приближенная модель)

после чего создаю на базе них нейронную сеть огромную (мозг), часть эмулирующую слух, зрение и речь и запускаю.. потом планирую добавить руку (мышь) и дать управление...

Если хотите можно собраться в команду, кому интересно...

Submitted by Denis on

Цвет обозначает область входа/выхода я так понял, и сеть одноранговая, а есть примеры поведения, тоесть собсна проект где эта сетка пашет ?

Submitted by Relyer on

Был написан на С++ в Builder C++ 6, но к сожалению утерян после гибели веника Sad

Кстати пример простой... Можно сделать и сложнее все зависит от фантазии... И желания работать Wink

Submitted by Denis on

интересная тема, очень хочется увидеть упомянутый автором редактор. Надеюсь он ещё посещает блог.

Submitted by alexneurus on

Это был обынчый редактор графов, просто сделал выходной формат для своих нужд. Вот его сриншот:

Если надо могу выслать исходники, написан на winapi в 2005-2006 годах (мой первый проект на GL). С тех пор я ничего с этим больше не делал.

Сделал недавно небольшой тестовый проект на qt, для симуляции мозга (максимально приблеженной модели к биологической), но так и не закончил. Видео здесь:

http://www.youtube.com/watch?v=0EYPbK3WhZI

А здесь подробнее почитать про это: http://www.gamedev.ru/code/forum/?id=152176&page=2#m19

Submitted by Denis on

я очень заинтересовался проектом с ботами (те что в двух командах по 8 юнитов сражались). недавно задался вопросом о ИИ ботов ( в частности для ARMA 2). Сейчас только теоретикой занимаюсь, в программировании только аппаратные модели начал понимать. Буду рад любой помощи, постараюсь через месяц второй выложить свои размышления здесь, сейчас их даже на бумаге толком нет.
Большой спасибо за скорый ответ
+++

если интересно, то в ARMA свободный редактор, и язык скриптовый. Боты вроде бы обладают комп зрением - т.е. они различают картинку. Сейчас любители создали несколько неплохих модов поведения, и боты иногда преподносят сюрпризы.

Submitted by alexneurus on

На самом деле применять нейронные сети очень сложно и накладно. Был у меня эксперимент, в котором я написал большой теннис (модель) на java, и там было два алгоритма управления игроками (боты).

Первый обычная state машина (куча условий и рандомов), а второй - нейронная сеть, которая обучалась с помощью генетического алгоритма. Реализовал в нейронной сети лишь обучение точному удару, за первые два часа обучения точность получилась ~7%, оставил на ночь, а утром через 12 часов обучения тосность составила 12-13%. Как не пытался улучшить, никак не удавалось. Про самообучение такого ИИ даже имечтать не приходится. Уж очень ресурсов много надо.

Submitted by Denis on

стейт-машины для "ИИ" пока что лучшее, что можно использовать без нагрузки большой на проц, хотя слышал, что для шашек нейросеть даёт не плохой результат.

нейросети и ГА удобно учить используя множество пользователей, как в "АМЁБЕ", но там я так понял тоже не далеко ушли.

Сейчас собираю информацию по алгоритму обучения, основанном на действиях игрока. Для упрощения буду использовать сенсорную систему на трёх датчиках, двух бамперныи инфракрасных, и одном тепловом датчике движения. Реализую на платформе Мк ATMEGA. Хотелось бы конечно виртуальную модель, но знаний в делфике вообще нет, как и в других средах.

Submitted by alexneurus on

Поделюсь небольшим опытом в этом направлении, мот кому будет полезно.
Если немного ковырять это направление то получится следующая картинка: нейрологику нужно бить на блоки с универсальным интерфейсом. Нейроны 3х типов - сенсоры -> блоки принятия решения -> актёры.

  • 1е заблуждение что  нейрон - элементарная операция, на практике это система принимающая и отдающая  различные сигналы, со внутренней памятью. Тоесть надо подходить к нейрону как некоторой практической еденице, а не математической. (для понимания - очень близоко общения компов по протоколу UDP со своими потерями сигналов, TTL  и.т.д.)
  • 2е универсальность - забыть на этапе проектирования, конструктора не получится, нужно писать чётко, максимум передачу сигналов оформить и работу с очередями.

После того как логика сложится из нейронов и вас она будет удовлетворять, обязательно продумать возможность описания нейронных блоков простыми функциями, нейрологика обладает большой избыточностью, для нас не приемлемо, не один миллион ядер на проце Smile

А ну и самое главное, не пытайтесь сэмулировать клетку, если природа обучает организм столько времени, то поверте вам нужно не меньше :), это к тому, что если логика поведения известна, опишите её блоком с конкретной логикой + немного рандома (зачем обучать то, что можно описать языком программирования, и логика поведения нейроблока не будет отличатся)

 

Последняя правка: чт, 25/04/2013 - 15:19
Submitted by Relyer on

GameDev.by