Повышение моего GA с Нейронными сетями и/или Изучением Укрепления

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

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

1 0 0 1 0 1 0 1 0 1 1 1 0 0...

Как я мог использовать Нейронную сеть (я принимаю MLP?), чтобы обучаться и улучшить мой геном?

В дополнение к этому, поскольку я ничего не знаю о Нейронных сетях, что я изучал реализацию некоторой формы Изучения Укрепления, с помощью моей матрицы лабиринта (2 размерных массива), хотя я немного застреваю на том, что следующий алгоритм хочет от меня:

(из http://people.revoledu.com/kardi/tutorial/ReinforcementLearning/Q-Learning-Algorithm.htm)

1.  Set parameter , and environment reward matrix R
   2. Initialize matrix Q as zero matrix
   3. For each episode:
          * Select random initial state
          * Do while not reach goal state
                o Select one among all possible actions for the current state
                o Using this possible action, consider to go to the next state
                o Get maximum Q value of this next state based on all possible actions
                o Compute
                o Set the next state as the current state

  End Do

  End For 

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

Если бы кто-то мог бы выручить путем объяснения, что я должен был бы сделать для реализации следующего, предпочтительно в Java, хотя C# будет хорош также, возможно с некоторыми примерами исходного кода он ценился бы.

8
задан Cerin 10 April 2010 в 00:17
поделиться

3 ответа

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

Прежде всего: что делает ваш GA? Я вижу набор двоичных значений; что это такое? Я вижу их как:

  • bad: последовательность инструкций "повернуть направо" и "повернуть налево". Почему это плохо? Потому что вы, по сути, делаете случайную, грубую попытку решить вашу проблему. Вы не развиваете генотип: вы совершенствуете случайные догадки.
  • лучше: каждый ген (место в геноме) представляет собой признак, который будет выражен в фенотипе. Не должно быть отображения 1 к 1 между геномом и фенотипом!

Приведу пример: в нашем мозге 10^13ish нейронов. Но у нас есть только около 10^9 генов (да, это не точное значение, потерпите секунду). О чем это нам говорит? Что наш генотип не кодирует каждый нейрон. Наш геном кодирует белки, из которых впоследствии получаются компоненты нашего тела.

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

Теперь подумайте о своем GA: чего вы пытаетесь достичь? Вы уверены, что эволюция правил поможет? Другими словами - как бы вы справились с лабиринтом? Что вам больше поможет: наличие другого тела или память о правильном пути к выходу? Возможно, вам стоит пересмотреть свой генотип и закодировать в нем способности к запоминанию. Возможно, в генотипе можно закодировать, сколько данных можно хранить и как быстро ваши агенты могут получить к ним доступ - а затем измерять приспособленность по тому, как быстро они выходят из лабиринта. Другой (более слабый) подход может заключаться в кодировании правил, по которым ваш агент решает, куда идти. Главный вывод: кодируйте характеристики, которые, будучи выраженными, могут быть выбраны по пригодности.


Теперь перейдем к вопросу о нейронных сетях. Следует помнить, что нейронные сети - это фильтры. Они получают входной сигнал, выполняют над ним операции и возвращают выходной сигнал. Что это за выход? Возможно, вам просто нужно определить истинность/ложность условия; например, если вы подадите NN карту лабиринта, она сможет сказать, сможете ли вы выбраться из лабиринта или нет. Как бы вы сделали такую вещь? Вам нужно правильно закодировать данные.

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

Теперь к вашей проблеме. Вы упомянули, что хотите использовать NN: как насчет,

  • использования нейронной сети для управления агентом, и
  • использования генетического алгоритма для эволюции параметров нейронной сети?

Перефразируем так:

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

есть отличное чтение по этому вопросу здесь: Inman Harvey Microbial GA.

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

Получайте от этого удовольствие! Здорово знать такие вещи, это делает повседневную жизнь немного более увлекательной :)

3
ответ дан 6 December 2019 в 00:06
поделиться

Вероятно, нет «гена лабиринта», который можно было бы найти,

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

Самый простой способ выбраться из лабиринта - всегда двигаться влево (или вправо) вдоль стены.

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

РЕДАКТИРОВАТЬ: Как упоминалось выше, алгоритм поиска с возвратом подходит для этой задачи лучше, чем GA или NN. Как объединить оба алгоритма описано здесь NeuroGen описывает, как GA используется для обучения Анна.

1
ответ дан 6 December 2019 в 00:06
поделиться
  • Попробуйте использовать бесплатную библиотеку NerounDotNet C # с открытым исходным кодом для ваших нейронных сетей вместо ее реализации.

  • Для библиотеки обучения с подкреплением я сейчас ищу одну, особенно для инфраструктуры Dot NET.

0
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: