Inhaltsverzeichnis

Navigation: 🤖 Teil 1 - 🤖 Teil 2 - 🤖 Teil 3 - 🤖 Teil 4Loading ⌛Loading ⌛

🤖 Wie funktioniert maschinelles Lernen 3

🎯 In dieser Reihe erfährst du, wie ein Computer mithilfe von Daten lernen kann.

Inhaltsverzeichnis


1. Der Sache auf den Grund gehen


Abb.1: Fehlerfunktion1).

In den Teilen 1 und 2 hast du gelernt, dass mit Machine Learning Probleme gelöst werden können, welche näherungsweise durch eine Stellvertreter-Funktion $f_{ML}(x)$ mit mehreren Gewichten $w$ und deren Lösung näherungsweise durch das Minimieren einer Fehlerfunktion $J(w)$ beschrieben werden können.

Das Ziel besteht nun darin, mithilfe von einem Datensatz (endlich vielen Datenpunkten) die Gewicht-Einstellung $w*$, für welche $e_{min}=J(w^*)$ gilt, möglichst gut anzunähern. Im Teil 2 hattest du dazu drei Strategien kennengelernt. In diesem dritten Teil geht es darum, eine dieser Strategien, die iterativen Verfahren, besser kennenzulernen. Konkret wirst du das sogenannte „Gradientenverfahren“ etwas genauer unter die Lupe zu nehmen. Das Gradientenverfahren ist das gebräuchlichste Verfahren zum Trainieren von neuronalen Netzen.

Im folgenden Auftrag wirst du den wichtigen Begriff „Steigung“ einer Funktion kennenlernen und selbst herausfinden, wie damit das Minimum einer Funktion gefunden werden kann.

✍ Auftrag Steigung ergründen

👉 Hier ergründest du den Begriff der „Steigung“ und wie damit das Minimum einer Funktion gefunden werden kann.

  1. Finde als Erstes heraus, was mit dem Begriff „Steigung“ gemeint ist, indem du mit der Maus auf der im Programm gezeigten Funktion hin und her fährst.
  2. Jetzt die Erklärung in Worten dazu.
    • Jedem Punkt auf der roten gezeichneten Funktion kann eine Steigung zugeordnet werden.
    • Die Steigung ist als blaue Gerade durch diesen Punkt eingezeichnet, welche die Funktion in diesem Punkt berührt.
    • Der Wert der Steigung beschreibt, wie steil die Gerade ist.
    • Wenn die Gerade nach rechts unten ↘ geht, dann ist das Vorzeichen der Steigung negativ, wenn die Gerade nach rechts oben ↗ geht, dann ist das Vorzeichen positiv.
  3. Wie gross ist die Steigung beim Minimum (beim tiefsten Punkt) der Funktion? Loading ⌛
  4. Überlege dir, wie du mithilfe der Steigung das Minimum z.B. einer Fehlerfunktion finden kannst. Lese danach direkt nach diesem Auftrag weiter (dort findest du eine Antwort auf diese Frage).


👉 Das Minimum mithilfe der Steigung finden

💡 Grob gesagt, bei einer Funktion, die so aussieht: ᑌ , ist die Steigung unten beim Minimum gleich null.

⚠️ Bei einer Funktion, die so aussieht: ᑎ , ist die Steigung oben beim Maximum gleich null. Und bei einer Funktion die so aussieht: ⸺ , ist die Steigung überall null.

ℹ️ Es kann durchaus sein, dass eine Fehlerfunktion $J(w)$ eher so aussieht: ᑌᐡ⸺ᑎ , d.h. dass diese mehrere Minima, Maxima und flache Passagen (Sattelpunkte) beinhaltet, bei welchen die Steigung jeweils gleich null ist. Wie damit in der Praxis umgegangen wird, erfährst du im Kapitel 3 weiter unten.


👉 Das Minimum direkt mit der Steigung berechnen oder doch nicht?

