Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Gradientenabstieg und Lernrate

Nach dieser Lektion: Ich kann eine Funktion durch kleine Schritte bergab minimieren.

Lektion, 65 Min.2 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Wie findet ein Programm den kleinsten Fehler?

Der Gradientenabstieg sucht den kleinsten Wert einer Funktion, indem er immer einen kleinen Schritt bergab geht. So trainieren Programme ihre Modelle: Sie senken Schritt für Schritt einen Fehler.

Stellen Sie sich eine Wanderung im Nebel vor. Sie sehen nur den Boden unter Ihren Füßen und gehen dorthin, wo er am steilsten abfällt. Irgendwann liegt vor Ihnen kein Gefälle mehr.

Am Ende dieser Lektion

Notiz

Ich kann eine Funktion durch kleine Schritte bergab minimieren.

Schlüsselwörter

BegriffWas er bedeutet
Gradientenabstiegwiederholt einen kleinen Schritt gegen den Gradienten gehen
Lernrateder Faktor, der die Länge jedes Schritts bestimmt
Minimumder kleinste Wert einer Funktion
Abbruchbedingungdie Regel, die sagt, wann man aufhört
Divergenzdie Schritte führen immer weiter weg vom Ziel

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Schritt zieht Steigung mal Lernrate ab

Der Gradientenabstieg wiederholt eine Zeile: neues x gleich altes x minus Lernrate mal Steigung. Bei einer Eingabe ist die Steigung die Ableitung.

Ist die Steigung negativ, geht es nach rechts bergab, und das Minus wird zum Plus. Ist sie nahe 0, wird der Schritt klein, und Sie bremsen vor dem Minimum von selbst.

Beispiel: fünf Schritte bei der Lernrate 0,1

Schrittx vorherSteigung 2 * (x - 3)x nachher
10-60,6
20,6-4,81,08
31,08-3,841,464
41,464-3,0721,7712
51,7712-2,45762,017

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Fünf Schritte in Python

Code: python
def steigung(x):
    return 2 * (x - 3)  # Ableitung von (x - 3) ** 2 + 1

x = 0.0
lernrate = 0.1
for schritt in range(5):
    x = x - lernrate * steigung(x)
    print("Schritt", schritt + 1, ": x =", round(x, 4))
# Ändern Sie die Lernrate in 0.5. Wo landen Sie nach dem ersten Schritt?

Dieselben Zahlen aus einer Formel

Befehl
docker exec jupyter python3 -c "print([round(3 - 3 * 0.8 ** n, 4) for n in range(1, 6)])"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Lernrate entscheidet, ob der Abstieg gelingt

Eine kleine Lernrate führt sicher, aber langsam. Eine zu große Lernrate springt über das Minimum hinaus, und jeder Sprung landet weiter weg als der vorige. Das heißt Divergenz.

Die Tabelle startet immer bei 0. Das Minimum liegt bei 3. Bei Lernrate 0,5 ist es nach einem Schritt erreicht, bei 1,0 pendelt x zwischen 0 und 6, bei 1,1 wächst der Abstand.

Beispiel: drei Lernraten ab x = 0

LernrateSchritt 1Schritt 2Schritt 3Schritt 4Verhalten
0,10,61,081,4641,7712nähert sich langsam 3
0,53333trifft 3 sofort
1,06060pendelt, kommt nie an
1,16,6-1,328,184-3,2208divergiert

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Schritte bei Lernrate 1,1

Befehl
docker exec jupyter python3 -c "print([round(3 - 3 * (-1.2) ** n, 2) for n in range(1, 5)])"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, eine größere Lernrate führe schneller zum Ziel. Das gilt nur bis zu einer Grenze. Darüber springt der Abstieg über das Minimum hinaus und entfernt sich immer weiter. Beginnen Sie klein und vergrößern Sie die Lernrate vorsichtig.

Eine Abbruchbedingung beendet die Schleife

Der Abstieg erreicht das Minimum nie ganz genau. Deshalb brauchen Sie eine Abbruchbedingung: Hören Sie auf, wenn die Steigung klein genug ist, zum Beispiel unter 0,01.

Zusätzlich setzen Sie eine Höchstzahl von Schritten. So endet die Schleife auch dann, wenn der Abstieg divergiert.

Abstieg mit Abbruch

Code: python
def steigung(x):
    return 2 * (x - 3)

x = 0.0
lernrate = 0.1
schritte = 0
while abs(steigung(x)) > 0.01 and schritte < 1000:
    x = x - lernrate * steigung(x)
    schritte = schritte + 1
print("Schritte:", schritte)
print("x:", round(x, 3))
# Ändern Sie die Grenze 0.01 in 0.0001. Wie viele Schritte brauchen Sie jetzt?

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.