Jak mogę zapobiec utknięciu mojego programu na lokalnym maksimum (sztuczna sieć neuronowa i algorytm genetyczny)

Pracuję nad sztuczną siecią neuronową do przodu (ffann), która pobiera dane w postaci prostej kalkulacji i zwraca wynik (działając jako kalkulator kieszonkowy). Wynik nie będzie dokładny.
Sztuczna sieć jest szkolona przy użyciu algorytmu genetycznego na wagach.

Obecnie mój program utknął na lokalnym maksimum pod adresem:

5-6% poprawnych odpowiedzi, z 1% marginesem błędu30% poprawnych odpowiedzi, z 10% marginesem błędu40% poprawnych odpowiedzi, z 20% marginesem błędu45% poprawnych odpowiedzi, z 30% marginesem błędu60% poprawnych odpowiedzi, z 40% marginesem błędu

Obecnie używam dwóch różnych algorytmów genetycznych:
Pierwsza to podstawowa selekcja, wybieranie dwóch losowo z mojej populacji, nazywanie tego, który ma najlepszą sprawność, a drugi przegranego. Przegrany otrzymuje od zwycięzcy jedną z wag.

Druga to mutacja, w której przegrany z selekcji otrzymuje niewielką modyfikację w oparciu o ilość powstałych błędów. (o sprawności decydują prawidłowe odpowiedzi i nieprawidłowe odpowiedzi). Jeśli więc sieć generuje wiele błędów, otrzyma dużą modyfikację, tak jakby miała wiele poprawnych odpowiedzi, jesteśmy bliscy akceptowalnego celu, a modyfikacja będzie mniejsza.

A więc pytanie: w jaki sposób mogę powstrzymać mojego ffanna przed utknięciem w lokalnych maksimach?
Czy powinienem zmodyfikować mój obecny algorytm genetyczny na coś bardziej zaawansowanego z większą liczbą zmiennych?
Czy powinienem utworzyć dodatkową mutację lub zwrotnicę?
Czy powinienem spróbować zmodyfikować moje zmienne mutacji na coś większego / mniejszego?

To jest duży temat, więc jeśli przegapiłem jakieś informacje, które mogą być potrzebne, zostaw komentarz

Edycja: Poprawienie liczby mutacji do bardziej odpowiedniej wartości stało się lepszą stawką odpowiedzi, ale daleką od zatwierdzenia:

10% poprawnych odpowiedzi, z 1% marginesem błędu33% poprawnych odpowiedzi, z 10% marginesem błędu43% poprawnych odpowiedzi, z 20% marginesem błędu65% poprawnych odpowiedzi, z 30% marginesem błędu73% poprawnych odpowiedzi, z 40% marginesem błędu

Sieć jest obecnie bardzo prostą 3 warstwową strukturą z 3 wejściami, 2 neuronami w jedynej ukrytej warstwie i pojedynczym neuronem w warstwie wyjściowej.
Użyta funkcja aktywacji to Tanh, umieszczając wartości pomiędzy -1 a 1.
Zwrotnica typu selekcji działa bardzo podobnie jak poniżej:

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

Przegrany otrzyma jedną z wartości od zwycięzcy, przesuwając wartość prosto w dół, ponieważ uważam, że pozycja w tablicy (wag) ma znaczenie dla jej wyników.

Mutacja jest bardzo prosta, dodając bardzo małą wartość (obecnie gdzieś pomiędzy około 0,01 a 0,001) do losowej wagi w tabeli przegranych wag, z szansą 50/50 na wartość ujemną.

Oto kilka przykładów danych treningowych:

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)

questionAnswers(3)

yourAnswerToTheQuestion