Может ли нейронная сеть инвертировать ввод расстояния? - PullRequest
0 голосов
/ 14 марта 2020

Я строю нейронную сеть, чтобы играть в Снейка с помощью эволюционного алгоритма.

Алгоритм:

Он имеет 12 входных нейронов + смещение:

  • Расстояние до стены (вверх, вниз, влево, вправо)
  • Есть ли еда? (Вверх, вниз, влево, вправо)
  • расстояние до ближайшей части тела (вверх, вниз, влево, вправо)

и 4 выходных нейрона:

  • Вверх
  • Вниз
  • Влево
  • Вправо

Уровень мутаций: 5%.
Численность населения: 500.
Родители: Лучшие 10 из последнего поколения.
Кроссовер: Каждый ребенок - это комбинация 50–50% двух случайных родителей

Решение нейронной сети:

Пока что Змея придумала довольно хорошее решение - добывать еду, избегать стен и избегать хвоста. Его путь - это круг у стены. Если он видит еду, он идет в направлении еды. При достижении стены она снова начинает кружить и т. Д.

Проблема:

Если Змея становится очень большой, она всегда видит свой собственный хвост в В том же направлении, где еда.
Проблема с расстоянием состоит в том, что если Хвост находится далеко, то Активация Нейрона, говорящая «не go для еды», очень высока (большее расстояние = более высокое входное значение) .
Я знаю, что мог бы исправить это, повернув Значения, так что большое число означает «близко», а маленькое «далеко». Другим способом может быть выполнение двоичного ввода или предоставление змее небольшого расстояния, чтобы смотреть в каждом направлении со значениями stati c (например, повернутыми). Я думаю, что есть много решений, как Ввод мог бы быть лучше.

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

...