2013-03-31 2 views
1

Я развиваю популяцию нейронных сетей, и я борется с нормализацией показателей пригодности (до значений в диапазоне от 0 до 1), так что номер сам по себе наиболее значим. Проблема в том, что агенты тестируются в разных условиях - они участвуют в разных играх, а для каждой игры используется другая функция фитнеса. Функции фитнеса выглядят примерно так:Как нормализовать баллы по фитнесу?

agentsFitness[indiv][0] += Util.mean(speed) * (games[0].getConstant(0) - Math.sqrt((Math.abs((speed[LEFT] - speed[RIGHT]))) * (games[0].getConstant(1) - Util.normalize(0, 4000, maxIRActivation)))); 

, но каждый из них будет принимать разные входные данные. Я могу легко нормализовать числа для каждого из них отдельно, потому что я могу оценить максимумы и минимумы ввода. Некоторые из них будут в диапазоне (-30 000, 360 000) и некоторые (0, 900).

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

Если я пытаюсь использовать очень большие макс и мин, я получаю оценки в диапазоне (0,40, 0,45) для игр с меньшими входными значениями, которые скрывают основное разнообразие баллов.

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

ответ

1

Так вы пытаетесь оптимизировать нейронной сети с помощью генетического алгоритма, не так ли? Круто!

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

  1. Если вы сильно нажимаете на нормализацию входа, следите за текущими максимумами и минимумами в ваших данных.
  2. Лучше все еще, попробуйте перебрать данные один раз, чтобы собрать априорную информацию о максимумах и минимумах (только если это не значительно добавит сложности времени).
  3. Или еще попробуйте исследовать логику, чтобы угадать максимумы и минимумы. Может быть ... другая нейронная сеть, чтобы сделать работу догадки :). Это будет зависеть от окружающей среды.

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

Проверьте эти две ссылки. Может помочь:

Normalizing values with unknown bounds

Normalize components in a language model

+0

нейронного передаточная функция является гиперболический тангенс. Для этого мне не нужно вводить данные для нормализации.Но когда дело доходит до построения пригодности агентов и пригодности игр (игры - это функции фитнеса), их сложно анализировать, когда их ценности имеют такой широкий диапазон. Поэтому я хочу их нормализовать (0, 1). Я следил за максимумами и минимумами, и он работает. Это не идеально (поскольку ввод иногда превышает оценочные значения), поэтому я попытаюсь выполнить дополнительную итерацию. Спасибо за совет! –

+0

Просто предложение ... вы можете попробовать умножить коэффициент масштабирования с помощью функции передачи tanh .... например: a * tanh ... где a <1. это может привести к выходу на управляемые пределы (опять же, это может нарушить обучение нейронов, я не уверен). – metsburg

0

Вы можете использовать стандартные нормализованные баллы: Для каждой совокупности (в данном случае для каждой коллекции входных данных) вы можете рассчитать оценку индивидуума путем вычитания из него среднего значения популяции и затем деления его на стандартное отклонение.

Это не оставит вас с числами от 0 до 1, но позволяет вам сравнить две популяции друг с другом

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