Kursinhalt
Mathematik für Datenanalyse und Modellierung
Mathematik für Datenanalyse und Modellierung
Gradientabstiegsmethode
Wir wissen, wie man Optimierungsprobleme für die Funktion einer Variablen mit dem im vorherigen Kapitel beschriebenen Algorithmus löst. Aber was können wir tun, wenn wir eine Funktion mehrerer Variablen haben? Wir können uns einer numerischen Methode zuwenden - dem Gradientenabstieg.
Was ist der Gradientenabstieg?
Der Gradient ist ein Vektor, der aus allen partiellen Ableitungen der Funktion besteht:
Somit kann das Problem der Minimierung der Funktion F(x1,..,xn)
durch die Konstruktion der folgenden Folge von Annäherungen gelöst werden:
Wir setzen einen bestimmten Anfangswert x0
und einen η
-Wert, der die Geschwindigkeit des Gradientenabstiegs darstellt. Dann beginnen wir den iterativen Prozess gemäß der obigen Formel.
Abbruchkriterien des Algorithmus
Die Kriterien für den Abbruch der Iterationen können wie folgt sein:
- Stoppen Sie den Algorithmus nach einer bestimmten Anzahl von Iterationen;
- Iterieren Sie, bis die folgende Bedingung erfüllt ist:
Hinweis
eps = 10**(-6)
odereps = 10**(-9)
Werte werden häufig als Abbruchkriterium des Iterationsprozesses verwendet.
Wir müssen auf zwei wichtige Merkmale der Gradientenabstiegsmethode achten:
- Diese Methode kann nur den Punkt des Minimums der Funktion
F(x)
finden. Wenn Sie einen Punkt des Maximums finden möchten, können Sie die Funktion-F(x)
betrachten und den Gradientenabstieg dafür verwenden; - Wenn wir den zuvor besprochenen Algorithmus mit dem Gradientenabstieg vergleichen, können wir sehen, dass der Gradientenabstieg eine ähnliche Aufgabe wie die erste Stufe des Algorithmus erfüllt - das Finden eines kritischen Wertes, der ein potenzieller Minimumspunkt sein könnte. Daher ist es möglich, dass der vom Gradientenabstieg gefundene Punkt entweder ein lokales Minimum innerhalb eines Teilbereichs der Domäne ist oder überhaupt kein Minimumspunkt ist.
Beispiel
Lassen Sie uns herausfinden, wie man das Optimierungsproblem in Python löst:
import numpy as np from scipy.optimize import minimize # Define the Rosenbrock function def rosenbrock(x): return (1 - x[0])**2 + 100*(x[1] - x[0]**2)**2 # Initial guess for x and y x0 = np.array([2, 2]) # Use scipy.optimize.minimize to find the minimum of the Rosenbrock function result = minimize(rosenbrock, x0) # Extract the optimal x and the minimum value of the Rosenbrock function optimal_x = result.x min_value = result.fun print(f'Optimal x: {optimal_x}') print(f'Minimum value of the Rosenbrock function: {min_value:.4f}')
In diesem Beispiel definieren wir die Rosenbrock-Funktion, setzen einen anfänglichen Schätzwert für x
und verwenden dann scipy.optimize.minimize
, um das Minimum der Rosenbrock-Funktion zu finden. Das Attribut result.x
enthält das optimale x
, und result.fun
enthält den minimalen Wert der Rosenbrock-Funktion.
Hinweis
Die Rosenbrock-Funktion wird häufig als Benchmark zum Testen und Vergleichen von Optimierungsalgorithmen verwendet, da sie nicht konvex ist und ein schmales, gekrümmtes Minimum aufweist.
Danke für Ihr Feedback!