8

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

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

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-Learning?

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

+1

Это очень сложный вопрос. Сами вещи, о которых вы говорите, обычно рассматриваются в полном семестре курса колледжа в ИИ. Я не уверен, что они могут быть правильно рассмотрены в ответе на Stackoverflow, но я, конечно, буду заинтересован, чтобы люди пытались. Я никогда не обволакивал некоторые из этих алгоритмов. –

+0

На стороне примечания, если вы готовы потратить немного денег на действительно хороший учебник по этому вопросу, я могу предложить: http://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref = sr_1_1? Ie = UTF8 & s = books & qid = 1268837913 & sr = 1-1 –

+0

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

ответ

3

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

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

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

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

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

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


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

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

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

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

перефразировать так:

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

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

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

Удачи в нем! Это здорово знать такие вещи, делает повседневную жизнь немного более интересным :)

+0

Небольшая коррекция. В геноме человека насчитывается около 10^9 пар оснований. Там где-то около 20 000-25 000 генов.Сколько из этого требуется, чтобы построить мозг, я не мог сказать, – Spike

1

Там, вероятно, нет «лабиринта гена», чтобы найти,

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

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

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

EDIT: Как упоминалось выше, алгоритм обратного отслеживания подходит для этой задачи лучше, чем GA или NN. Как можно комбинировать оба алгоритма hereNeuroGen описывает, как GA используется для обучения NN.

0
  • Попробуйте использовать бесплатно с открытым исходным кодом NerounDotNet C# библиотека для нейронных сетей вместо реализации.

  • Для библиотеки Армирование обучения, я в настоящее время ищет один, особенно для рамок Dot NET ..

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