Partielle Ableitungen -- Multivariable Funktionen nacheinander ableiten
Die vorherige Ableitung galt für eine Funktion mit einer Variablen f(x). Ein neuronales Netz hat Millionen von Parametern, und wir müssen die Ableitung bezüglich jedes Parameters bilden.
Partielle Ableitung = In einer multivariablen Funktion leitet man nur nach einer Variablen ab und behandelt den Rest als Konstanten.
Konzeptanalyse
Bisher haben wir nur die Ableitung einer Funktion mit einer Variablen f(x) behandelt. Aber in der realen Welt wird das Ergebnis von Dingen normalerweise durchmehrere Faktorengemeinsam bestimmt.
Zum Beispiel: Hauspreise hängen von mehreren Faktoren ab, wie Fläche, Lage, Stockwerk und Alter. Wenn wir wissen wollen, "um wie viel steigt der Hauspreis, wenn die Fläche um 1 Quadratmeter zunimmt", müssen wir die anderen Faktoren konstant halten.
Das ist die Kernidee der partiellen Ableitungen:Ändere jeweils nur eine Variable, beobachte ihre Auswirkung auf das Ergebnis und halte die übrigen Variablen vorübergehend fest.。
Für \( f(x, y) = x^2 + xy + y^2 \):
- Bilde die partielle Ableitung nach x (behandle y als Konstante; da y² eine Konstante ist, ist ihre Ableitung 0; in xy wird y als Konstante behandelt, und die Ableitung von x ist 1): \( \frac{\partial f}{\partial x} = 2x + y + 0 \)
- Bilde die partielle Ableitung nach y (behandle x analog als Konstante): \( \frac{\partial f}{\partial y} = 0 + x + 2y \)
Die Notation \( \partial \) (gelesen als „round d“ oder „partial“) bezeichnet eine partielle Ableitung, im Gegensatz zu d bei einer gewöhnlichen Ableitung.
Partielle Ableitungen zweiter Ordnung
Die partielle Ableitung einer partiellen Ableitung ergibt die partielle Ableitung zweiter Ordnung:
- \( \frac{\partial^2 f}{\partial x^2} \): Die partielle Ableitung nach x bilden, dann erneut die partielle Ableitung nach x bilden (misst die Krümmung in x-Richtung).
- \( \frac{\partial^2 f}{\partial x \partial y} \): Zuerst die partielle Ableitung nach x bilden, dann nach y (gemischte partielle Ableitung, misst den Interaktionseffekt zwischen den beiden Variablen).
Das Wesen des Trainings neuronaler Netze: die partielle Ableitung der Verlustfunktion nachjedem Parameter. Partielle Ableitungen berechnen, dann entlang der negativen Gradientenrichtung aktualisieren.
Ein Modell mit einer Million Parameter hat einen Gradienten, der ein Vektor aus einer Million partiellen Ableitungen ist.
Alltagsbeispiel
Der Geschmack eines Topfes Suppe.
Der Geschmack der Suppe hängt von Salz, Sojasauce, Essig und anderen Gewürzen ab. Sie möchten wissen: „Wie stark ändert sich der Geschmack, wenn Sie noch einen Löffel Salz hinzufügen?“
Halten Sie die Mengen der anderen Gewürze fest und betrachten Sie nur die Wirkung von Salz – das ist die Idee der partiellen Ableitungen:Ändern Sie jeweils nur eine Variable.。
Mathematische Definition
\[ \frac{\partial f}{\partial x} = \lim_{h \to 0} \frac{f(x+h, y) - f(x, y)}{h} \]Halten Sie y unverändert, lassen Sie nur x variieren.
Python-Praxisübung
Beispiel
x, y = sp.symbols('x y')
f = x**2 + x*y + y**2
print(f"f(x,y) = {f}")
print(f"∂f/∂x = {sp.diff(f, x)}") # 2x + y
print(f"∂f/∂y = {sp.diff(f, y)}") # x + 2y
# Partielle Ableitung zweiter Ordnung
print(f"∂²f/∂x² = {sp.diff(f, x, 2)}") # 2
print(f"∂²f/∂x∂y = {sp.diff(f, x, y)}") # 1
# Partielle Ableitung des Verlusts eines linearen Modells nach den Parametern
w, b, xi, yi = sp.symbols('w b x_i y_i')
loss = (w*xi + b - yi)**2
print(f"\nloss=(w·xi+b-yi)^2")
print(f"∂L/∂w = {sp.diff(loss, w)}")
print(f"∂L/∂b = {sp.diff(loss, b)}")
Die Ausgabe ist:
f(x,y) = x**2 + x*y + y**2 ∂f/∂x = 2*x + y ∂f/∂y = x + 2*y ∂²f/∂x² = 2 ∂²f/∂x∂y = 1 loss=(w·xi+b-yi)^2 ∂L/∂w = 2*x_i*(b + w*x_i - y_i) ∂L/∂b = 2*b + 2*w*x_i - 2*y_i
Anwendungsszenarien in der KI
Training neuronaler Netze = Millionen partieller Ableitungsberechnungen
Ein Modell mit einer Million Parameter hat einen Verlust, der eine multivariate Funktion von einer Million Variablen ist. In jeder Trainingsrunde berechnet die Engine für automatische Differenzierung partielle Ableitungen nachjedem Parameterberechnet partielle Ableitungen, erhält eine Million Werte partieller Ableitungen, die zu einem Gradientenvektor zusammengesetzt werden, und aktualisiert alle Parameter entlang der negativen Gradientenrichtung.
Lokale partielle Ableitungen in der Backpropagation
Jeder Knoten im Berechnungsgraphen muss lokale partielle Ableitungen berechnen: Für einen Additionsknoten \( \partial/\partial x = 1 \) (der Gradient wird unverändert durchgereicht), und für einen Multiplikationsknoten \( \partial(xy)/\partial x = y \) (der Gradient wird mit dem Wert des anderen Operanden multipliziert und zurückgegeben). Diese lokalen partiellen Ableitungen werden entlang des Berechnungsgraphen über die Kettenregel multipliziert, um die endgültigen Parameter-Gradienten zu erhalten.
Transfer-Learning mit eingefrorenen Parametern
Beim Transfer-Learning werden vorab trainierte Schichten oft „eingefroren“ – für die Parameter dieser Schichten werden keine partiellen Ableitungen berechnet und sie werden nicht aktualisiert. In PyTorch setzen Sie requires_grad=False, und die Berechnung der partiellen Ableitungen für die entsprechenden Parameter wird übersprungen, was Speicher und Rechenaufwand stark einspart.
Weitere Erweiterungen