9

Я решил пойти с нейронной сетью, чтобы создать поведение для движка анимации, который у меня есть. Нейронная сеть принимает 3 вектора 3 и 1 угол Эйлера для каждой части тела, которую у меня есть. Первым вектором 3 является положение, второе - его скорость, а третья - его угловая скорость. Угол Эйлера - это то, во что вращается часть тела. и у меня 7 частей тела. Каждый из этих типов данных имеет 3 поплавка. 7 * 4 * 3 = 84, поэтому у меня 84 входа для моей нейронной сети. Выходы отображаются на мышцы персонажа. Они обеспечивают количество силы для применения к каждой мышце, и их 15.Размер нейронной сети для системы анимации

Я запускаю 15 сетей одновременно в течение 10 секунд, оценивая их пригодность, вычисляя наименьшее потребление энергии, имея наименьшее количество движений z и x, и если части тела находятся в правильном положении y по сравнению с остальными (hips.y> upperleg.y, upperleg.y> lowerleg.y и т. д.), а затем запускать их через генетический алгоритм. У меня была нейронная сеть из 168 нейронов на скрытый слой с 8 скрытыми слоями. Я пытаюсь заставить персонажа встать прямо и не двигаться слишком много. Я побежал на 3000 поколений, и я даже не приблизился.

Нейронная сеть и генетический алгоритм - это версии C# this tutorial. Я изменил метод кроссовера с одной точки на смешение.

У меня есть 84 входа и 15 выходов. Насколько велика моя Нейронная сеть?

ответ

5

Проблема, которую вы хотите решить, довольно сложная, я сомневаюсь, что любые «ванильные» GA (особенно используемые фиксированной архитектурой для сетей) разрешат ее (в разумные сроки). Я также не думаю, что вы когда-либо найдете «правильное количество нейронов» в скрытом слое.

Однако, если вы готовы потратить некоторое время на это, посмотрите на HyperNEAT for Locomotion Control in Modular Robots, который касается более или менее той же проблемы. Они используют довольно продвинутую технику GA под названием HyperNEAT и сообщают о хороших результатах.

HyperNEAT построен поверх NEAT (Neuroevolution of augmenting topologies). NEAT способен развивать не только весовые коэффициенты ANN, но и их структуру. Он начинается с простых сетей и медленно делает их более сложными, пока вы не достигнете своей цели (или сдадитесь).

Затем NEAT слегка изменен, чтобы иметь возможность использовать различные функции активации. Это позволит ему создавать множество «шаблонов», когда оно применяется к множеству точек, например.в системе координат. Шаблоны могут иметь некоторые интересные черты, такие как совершенная/несовершенная симметрия, или они могут быть периодическими. Этот вариант называется Compositional pattern-producing network или CPPN. Эффективным применением этой технологии является PicBreeder, где сети используются для «рисования» изображений.

В HyperNEAT CPPN используются для создания других ANN. Скрытый слой новых сетей представлен так называемым субстратом, который можно представить, как если бы нейроны слоя были помещены в двумерную/трехмерную систему координат. Затем для каждой возможной пары нейронов (все от входного слоя до всех скрытых, от всех скрытых до всех выходных) CPPN используется для определения веса. Таким образом, мы имеем косвенное кодирование, которое

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

В целом это даст вам шанс решить сложную проблему.

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

+0

Мне не нравится ваш ответ, но, похоже, это правда. Спасибо за головы, хотя. Мне любопытно посмотреть литературу. Разница между NEAT и HyperNEAT - это CPPN, правильно? CPPN может создавать нейронные сети, но сама по себе не является нейронной сетью? Или это нейронная сеть, которая развивается, а затем создает другие нейронные сети? Очень полезно, спасибо. – DrSammyD

+0

NEAT использует прямое кодирование, что означает, что для каждого нейрона и соединения в геноме у вас будет то же самое в конечной сети. HyperNEAT использует косвенное кодирование. Геном - это одна сеть (CPPN развивается с NEAT), которая - когда вы применяете на нейронных парах субстрата (~ нейроны второй сети + дополнительная информация, как правило, ее координаты в 2D/3D системе координат), будет производить вес соединения. Я думаю, что технически CPPN также является NN, но он может использовать фантастические функции активации вместо обычного сигмоида/tanh. Однако могут быть и некоторые другие незначительные различия. –

0

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

0

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

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

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

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

+0

Фактически, я избавился от постоянной метрики и сосредоточился только на минимизации энергии и пребывании в одном месте x z. Даже это не работает менее чем за 30 поколений. – DrSammyD

+0

Возможно, что-то не так с моим генетическим алгоритмом. – DrSammyD

+0

Это было что-то не так, как я рассчитывал на фитнес. Он начал работать для низкой энергии и остался в одном месте x z. Я даю вам знать, как это происходит со стоянием. – DrSammyD

Смежные вопросы