Размер нейронной сети для анимационной системы - PullRequest
8 голосов
/ 16 августа 2010

Я решил пойти с нейронной сетью, чтобы создать поведения для движка анимации, который у меня есть.Нейронная сеть принимает 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 # этого урока .Я изменил метод кроссовера с одной точки на смешивание.

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

Ответы [ 2 ]

5 голосов
/ 17 августа 2010

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

Однако, если вы хотите потратить некоторое время на него, посмотрите на HyperNEAT дляУправление движением в модульных роботах , которое решает более или менее ту же проблему.Они используют довольно продвинутую технику GA под названием HyperNEAT и сообщают о некоторых хороших результатах.

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

Затем NEAT слегка изменяется, чтобы иметь возможность использовать различные функции активации.Это позволит ему создавать широкий спектр «шаблонов», когда он применяется к набору точек, например, в системе координат.У моделей могут быть некоторые интересные черты, такие как совершенная / несовершенная симметрия, или они могут быть периодическими.Этот вариант называется Сеть создания шаблонных композиций или CPPN.Впечатляющим применением этой технологии является PicBreeder , где сети используются для "рисования" изображений.

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

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

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

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

0 голосов
/ 16 августа 2010

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

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

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

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

...