Hi!
Ich versuche, jede Iteration von BO als einen bestimmten Zeitschritt zu behandeln. Mit anderen Worten, wäre es möglich, den BO zu erzwingen, um die Zielfunktion in einem begrenzten Zeitschritt zu bewerten? Es scheint, die
time-step als zusätzliche Eingabe ist eine sinnvolle Wahl, aber wie kann ich in GPyOpt vorgehen, nachdem ich die zusätzliche Eingabe in meinem Kernel berücksichtigt habe? Muss die Formulierung von EI geändert werden?
Danke für die Hilfe!
Hallo Ali,
Sie können die erwartete Verbesserung (EI) pro Zeiteinheit verwenden. In GPyOpt können Sie dies tun, indem Sie einstellen
cost_withGradients= 'evaluation_time'
beim Anlegen des Optimierungsobjekts. Was es tut, ist, die empirischen Bewertungszeiten zu verwenden, um einen Hausarzt an das Protokoll der Kosten anzupassen. Der hintere Mittelwert, mu_cost(x), wird verwendet, um den EI wie folgt zu berechnen:
EI_Einheitszeit(x) = EI(x)/mu_Kosten(x)
Wir haben noch kein Notizbuch darüber geschrieben, da es sich um ein neues Feature handelt, das wir noch testen, aber Sie können es ausprobieren. Lass uns einfach wissen, ob es bei dir funktioniert hat.
Ich hoffe das hilft,. Danke für das Interesse!
Javier
Danke Javier!
Das klingt gut! Da es sich um eine neue Funktion von GPyOpt handelt, würden Sie bitte mehr Erläuterungen zu seiner Funktionalität geben? Genauer gesagt, was meinst du mit:
* if cost_withGradients = 'evaluation time' Die Evaluierungszeit der Funktion wird verwendet, um einen GP zu modellieren, dessen Mittelwert als Kosten verwendet wird. *
Ich habe eine dynamische Blackbox-Objektivfunktion, die alle 30 Minuten ausgewertet werden muss. Ist diese neue Funktion in diesem Fall angemessen? Muss ich die Zeit in meinem Kernel trotzdem explizit als zusätzliche Eingabe berücksichtigen?
Übrigens, wie kann ich Fehler oder Tippfehler am besten melden?
Danke für die Hilfe!
Hallo Ali,
cost_withGradients = 'Auswertungszeit' ist eine Option, die Sie verwenden können, wenn Sie das ursprüngliche BO-Objekt mit erstellen
GPyOpt.methods.BayesianOptimization(...)
Ich arbeite gerade an der Dokumentation, also werden diese Dinge hoffentlich bald klarer. Ich möchte auch ein kleines Notizbuch schreiben, um zu veranschaulichen, wie man Kostenfunktionen verwendet. Ich werde Sie darüber auf dem Laufenden halten.
In Bezug auf Ihr Problem: Wenn ich das Problem, das Sie haben, gut verstehe, ist, dass sich das Objektiv mit der Zeit ändert, sodass sich das Ergebnis einer Bewertung _jetzt_ bei x ändert, wenn Sie in einigen Iterationen an derselben Stelle bewerten. Um zu entscheiden, wo die Funktion ausgewertet werden soll, müssen Sie Ihre Stichprobe irgendwie so gewichten, dass neuere Auswertungen über die aktuelle Form Ihrer Funktion aussagekräftiger sind als alte. Wie Sie sagen, können Sie diese dynamische Komponente berücksichtigen, indem Sie die Zeit im Kernel verwenden. Dieses Papier kann Ihnen helfen (wenn Sie es noch nicht wissen!):
Hilfreichster Kommentar
Hallo Ali,
Sie können die erwartete Verbesserung (EI) pro Zeiteinheit verwenden. In GPyOpt können Sie dies tun, indem Sie einstellen
beim Anlegen des Optimierungsobjekts. Was es tut, ist, die empirischen Bewertungszeiten zu verwenden, um einen Hausarzt an das Protokoll der Kosten anzupassen. Der hintere Mittelwert, mu_cost(x), wird verwendet, um den EI wie folgt zu berechnen:
EI_Einheitszeit(x) = EI(x)/mu_Kosten(x)
Wir haben noch kein Notizbuch darüber geschrieben, da es sich um ein neues Feature handelt, das wir noch testen, aber Sie können es ausprobieren. Lass uns einfach wissen, ob es bei dir funktioniert hat.
Ich hoffe das hilft,. Danke für das Interesse!
Javier