Neuronen und Schichten
Ein künstliches neuronales Netz besteht aus Neuronen, die in Schichten angeordnet sind. Du baust zuerst die Klasse Neuron und dann die Klasse Schicht.
Das biologische Vorbild
Ein biologisches Neuron empfängt Signale über Dendriten, verarbeitet sie im Zellkörper und gibt Signale über das Axon weiter. Ein künstliches Neuron ist eine vereinfachte Nachbildung: Es empfängt Zahlen, gewichtet sie, summiert sie und gibt eine Zahl weiter.
flowchart LR
subgraph "Eingabeschicht"
E1["Neuron 1"]
E2["Neuron 2"]
end
subgraph "Verdeckte Schicht"
V1["Neuron 1"]
V2["Neuron 2"]
V3["Neuron 3"]
end
subgraph "Ausgabeschicht"
A1["Neuron 1"]
end
E1 --> V1
E1 --> V2
E1 --> V3
E2 --> V1
E2 --> V2
E2 --> V3
V1 --> A1
V2 --> A1
V3 --> A1
Die drei Schichttypen
- Eingabeschicht: Empfängt die Rohdaten. Jedes Neuron steht für ein Merkmal (z.B. Gewicht, Süßigkeit).
- Verdeckte Schicht(en): Liegen zwischen Ein- und Ausgabe. Hier passiert die eigentliche Verarbeitung. „Verdeckt" heißt: von außen nicht sichtbar.
- Ausgabeschicht: Liefert das Ergebnis (z.B. „Apfel" oder „Birne").
Die Neuron-Klasse
Ein Neuron hat Gewichte — eines für jedes Neuron der vorherigen Schicht — und einen Bias-Wert (nicht zu verwechseln mit Bias als Bewertungskriterium aus Kapitel 3).
Bevor du das Programm ausführst: Berechne auf Papier. Die Gewichte sind 0.5 und -0.3, der Bias ist 0.1, die Eingaben sind 1.0 und 0.8. Was ist die Summe?
Tipp
summe = bias + gewicht[0] * eingabe[0] + gewicht[1] * eingabe[1] summe = 0.1 + 0.5 * 1.0 + (-0.3) * 0.8 summe = 0.1 + 0.5 - 0.24 summe = 0.36
Kommazahlen sehen auf dem Bildschirm manchmal anders aus als auf dem Papier. Die Online-IDE gibt eine double-Variable ohne .0 aus — aus 0.2 wird 0.2, aus 2.0 aber 2. Und weil Kommazahlen im Rechner nur näherungsweise gespeichert werden, kann statt 0.2 auch einmal 0.20000000000000012 erscheinen. Das ist kein Fehler in deiner Rechnung: Vergleiche solche Werte immer nur auf die ersten Nachkommastellen.
Ein Neuron berechnet die gewichtete Summe seiner Eingaben plus einen Bias. Die Gewichte bestimmen, wie stark jede Eingabe zählt. Der Bias verschiebt das Ergebnis. Die Aktivierungsfunktion (kommen wir in der nächsten Lektion) entscheidet, was das Neuron weitergibt.
a) Verifiziere deine Papierberechnung mit dem Programm.
b) Ändere beide Gewichte auf 0.0. Was ist die Ausgabe? Warum?
c) Erstelle ein Neuron mit 3 Eingaben. Setze alle Gewichte auf 0.2 und den Bias auf -1.0. Berechne die Ausgabe für die Eingaben {2.0, 3.0, 1.0}.
Tipp zu b)
Wenn alle Gewichte 0 sind, fällt die ganze Summe gewichte[i] * pEingabe[i] weg — egal, wie die Eingaben aussehen. Was bleibt dann von summe übrig?
Ein Neuron zum Anfassen
Dasselbe Neuron wie im Programm: zwei Eingaben, zwei Gewichte, ein Bias. Die Dicke einer Verbindung zeigt, wie groß das Gewicht ist, die Farbe sein Vorzeichen. Der Bias hat eine eigene Verbindung, die von einer festen 1 ausgeht — genau so steht er auch im Code, als Summand ohne Eingabe.
a) Die Regler stehen auf den Werten aus dem Programm. Kommt dieselbe Ausgabe heraus, die du berechnet hast?
b) Drücke auf Schritt für Schritt. Welche Zahl steht im Σ-Knoten, bevor du weiterdrückst?
c) Stelle beide Eingaben auf 0. Welcher Wert bleibt übrig — und warum gerade dieser?
d) Setze das Gewicht w₂ auf 0. Verändert x₂ die Ausgabe noch? Was bedeutet ein Gewicht von 0 also für eine Eingabe?