In der Mathematik gibt es ein Hilfsmittel, mit welchem die Steigung in einem Punkt einer Funktion gefunden werden kann. Dieses Hilfsmittel wird „Differenzialrechnung“ oder kurz „Ableiten“ genannt. Die damit berechnete Steigung wird als „Ableitung“ bezeichnet. Bei einer Funktion der Form ᑌ (mit einem eindeutigen Minimum) ist das Finden dieses Minimums gleichbedeutend mit dem Lösen der Gleichung: Ableitung gleich null.

Die Ableitung für einen gegebenen Punkt auf einer Funktion lässt sich meist mit einem vertretbaren Aufwand berechnen. Das Umgekehrte, aus der Gleichung „Ableitung gleich null“ den zugehörigen Punkt auf der Funktion zu berechnen, ist für die gebräuchlichen Machine-Learning-Verfahren jedoch sehr aufwändig. Daher wird bei den iterativen Verfahren diese Lösung nicht direkt berechnet, sondern schrittweise angenähert.

Falls du genauer wissen willst, warum das so ist, hier klicken!


2. Wo geht es nach unten?


Abb.2: (Negativer) Gradient2).

⚠️ Für die folgenden Überlegungen tun wir so, als würde unsere Fehlerfunktion $J(w)$ so aussehen: ᑌ (d.h. eine Funktion mit einem eindeutigen Minimum).

Gradient
Der Gradient in einem Punkt einer Funktion kann als „Pfeil“ entlang der Steigung in diesem Punkt dargestellt werden. Er wird mit dem Zeichen $\nabla$ gekennzeichnet. Die Länge des Pfeils entspricht dem Wert der Steigung. In Abb.2 ist der Gradient für den Punkt $J(w^♡)$ als grüner Pfeil dargestellt.

💡 Achtung, durch das Vorzeichen der Steigung zeigt der Gradient immer in diejenige Richtung, in welcher die Funktion grösser wird. Der negative Gradient $-\nabla$ zeigt dagegen immer in diejenige Richtung, in welcher die Funktion kleiner wird (blauer Pfeil in der Abbildung).
Gradientenverfahren I
Grundidee: Um auf der Fehlerfunktion „nach unten“ zu gelangen, werden die Gewichte $w$ in Richtung negativer Gradient $-\nabla$ verschoben. Damit dabei kontrolliert werden kann, wie weit verschoben wird, wird der negative Gradient mit einer Zahl multipliziert, der sogenannten Lernrate $\mu$. Somit wird jeweils um $- \mu \cdot \nabla$ verschoben.
✍ Auftrag Gradientenverfahren I

👉 Hier untersuchst du die Grundidee des Gradientenverfahrens.

⚠️ Im Programm wird von der Start-Gewicht-Einstellung $w[0]$ ausgegangen. Die $0$ zeigt an, dass es sich um den nullten „Lernschritt“ handelt. Im Schritt $1$ wird aus $w[0]$ die neue Gewicht-Einstellung $w[1]$ berechnet. Dafür wird $w[0]$ um den blauen Pfeil $- \mu \cdot \nabla$ verschoben.

  1. Verschiebe mit der Maus die Position der Start-Gewicht-Einstellung $w[0]$ und verändere die Lernrate $\mu$ . Beantworte die folgenden Fragen im untenstehenden Textfeld
    1. In welche Richtung zeigt der blaue Pfeil jeweils?
    2. Wie verändert sich die Länge des blauen Pfeils?
    3. Wie gross ist der Pfeil ganz unten beim Minimum?
  2. Vergleiche danach deine Einsichten mit unseren Kommentaren am Ende dieses Auftrags.

Loading ⌛

Unsere Kommentare dazu (zum Öffnen hier klicken)


3. Schrittweise dem Ziel entgegen

💡 Bisher hatten wir den Gradienten der Fehlerfunktion $J(w)$ kurz als $\nabla$ bezeichnet. Im Folgenden werden wir den Gradienten der Fehlerfunktion $J(w)$ wie sonst üblich als $\nabla J(w)$ schreiben.

