Комментарии 13
Ничего не понятно.
спереди у нейросети выпускаются raycast лучи
Наверно имеется ввиду, "у агента управляемого нейросетью" ?
Какие сети? Пример архитектуры. Что подается на вход? Что получается на выходе? Как обучаются (должно же быть обратное распространение, кроме эволюционного скращивания, описаного в прошлой статье)?
Существа теперь могут общаться с ближайшими особями из своей популяции, язык ограничен 1000 токенами,
Какие токены? Откуда они взялись? Как генерируется речь, как распознается?
Спасибо!
1.У агента, надо было картинку прикрепить с описанием.(уже добавил)
2.Чистый NEAT с поддержкой RNN, в этом и смысл, что без градиентного спуска, он очень хорош, но нужно проверить и такую альтернативу, тем более я симулировал эволюцию. В этом и смысл, а главное - это рабоатет.
3.Со слухом вообще отдельная история - один из output нейронов, у него min - 0 и max - 1000, и еще один говорит о cIterator: 0, слушаем этого, -1 меняем на предыдущего в списке, 1 на следующего(разумеется с проверками на валидность), если кто-то из агентов находится рядом, то мы добавляем его в список. Также один из input отдан под слушание одного в списке.
4.Добавлю еще, почему не выбирал one-hot в статье.(тоже добавил)
У агента, надо было картинку прикрепить с описанием
ну а дальше? вот луч нащупал врага/растение/что там ещё. Это нужно подать в нейронку. В виде чего? Как быть если нащупываются несколько объектов? Это как-то подается куммулятивным итогом? Как вообще цикл устроен? У вас дискретный шаг по времени или под реалтайм? Что на выходе нейронки? Одно из возможных действий? Типа идти/собирать/атаковать? Как часто принимаются решения, если реалтайм?
слушаем этого
какого "этого"?
Это уже ближе к технической стороне вопроса, поэтому не описывал, а дал все исходники. Тем более я сейчас буду многое менять, так как улучшал алгоритм при написании переводчика
Каждый кадр Update() в Unity, ну считать ли это реалтаймом трудный вопрос, но это максимально близкое к нему.
Raycast самый классический. В самом коде был комментарий посвящен этому, я нумерую растение, агента, врага и т.д.. Да, это создает порядок, но не раздувает связи. NEAT даже за бонус на создание хотя бы одной связи ко всем input быстро сходиться в локальный оптимум, если их много. У нас около 40-50 лучей и для каждого отдельный нейрон для входа.
Выходов несколько - передвижение, атака, что-то говорить, сменить собеседника и т.д..
Про это говорил. Есть список тех, кто находится рядом из своего клана. cIterator(для него выделен отдельный output)) представляет что-то вроде каретки - сдвинуться вниз, остаться на месте, двинуться наверх. Нейросети заранее не знают всех своих собеседников, но должны знать количество. Если cIterator указывает на объект с индексом 2, то мы выход того агента отданный под говорение отправляем на наш input
не описывал, а дал все исходники
ну вы издеваетесь, если из уж текста статьи непонятна логика основного цикла, кто полезет в эти исходники? Лучше бы нарисовали блоксхему ну или хотя бы текстом в общих словах.
Каждый кадр Update() в Unity
Для логики же вроде есть FixedUpdate() ?
Raycast самый классический
Да никого не интересует этот райкаст. Я хочу знать в каком виде данные райкаста поступают в нейронку. Из того, что там написано дальше, я правильно понимаю, что в сетку идут идентификаторы увиденных объектов?
Итого. У нейронок 51 вход (в 50 подаются идентификторы увиденных каждым лучем объектов или 0, если ни с чем не пересеклось) и 1 вход для идентификатора фразы. Выходов по числу возможных действий + один выход для идентификатора кому говорить. Действие выбирается по тому, чей выход больше. Так?
С исходниками и описанием Вы правы, надо было расписать.
А здесь нет смысла в FixedUpdate() мы же сразу обрабатываем информацию, которую получили.
Идентификаторы, почему не one-hot или подобное - описал в статье в конце
Я могу корректировать размер raycastа, но в общем случае - количество лучей + bias нейрон + кому говорить и 4 выхода. Вместе это переменная initalNeurones.
Примеры диалогов еще хотелось бы, раз, как утверждается, "существа могут общаться, договариваться о нападениях, начинать войны." Как-то очень небрежно описано всё.
Интересная тема! Спасибо ) А почему не SharpNEAT или что-то типа того?
Так я же про это в самом начале писал:
Я думал, что найду какую-нибудь библиотеку с поддержкой RNN, в нашем случае это очень, очень важно, более того, такое требования встречается в большинстве задач. Без них нейросеть будет неспособна к обучению и развитию, сложному прогнозированию. Однако оказалось, что таких библиотек нет ни на Python, ни на C#, ни на С++, нигде! Говорят, что сложно отслеживать RNN состояния... Так что нужно написать свою и это получилось: у меня написано две библиотеки для NEAT, одна для экосистем и другая для перевода.
Я бы порекомендовал вам обратить внимание на такое понятие как Марковское одеяло.
Это будет полезно для тех, кто занимается агентскими системами или пытается сделать что то подобное.
Для тех кто не знаком, что такое Марковское одеяло и ли хочет лучше его понять, ниже неплохое видео объясняющее Марковское одеяло:
https://www.youtube.com/watch?v=RrqQ00TWSUE
И обратить внимание на FEP. Хотя у принципу свободной энергии Фристона много вопросов, но многие вещи из него можно почерпнуть.
Для ознакомления с Принципом свободной энергии Фристона:
https://www.youtube.com/watch?v=dcRC7ViIUHQ
Автор неплохо описал работу Фристона, другие различные лекции по FEP на русском языке мне показались более низкого качества.
В целом Марковское одеяло хорошо эмпирически себя зарекомендовало при описании различных биологических систем.
Я так понял, что агенты не понимают ни среду, ни самих себя. Поведение якобы эволюционирует, потому что появляется эмергентное свойство в виде войны, но это оптимальная стратегия поведения в краткосроке с учётом ограничения ресурсов. Если агенты не умеют обучаться на ошибках собственных прогнозов (коротких и длинных) поведения модели среды и себя, то все их действия это неизменное нахождение логического оптимума поведения без конкретной стратегии, т.е. это не осознанная моделью агента эволюция поведения. А может я просто тупой и не вижу, где тут работает prediction error и как она вшита в модель, тогда было бы интересно узнать.
Переводчик с NEAT аналогично ограничен: отсутствует минимизация surprise, потому что модель не получает сигналы о правильности своих предсказаний и fitness основан только на конечном результате, а без локальных ошибок обучение невозможно.

Стремимся к AGI: обучаем нейросети в экосистеме эволюционно с нуля