Finden des Minimums einer Funktion mithilfe von Ableitungen

Verwende numerische Differenzen, um die Ableitung zu schätzen, und bewege dich Schritt für Schritt in die entgegengesetzte Richtung der Ableitung, um ein intuitives Gefühl dafür zu bekommen, dass "die Ableitung die Suchrichtung vorgibt."

Nach Abschluss dieser Fallstudie wirst du verstehen:Die Ableitung sagt dir, in welche Richtung sich der Funktionswert erhöht; in die entgegengesetzte Richtung zu gehen lässt ihn sinken — das ist der Prototyp des Gradientenabstiegs.


Eine Einführung aus dem echten Leben

Im dichten Nebel den Berg hinabsteigen

In einem dichten Nebel, in dem du deine Hand nicht vor deinem Gesicht sehen kannst, musst du vom Berggipfel ins Tal wandern. Du kannst das gesamte Gelände nicht sehen; du kannst nur die Steigung unter deinen Füßen fühlen. Deine Strategie ist einfach: die Richtung der steilsten Steigung fühlen → einen kleinen Schritt in die steilste Abwärtsrichtung machen → anhalten → erneut fühlen → einen weiteren kleinen Schritt machen.

"Die Steigung fühlen" bedeutet, die Ableitung zu berechnen, und "einen kleinen Schritt machen" bedeutet, die Position unter Verwendung der entgegengesetzten Richtung der Ableitung zu aktualisieren.Diese Methode erfordert nicht, die Form des gesamten Berges zu kennen; sie erfordert nur, die Steigung unter deinen Füßen zu kennen.


Intuitive Vorstellung

Für die Funktion \(f(x) = (x-3)^2 + 2\) liegt das Minimum bei \(x=3\), und der Minimalwert ist \(f(3) = 2\).

Wie kommt man von \(x=10\) zu \(x=3\)? Du musst keine Gleichung lösen; du brauchst nur eine Strategie:

  • Wenn die Ableitung \(f'(x) > 0\) ist (die Funktion steigt), gehe nach links (verringere x).
  • Wenn die Ableitung \(f'(x) < 0\) ist (die Funktion fällt), gehe nach rechts (erhöhe x).
  • Je größer der Absolutwert der Ableitung, desto steiler die Steigung, also kannst du einen größeren Schritt machen.

Mathematische Definition

Numerische Ableitung (zentrale Differenz)

\[ f'(x) \approx \frac{f(x+h) - f(x-h)}{2h} \]

Es ist nicht nötig, die Differentiationsformel herzuleiten. Verwende die Differenz der Funktionswerte an zwei sehr nahe beieinanderliegenden Punkten geteilt durch den Abstand, um eine Näherung der Ableitung zu erhalten. Nimm \(h\) als extrem kleine Zahl, z. B. \(10^{-5}\).

Naiver Abstiegsalgorithmus

\[ x_{t+1} = x_t - \eta \cdot f'(x_t) \]

Hier ist \(\eta\) die Schrittgröße (Lernrate), die steuert, wie weit jeder Schritt geht.


Python-Praxisübung

Beispiel

import numpy as np

# Zielfunktion: f(x) = (x-3)^2 + 2, Minimum bei x=3
def f(x):
    return (x - 3) ** 2 + 2

# Numerische Ableitung — unter Verwendung der zentralen Differenz, ohne symbolische Differentiation
def numerical_derivative(f, x, h=1e-5):
    """Schätze die Ableitung von f an der Stelle x."""
    return (f(x + h) - f(x - h)) / (2 * h)

# Naiver Abstiegsalgorithmus: Bewege dich in die entgegengesetzte Richtung der Ableitung
x = 10.0          # Startpunkt, absichtlich weit vom optimalen Punkt entfernt gewählt
step_size = 0.1   # Schrittgröße für jede Bewegung
history = [x]

for i in range(50):
    grad = numerical_derivative(f, x)
    x = x - step_size * grad  # Wenn die Ableitung positiv ist, gehe nach links; wenn negativ, nach rechts
    history.append(x)

print("BEISPIEL Ergebnis des Abstiegsalgorithmus:")
print(f"Startpunkt x = {history[0]:.1f}")
print(f"Endpunkt x = {history[-1]:.4f} (wahrer Minimalpunkt x=3)")
print(f"Endpunkt f(x) = {f(history[-1]):.4f} (wahres Minimum f(3)=2)")

print("\nBEISPIEL erste 10-Schritte-Bewegungstrajektorie:")
print(f"{'Schritt':<6} {'x':<10} {'f(x)':<10} {'Ableitung':<10} {'Richtung'}")
for i, xi in enumerate(history[:10]):
    grad = numerical_derivative(f, xi)
    direction = Links if grad > 0 else Rechts
    print(f"{i:<6} {xi:<10.4f} {f(xi):<10.4f} {grad:<10.4f} {direction}")
EXAMPLE 下山算法结果:
起点 x = 10.0
终点 x = 3.0000  (真实最小值点 x=3)
终点 f(x) = 2.0000  (真实最小值 f(3)=2)

EXAMPLE 前 10 步移动轨迹:
步数   x          f(x)       导数       方向
0      10.0000    51.0000    14.0000    往左
1      8.6000     33.3600    11.2000    往左
2      7.4800     22.0704    8.9600     往左
3      6.5840     14.8042    7.1680     往左
4      5.8672     10.1942    5.7344     往左

Anwendungsszenarien in der KI

SzenarioBezug zu diesem Fall
Training mit GradientenabstiegDie Essenz des Trainings neuronaler Netze: die partielle Ableitung der Verlustfunktion nach jedem Parameter zu verwenden, um die Richtung der Parameteraktualisierung zu steuern.
Numerische GradientenprüfungBeim Debuggen der Backpropagation verwendest du numerische Gradienten, um die Korrektheit analytischer Gradienten zu überprüfen – genau das ist die Methode der zentralen Differenz in diesem Fall.
HyperparametersucheTuning-Methoden wie die Bayessche Optimierung suchen ebenfalls entlang der Richtung der "Ableitung" nach dem Minimum auf einer unbekannten Funktionsoberfläche.
Weitere Erweiterungen