0

So verwende ich einen genetischen Algorithmus, um ein Feedforward-neuronales Netzwerk zu trainieren, mit der Erkennung einer Funktion, die dem genetischen Algorithmus gegeben wird. Ie x = x ** 2 oder etwas komplizierter offensichtlich.Zufälliges Element in Fitness-Funktion genetischen Algorithmus

Ich erkannte, dass ich zufällige Eingaben in meiner Fitness-Funktion verwende, die die Fitness für ein Mitglied der Bevölkerung etwas zufällig verursacht, aber immer noch im Einklang damit, wie nah es der gegebenen Funktion ist. Ein Kollege bemerkte, dass es befremdlich sei, dass das gleiche Mitglied der Bevölkerung nicht immer die gleiche Fitness habe, was ich ein wenig unkonventionell finde. Aber es hat mich zum Nachdenken gebracht, gibt es irgendeinen Grund, warum das für den genetischen Algorithmus schlecht wäre? Ich denke eigentlich, dass es ziemlich gut sein könnte, weil es mir ermöglicht, ein ziemlich kleines Testset zu haben, was die Anzahl der Generationen beschleunigt und trotzdem die Überanpassung an einen bestimmten Test verhindert.

Hat jemand Erfahrung damit?

(Fitness-Funktion ist MSE im Vergleich zu bestimmten Funktion, für eine zufällig generierte Testset von 10 Iterationen)

Antwort

0

Normalerweise einen Samen Sie für genetische Algorithmen verwenden, die festgelegt werden sollen. Es wird immer die gleichen "zufälligen" Childs nacheinander erzeugen, was Ihren Ansatz reproduzierbar macht. Der genetische Algorithmus ist also quasi-zufällig. Das ist Stand der Technik, wie man genetische Algorithmen durchführt.

+0

Vielen Dank, aber das ist nicht ganz das, was ich verlange. Ich habe mich speziell nach dem theoretischen Effekt gefragt, den Testset für die Fitnessfunktion randomisieren zu lassen. Dies ist mehr über das Verständnis der Theorie als alles andere –

+0

Für mehr Theorie, gibt es viel darüber im Internet. Für detailliertere Fragen müssen Sie Ihre spezifischen Einstellungen/Umgebung usw. kennen. – Rockbar

4

Ein konsistenter Fitnesswert ist für die effiziente Weiterentwicklung Ihres evolutionären Algorithmus erforderlich. Stellen Sie sich den Extremfall vor: Wenn die Fitnessbewertung für Ihre Kandidaten immer 100% zufällig ist, führt Ihr Algorithmus eine zufällige Suche durch (was nicht effizient ist).

Wenn Ihre Fitnessbewertung nicht konsistent ist, bedeutet dies normalerweise, dass Sie die Bedeutung von "value" in Ihrem Problem nicht erfolgreich abstrahiert haben (und das ist manchmal schwer!) Oder es kann aus Zufallsfaktoren resultieren (eher ähnlich was ich von deiner Beschreibung verstehe). Diesen wird häufig durch Mittelung begegnet.

Wenn in Ihrem Fall diese zufälligen Eingaben wirklich und vorteilhaft sind, sollten Sie eine Mittelung in Betracht ziehen, die die Fitnessbewertung konsistenter machen könnte, wenn auch langsamer.

Aber, kurz gesagt, sind langsame Auswertungen nicht gut (Sie haben Recht damit) und keine inkonsistenten Fitnesswerte. Am Ende, fühlen Sie sich frei, Ihr eigenes Gleichgewicht zu finden.

bearbeitet basierend auf den Kommentaren:

die Aufgabe Stellen Sie sich vor, wo ein künstliches neuronales Netz (ANN), eine Funktion zu reproduzieren hat, zum Beispiel f (x) = x (wobei nur der ANN einen Eingang hat, x, und eine Ausgabe, f (x), aber vielleicht viele versteckte Einheiten für komplexere Fälle benötigt).

Wir könnten Tests für Fitness vorstellen immer einen Satz von Punkten, beispielsweise unter Verwendung Test f (x) für x = {0,2, 0,4, 0,6, 0,8}. Je näher f (x) an der erwarteten f (x) = x in jedem Fall ist, desto höher ist die Fitness. Dies wird im Einklang, aber in Überanpassung führen, wie das Bild zeigt:

Example for overfitting

Die Lösung ist sehr gut in der Nähe zu den Prüfpunkten, aber unberechenbar anderswo. Der Suchalgorithmus wird aufgrund der konsistenten Auswertung wahrscheinlich effizient sein, aber die Ergebnisse sind möglicherweise nicht gut.

Ein alternativer Ansatz ist es, einen zufälligen Satz von Testpunkten jede Iteration zu verwenden, beispielsweise x = {0,13, 0,19, 0,56, 0,99}.Da die Testpunkte jedes Mal anders sind, muss das Ergebnis überall gut sein. Der Nachteil ist inkonsistent Auswertung, wie im Bild gezeigt:

Inconsistent evaluation

Die gleiche Kandidatenlösung mit dem Test-Set Eines gute scheint und ziemlich schlecht für den Test B gesetzt Unter diesen Bedingungen der Suchalgorithmus sein kann ineffizienter, aber die Lösung wird besser in dem Bereich der Werte, die wir wollen.

Abhängig von unserem spezifischen Fall können wir die Dinge verbessern, indem wir mehr Iterationen haben, größere Testmengen haben (besser Durchschnitt) oder Zwischenlösungen ausprobieren. Zum Beispiel könnte man immer drei zufällige Punkte testen, wobei der erste immer zwischen 0 und 1/3, der zweite zwischen 1/3 und 2/3 und der dritte zwischen 2/3 und 1 liegt. Die Möglichkeiten sind wirklich endlos und die bessere Wahl hängt von jedem Problem ab.

Hinweis dass viele Aufgaben dieses Problem überhaupt nicht haben. Zum Beispiel müssen wir im klassischen XOR nur für {X1 = 0, X2 = 0; X1 = 1, X2 = 0; X1 = 0, X2 = 1; X1 = 1, X2 = 1}. Natürlich wird es schnell sein, alle vier Fälle zu testen!

+0

Vielen Dank, das ist eigentlich sehr hilfreich. Aber nehmen wir ein sehr einfaches Szenario. Ich möchte, dass mein Ann x = x macht. Gibt es einen Vorteil, wenn man von 10 zufälligen Werten für x zu 10 in Stein gemachte x-Beispiele geht? Ie (i bis 10 random.random() vs i bis 10 i/10) –

+0

Ich würde sagen, dass würde auf das Problem abhängen: Wenn Sie unterscheiden müssen, ob Sie y = x oder y = x^2 haben, dann zwei behoben Eingänge werden tun. Wenn Sie eine Funktion so nah wie möglich an y = x entwickeln müssen (sehr unterschiedliches Problem), dann hätte das Testen auf zufällige Eingaben den Vorteil, Überanpassung zu verhindern (dh eine Funktion, die für Ihre Testpunkte perfekt ist) anderswo anders!). – Pablo

Verwandte Themen