Rückblick
Du hast ein komplettes neuronales Netz in Java gebaut — mit Neuronen, Schichten, Aktivierungsfunktionen und Forward Propagation — und die Grundidee der Backpropagation kennengelernt.
Das kann ich jetzt
- Ich kann die Bestandteile eines neuronalen Netzes nennen. (4.1)
- Ich kann die Rolle der Aktivierungsfunktion erklären. (4.2)
- Ich kann Forward Propagation beschreiben. (4.3)
- Ich kann die Grundidee der Backpropagation und die Rolle der Lernrate erklären. (4.4)
- Ich kann die OO-Struktur eines neuronalen Netzes beschreiben (Neuron → Schicht → Netz). (4.5)
Das Wichtigste auf einen Blick
| Begriff | Bedeutung |
|---|---|
| Neuron | Berechnet gewichtete Summe + Bias, wendet Aktivierungsfunktion an |
| Gewichte | Bestimmen, wie stark jede Eingabe zählt |
| Aktivierungsfunktion | Wandelt Summe in Ausgabe um (Sigmoid, ReLU) |
| Eingabeschicht | Empfängt die Rohdaten |
| Verdeckte Schicht | Verarbeitet die Daten (nicht von außen sichtbar) |
| Ausgabeschicht | Liefert das Ergebnis |
| Forward Propagation | Daten fließen vorwärts durch das Netz |
| Backpropagation | Fehler wird rückwärts gereicht, Gewichte werden angepasst |
| Lernrate | Bestimmt die Schrittgröße der Gewichtsanpassung |
Ein neuronales Netz ist eine Kette von 1:n-Assoziationen: Netz hat Schichten, Schichten haben Neuronen, Neuronen haben eine Aktivierungsfunktion (Polymorphie). Forward Propagation ist der Vorwärtsdurchlauf, Backpropagation ist das Zurückrechnen des Fehlers. Die Lernrate steuert, wie schnell das Netz lernt.
Gemischte Aufgaben
Aufgabe 1: Forward Propagation auf dem Papier
Ein Netz hat zwei Eingaben, zwei verdeckte Neuronen und ein Ausgabeneuron. Überall wird ReLU als Aktivierungsfunktion verwendet.
| Neuron | Gewichte | Bias |
|---|---|---|
| verdeckt 0 | 1,0 und −1,0 | 0,5 |
| verdeckt 1 | 0,5 und 0,5 | −1,0 |
| Ausgabe | 2,0 und −1,0 | 0,0 |
a) Berechne die Ausgabe des Netzes für die Eingabe (2,0 | 1,0). Notiere alle Zwischenwerte.
b) Berechne die Ausgabe für die Eingabe (0,0 | 3,0).
c) Bei einer der beiden Eingaben ist ein verdecktes Neuron vollständig abgeschaltet. Bei welcher, und was heißt das für die Ausgabe?
d) Wie viele Gewichte und wie viele Bias-Werte hat dieses Netz insgesamt? Wie viele Zahlen müssten beim Training also angepasst werden?
Tipp 1: Reihenfolge
Rechne schichtweise: erst beide verdeckten Neuronen vollständig (Summe, dann ReLU), dann erst das Ausgabeneuron. Dessen Eingaben sind die beiden ReLU-Ausgaben, nicht die ursprünglichen Zahlen.
Tipp 2: ReLU
ReLU(x) = x, wenn x positiv ist, sonst 0. Vergiss den Bias nicht — er wird addiert, bevor ReLU angewendet wird.
Aufgabe 2: Das Netz erweitern
Nimm das Programm aus Lektion 4.5 als Ausgangspunkt.
a) Ergänze die Klasse Netz um eine Methode int anzahlGewichte(), die zurückgibt, wie viele Gewichte und Bias-Werte das Netz insgesamt hat. Du brauchst dafür in Schicht und Neuron jeweils eine passende Hilfsmethode.
b) Baue ein zweites Netz mit der Struktur {2, 4, 4, 1} und lass dir für beide Netze die Anzahl ausgeben.
c) Erkläre, warum berechne in der Klasse Netz nicht geändert werden muss, obwohl das Netz jetzt eine Schicht mehr hat.
Tipp 1: Wo zählt man?
Nur das Neuron kennt seine Gewichte. Gib ihm eine Methode, die gewichte.length + 1 zurückliefert (das +1 ist der Bias). Schicht addiert über ihre Neuronen, Netz über seine Schichten.
Tipp 2: zu c)
Schau dir die Schleife in Netz.berechne genau an. Woher weiß sie, wie viele Durchläufe sie machen muss?