Как я могу предотвратить зависание моей программы на локальном максимуме (искусственная нейронная сеть прямой связи и генетический алгоритм)

я работаю над искусственной нейронной сетью с прямой связью (ffann), которая будет принимать входные данные в форме простого вычисления и возвращать результат (выступая в качестве карманного калькулятора). Результат не будет точным.

Искусственная сеть обучается с использованием генетического алгоритма на весах.

В настоящее время моя программа застревает на локальном максимуме в:

5-6% правильных ответов с погрешностью 1%30% правильных ответов, с погрешностью 10%40% правильных ответов, с ошибкой 20%45% правильных ответов, с ошибкой 30%60% правильных ответов, с ошибкой 40%

В настоящее время я использую два разных генетических алгоритма:

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

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

Итак, вопрос: как я могу предотвратить зависание моего ffann в локальных максимумах?

Должен ли я изменить свой текущий генетический алгоритм на что-то более продвинутое с большим количеством переменных?

Должен ли я создать дополнительную мутацию или кроссовер?

Или я должен попытаться изменить мои переменные мутации на что-то большее / меньшее?

Это большая тема, поэтому, если я пропустил любую информацию, которая может понадобиться, пожалуйста, оставьте комментарий

Изменить: Тонкая настройка числа мутаций для более подходящего значения стала лучшей скоростью ответа, но далека от одобрения:

10% правильных ответов с погрешностью 1%33% правильных ответов с погрешностью 10%43% правильных ответов, с ошибкой 20%65% правильных ответов с погрешностью 30%73% правильных ответов, с ошибкой 40%

В настоящее время сеть представляет собой очень простую трехслойную структуру с 3 входами, 2 нейронами в единственном скрытом слое и одним нейроном в выходном слое.

Используемая функция активации - Tanh, значения которой находятся в диапазоне от -1 до 1.

Кроссовер выбора типа очень прост, работая так:

[a1, b1, c1, d1] // Selected as winner due to most correct answers
[a2, b2, c2, d2] // Loser

Проигравший в конечном итоге получит одно из значений от победителя, переместив значение прямо вниз, так как я считаю, что позиция в массиве (весов) имеет значение для его работы.

Мутация очень проста, добавляя очень маленькое значение (в настоящее время где-то между 0,01 и 0,001) к случайному весу в массиве проигравших с вероятностью 50/50 быть отрицательным значением.

Вот несколько примеров обучающих данных:

1, 8, -7 // the -7 represents + (1+8)
3, 7, -3 // -3 represents - (3-7)
7, 7, 3  // 3 represents * (7*7)
3, 8, 7  // 7 represents / (3/8)

Ответы на вопрос(3)

Ваш ответ на вопрос