Алгоритм прямой связи в NEAT (нейронная эволюция возрастающих топологий) - PullRequest
0 голосов
/ 08 апреля 2019

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

Может кто-нибудь объяснить, как это работает?

1 Ответ

1 голос
/ 23 апреля 2019

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

Вы можете найти ответ на странице пользователей NEAT: https://www.cs.ucf.edu/~kstanley/neat.html, где автор говорит:

Как активируются сети с произвольной топологией?

Функция активации, bool Network :: activ (), дает подробности.Реализация, конечно, значительно отличается от простой многоуровневой сети с прямой связью.Каждый узел добавляет активацию от всех входящих узлов из предыдущего временного шага.(Функция также обрабатывает специальное «задержанное по времени» соединение, но оно не используется текущей версией NEAT в каких-либо опубликованных нами экспериментах.) Другой способ понять это - понять, что активация не проходит весь путь отот входного слоя до выходного слоя за один шаг.За один шаг активация перемещается только от одного нейрона к другому.Поэтому для активации требуется несколько временных шагов, чтобы добраться от входов к выходам.Если вы думаете об этом, то именно так он работает в реальном мозге, где требуется время, чтобы сигнал, попавший в ваши глаза, попал в кору, потому что он проходит через несколько нейронных связей.

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

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

Дешевый и грязный способ сделать это - просто активировать n раз подряд, где n> 1, и надеяться, что не будет слишком много петель или длинных путей скрытых узлов.

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

Обратите внимание, что в некоторых случаях выходной сигнал не всегда стабилизируется.Кроме того, при проблемах с постоянным управлением не проверяйте стабилизацию, поскольку сеть никогда не «успокаивается», а постоянно реагирует на изменение среды.Обычно стабилизация используется в задачах классификации или в настольных играх.

...