Gradientenverfahren II
Beim Gradientenverfahren wird die erste Gewicht-Einstellung $w[0]$ zufällig gewürfelt. Im ersten Lernschritt wird die neue Gewicht-Einstellung mit $w[1] = w[0] -\mu \cdot \nabla J(w[0])$ berechnet. Im zweiten Lernschritt mit $w[2] = w[1] -\mu \cdot \nabla J(w[1])$, danach $w[3] = w[2] -\mu \cdot \nabla J(w[2])$ usw. Allgemein ausgedrückt, eine neue Gewicht-Einstellung $w[k+1]$ wird aus der alten Gewicht-Einstellung $w[k]$ berechnet durch:

$w[k+1] = w[k] -\mu \cdot \nabla J(w[k])\quad$ (Gradientenverfahren),

wobei $k$ die Lernschritte durchnummeriert.

Dass dieses Verfahren funktioniert, lässt sich mathematisch beweisen. Es kann gezeigt werden, dass für eine genügend kleine Lernrate $\mu$ für jede Epoche folgendes gilt:

$J(w[k+1]) \le J(w[k])$

D.h. der Fehler $J(w[k])$ wird mit fortschreitenden $k$ entweder kleiner oder bleibt im schlimmsten Fall gleich. Für grosse Lernraten $\mu$ gilt $J(w[k+1]) \le J(w[k])$ jedoch nicht zwingend und es kann sein, dass beim Training der Fehler wild hin und her springt.

Falls du den Beweis sehen willst, hier klicken!


✍ Auftrag Gradientenverfahren

👉 Hier untersuchst du, wie das Gradientenverfahren bei komplexeren Fehlerfunktionen funktioniert.

⚠️ Beim Gradientenverfahren wird die Start-Gewicht-Einstellung $w[0]$ zufällig gewürfelt. In diesem Programm kannst du $w[0]$ durch Verschieben mit der Maus wählen.

  1. Starte das Gradientenverfahren, indem du eine Start-Gewicht-Einstellung $w[0]$ wählst und auf die Maustaste klickst. Es werden fünf Schritte des Gradientenverfahrens durchgeführt.
    💡 Mit einem Klick auf den Button ▶Run kannst du das Programm neu starten.
  2. Wähle verschiedene Start-Gewicht-Einstellung $w[0]$ und verändere die Lernrate $\mu$ mit dem Schieber. Beantworte die folgenden Fragen im untenstehenden Textfeld
    1. Warum ist es sinnvoll, das Gradientenverfahren mehrfach von verschiedenen, zufälligen Start-Gewicht-Einstellung $w[0]$ aus zu starten?
    2. Was passiert, wenn du mit einer Start-Gewicht-Einstellung $w[0]$ nahe dem „Zwischenmaximum“ ᑌᑎᑌ in der Mitte startest?
    3. Was würde passieren, wenn du exakt auf dem „Zwischenmaximum“ ᑌᑎᑌ in der Mitte starten würdest?
    4. Wie wirken sich kleine und grosse Lernraten aus?
    5. Beurteile, wie gut das Gradientenverfahren funktioniert.
  3. Vergleiche danach deine Einsichten mit unseren Kommentaren unten am Programmierfenster.

Loading ⌛

Unsere Kommentare dazu (zum Öffnen hier klicken)


4. Fortsetzung folgt...

Du kennst die Funktionsweise des Gradientenverfahrens und hast bereits Erfahrung im Umgang damit gesammelt. Im 🤖 Teil 4 erfährst du, wie genau ein neuronales Netz aufgebaut ist und wie mit dem Gradientenverfahren der Fehler eines neuronalen Netzes schrittweise minimiert werden kann.


Eigene Notizen

Loading ⌛

1) , 2)
eigene Darstellung, CC0 1.0