Squeak.ru - шаблоны программирования

Проблема в решении XOR с использованием нейронной сети и генетического алгоритма

Я пытаюсь решить проблему XOR с помощью нейронной сети. Для обучения я использую генетический алгоритм.

Но после определенного количества поколений (200) ошибка застряла в 1. И выходы правильные, кроме 1 xor 0, где вместо 1 выводится 0, я не понимаю, почему это происходит.

размер популяции : 100
частота кроссовера : 70
частота мутаций : 5
элитный номер : 2
функция активации : сигмовидная
метод отбора : турнирный отбор с 7 участниками

Алгоритм мутации =

for (int i=0; i< individual.getNbrOfWeights(); i++)

    if (random(0,100) < mutationRate)
    {
        genome[i] = genome[i] + random(-0.1,0.1);
    }

Расчет фитнеса =

double error = 0;

error = error + feedForward({0, 1}, 1);
error = error + feedForward({1, 0}, 1);
error = error + feedForward({1, 1}, 0);
error = error + feedForward({0, 0}, 0);     

fitness = error;

где ошибка является целевым выходом

Я попытался в мутации установить веса в диапазоне [-2 2], но стало еще хуже (ошибка застряла в 1.6). Так что я не знаю, если он обязан установить вес в определенном диапазоне...

Мне очень нужна ваша помощь, заранее спасибо.

ИЗМЕНИТЬ

На самом деле проблема заключалась в инициализации веса и методе мутации.

  • Когда я устанавливаю веса между [-1 1], алгоритм не сходится. Но чем больше я увеличиваю диапазон, тем больше он дает лучших результатов, скажем, между [-4 4].

  • для мутации я попробовал два метода (мутировать один ген, выбранный случайным образом):

--> Добавьте случайное возмущение между [-0,1 0,1] с частотой мутаций 5%. Таким образом, я получил наилучшие результаты (сетевые выходы, как и желаемые) на поколении 1800.

--> Измените значение гена на новое. Новое значение должно принадлежать диапазону. В этом случае мне пришлось поставить скорость мутации на 50%, чтобы алгоритм мог сходиться. И веса должны быть между -7 и 7, иначе он не сойдется.


  • Какова структура нейронной сети? 19.02.2015
  • 2 нейрона на входном слое, 2 в скрытом, 1 в выходном слое 19.02.2015
  • могу поделиться кодом если надо 19.02.2015
  • Вы проверяли, не слишком ли быстро население сходится к локальному минимуму? Посмотрите, поколение за поколением, как меняется популяция, есть ли правильные решения (вы можете определить их по значению приспособленности), почему они исчезают или почему никогда не появляются и т. д. 19.02.2015

Ответы:


1

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

РЕДАКТИРОВАТЬ: я уже почти уверен: дело в значении пригодности. Я подозревал, что вы оцениваете это как ошибку (то есть минимизируете ее) и в то же время выбираете людей как лучших с большей ценностью пригодности.

21.02.2015
  • Вы имеете в виду, что сигмовидная функция активации не работает с отрицательными весами? потому что отрицательные веса хорошо работают с обратным распространением… Я попробую функцию активации танх и буду держать вас в курсе, 22.02.2015
  • Ну у тебя танх работает а сигмоид нет. Это правда? 23.02.2015
  • 1. Как вы инициализируете входные веса? Посмотрите на этот ответ: stackoverflow .com/questions/4190494/, также примечание о скрытых нейронах. 2. Как вы справляетесь с элитарностью в вашей ГА? 3. Что делает прямая связь(). 24.02.2015
  • Как вы относитесь к ценности фитнеса – чем больше, тем лучше, или наоборот? 24.02.2015
  • В начале да, это работало только с функцией активации tanh. Но после корректировки весов он работал с обоими. Итак, проблема была с инициализацией веса. Я обновил вопрос для получения дополнительной информации. большое спасибо за вашу помощь.. 24.02.2015
  • для пригодности я минимизирую ошибку и выбираю людей с меньшей ошибкой... 25.02.2015
  • Новые материалы

    День 76/100 Книга
    День 76/100 Книга Обучение — это непрерывный процесс с ресурсами, широко используемыми людьми, которые признают сложный путь достижения успешной цели. Хотя поначалу это может показаться..

    Gmail Smart Compose: умный способ написать электронное письмо
    Gmail означает почту Google, это бесплатная служба электронной почты, предоставляемая Google по всему миру. Google официально запустил Gmail в 2004 году, и в настоящее время этой услугой..

    API следующего поколения: gRPC n Javascript
    gRPC - быстро развивающаяся технология, которая потенциально может заменить протокол HTTP. Это быстрее, чем традиционные HTTP-вызовы, потому что он отправляет данные в двоичном формате, а не в..

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

    Изучайте Java (Урок 2: Комментарии)
    Как и зачем использовать комментарии в java с примерами Введение: Комментарии — это строки текста в программе Java, которые игнорируются компилятором и используются для добавления..

    Async Await в Swift: легкое управление параллелизмом
    Введение в запуск асинхронного кода Асинхронный код выполняет несколько операций одновременно. Параллелизм необходим при выполнении тяжелых вычислений или сетевых запросов. Однако это может..

    Очистить файлы Program .cache в Ubuntu 20.10
    Очистите кеш за несколько простых шагов! GNU / Linux реализовал эффективное управление хранилищем для своих пользователей. Но заметили ли вы, что в вашей системе Linux заканчивается место,..