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

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

Последняя правка: пн, 29/08/2011 - 22:10
Submitted by Relyer on

Комментарии

Нейронные сети очень плохо и медленно эмулируются на транзисторах. В играх же давно и повсеместно используются элементы самообучения. Взять хотя бы ботов того же Unreal Tournament.

Если не нравится FineReader, то можно попробовать силы в натаскивании http://code.google.com/p/tesseract-ocr/ на русский язык, как описано в совсем свеженьком http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract

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

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

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

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

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

Submitted by Denis on

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

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

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

irc.freenode.org: #Ogre3D nick: DenisKoronchik

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

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

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

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

Submitted by Relyer on
Wink Насчет скорости не волнуйся... На 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

GameDev.by