Neural Nets
Eine Sammlung von mit einander vernetzten Neuronen.
Netze sind typischerweise in Schichten aufgebaut, wobei zwischen drei Kategorien unterschieden wird.
- Eingabeschicht
- Verdeckte Schicht
- Ausgabeschicht
Ein- und Ausgabeschichten bestehen aus einem Neuron für jedes Feature das ausgewertet wird. Ein Netz bei dem aus einem Vektor der Größe eine Ja / Nein Entscheidung berechnet wird hat also Neuronen in der Eingabeschicht und ein einzelnes Neuron als Ausgabe.

Typischerweise ist jedes Neuron mit allen Neuronen der darauf folgenden Schicht verknüpft. Die Anzahl der Verbindungen kann also extrem schnell ansteigen.
Die Ausgabe eines Neurons wird unverändert an alle mit ihm verbundenen Neuronen weitergegeben. Nicht benötigte Verbindungen können mit gewichtet werden. So sind sie effektiv deaktiviert.
Es ist auch möglich Neuronen mit sich selbst ode auch vorangegangenen Neuronen zu verbinden. Man spricht hier von Rekurrenten Neuronalen Netzen (RNNs)
Netze ohne solche Rückkopplung heißen Feed-Forward-Netze
Neuronen
Neuronen sind die Grundbausteine Neuraler Netze. Jedes Neuron stellt eine einfache Funktion von Mehreren Variablen dar, die aus allen Eingabedaten eine Ausgabe berechnet.

Da die Ausgabe eines Neurons als Eingabe für ein weiteres verwendet wird, werden normierte Aktivierungsfunktionen eingesetzt.
Es werden also in einem Neuron immer zwei Berechnungen durchgeführt.
- Die gewichtete Summe der Eingänge mit den spezifischen Gewichten
- Das Ergebnis , wobei eine beliebige Aktivierungsfunktion darstellt
Aktivierungsfunktion
Eine Aktivierungsfunktion bestimmt, wie mit den Eingängen eines Neurons verfahren wird.
Häufig wird die sog. “Sigmoid-Funktion” verwendet.

Sie liefert für jeden Eingabewert eine Ausgabe im Intervall und ist differenzierbar.
Ebenfalls bekannt sind die Identity-Funktion und die ReLU-Funktion.
Sie sind beide sehr recheneffizient und geben positive Eingaben unverändert weiter. Die Identity-Funktion gibt auch Negative Werte weiter, sie verändert die Zahlen nicht. Bei der ReLU-Funktion wird eine Negative Eingabe in eine umgewandelt.
Gradientenabstieg
Ist ein Verfahren zur Lösung numerischer Optimierungsprobleme.
Bei einem Neuralen Netz wird im Training für jeden der Datensätze die Ausgabe mit dem Soll-Wert verglichen. Ihre Differenz wird quadriert und aufsummiert.
Somit ergibt sich für den Gesamtfehler des Netzes
Bei einem perfekten Netz würde dieser Gesamtfehler den Wert erreichen.
Ziel des Trainings ist also, eine Kombination aus Gewichten für die einzelnen Neuronen zu finden, bei denen minimal wird.
Loss-Function
Diese Vorschrift um den Gesamtfehler zu berechnen ist nicht die einzige Möglichkeit.
Ziel des Modells ist es nur, diesen Fehler zu minimieren. Durch die Wahl der Fehlerfunktion kann also gesteuert werden welche Art von Fehler stärker ins Gewicht fällt und bevorzugt vermieden werden soll.
Der Gradient ist ein mathematisches Konzept das bei Funktionen von Mehreren Variablen die Richtung der größten Steigung vorgibt.
Für eine Funktion von Variablen ist der Gradient der Vektor der Partiellen Ableitungen von nach jeder Variable.
Einsetzen eines Punktes liefert den Vektor in dessen Richtung die Funktion am stärksten zunimmt.
In diesem Beispiel muss also in Richtung des Vektors gegangen werden.
Parameter
Bei einem Neuronalen Netz hat die Funktion deren Minimum gesucht wird so viele Parameter, wie das Netz Gewichte. Die Zahl steigt also sehr schnell und häufig auf mehrere Tausend bis Millionen Parameter an. Bei Besonders komplexen Modellen wie LLMs werden auch viele Milliarden Parameter erreicht.
Ablauf
Der Algorithmus startet an einem Punkt im Parameterraum. Also einer beliebigen Kombination von Parametern. Diese kann zufällig gewählt sein oder gezielt belegt sein.
An diesem Punkt wird der Gradient berechnet.
Die Berechnung des Gradienten ist sehr aufwändig. Es müssten tausende und Millionen von Differentialgleichungen gelöst werden, was das Ganze praktisch unmöglich macht. Mit Backpropagation skaliert der Rechenaufwand nur noch linear. So wird das Berechnen großer Gradienten und damit das Training fortschrittlicher Modelle möglich.
Durch einen Schritt in die entgegengesetzte Richtung wird ein neuer Punkt ausgewählt. Dabei wird die Größe des Schritts von der Lernrate bestimmt.
Diese Schritte werden wiederholt, bis der Gradient nahe null ist (also eine Extremstelle gefunden wurde), oder ein Iterationslimit erreicht ist.
Die einzelnen Koordinaten von stellen die Gewichte aller Verbindungen dar.
Optimierung
Die Berechnung des Gesamtfehlers wird sehr oft durchgeführt. Ihre Berechnungszeit hängt dabei auch von der Menge an Trainingsdaten ab.
Um die Berechnung zu beschleunigen werden in jedem Durchlauf nur eine zufällig ausgewählte Teilmenge der Trainingsdaten verwendet.
Dieses Verfahren heißt Stochastic Gradient Descent
Dabei wird jede Teilmenge der Daten als Batch bezeichnet. Sobald alle Batches verwendet wurden, ist eine Trainingsepoche vergangen.

Backpropagation
Backpropagation ist ein effizienter Algorithmus zur Bestimmung des Gradienten für das Gradientenabstiegsverfahren.
Im Gesamtablauf des Trainings ordnet er sich wie folgt ein:
- Vorwärtsdurchlauf:
- Eine Eingabe wird durch das neuronale Netz geleitet
- Die entsprechende Ausgabe wird berechnet
- Fehlerberechnung
- Die Ausgabe wird mit der gewünschten Ausgabe verglichen
- Der Unterschied wird verwendet um den Gesamtfehler zu berechnen
- Rückwärtsdurchlauf (Backpropagation)
- Der Fehler wird von der Ausgabeschicht zur Eingabeschicht rückwärts propagiert
- Die Gewichte werden entsprechend dem Gradienten angepasst, abhängig von ihrem Einfluss auf den Fehler
- Lernschritt
- Bei erneuter Eingabe der Trainingsdaten nähert sich die Ausgabe dem gewünschten Ergebnis
Die Veränderung des Gewichts zwischen Neuron und Neuron ( ist näher an der Eingabe als ) wird berechnet durch:
Die Veränderung ist also Proportional zur Lernrate und der Partiellen Ableitung des Gesamtfehlers nach diesem Gewicht. Der Wert entspricht dem Produkt aus und , wobei der aktuellen Ausgabe des Neurons entspricht und das Fehlersignal des Neurons ist.
Man muss also wissen, welche Ausgabe das vorherige Neuron geliefert hat, und wie falsch das darauf folgende deshalb lag.
Das Fehlersignal eines einzelnen Neurons berechnet sich wie folgt:
- ist dabei der Wert der Ableitung der Aktivierungsfunktion für die erhaltene Eingabe des Neurons.
- ist die Ausgabe des Neurons (Es muss sich in der letzten Schicht befinden. Im allgemeinen Fall taucht der Wert nicht auf)
- ist die erwartete Ausgabe (Das Label der Trainingsdaten)
- ist das Fehlersignal des Neurons der nachfolgenden Schicht
- ist das Gewicht der Verbindung von Neuron (dem aktuellen) zu Neuron
Hyperparameter
Hyperparameter sind Parameter, die die Struktur eines Lernmodells beeinflussen.
- Anzahl Layer und Neuronen pro Schicht bei einem Neuronalen Netz oder die Aktivierungsfunktion einzelner Neuronen
- Der Kernel bei einer Support Vector Machine
- Die Maximale Tiefe eines Entscheidungsbaums
Die Parameter eines Modells werden beim Training angepasst.
Die Hyperparameter bestimmen die Struktur des Modells.
Auswahl von optimalen Hyperparametern
Die Wahl ist nicht besonders transparent. Man kann nicht wirklich abschätzen, welche Kombination von Hyperparametern zu optimalen Ergebnissen führt.
I
Gridsearch ist ein Verfahren, bei dem verschiedene Kombinationen getestet werden, um empirisch ein Optimum zu bestimmen.
Klausuraufgabe
Einfluss einzelner Neuronen auf das Ergebnis berechnen (Backpropagation Seite 294)
Fehler wird von der Ausgabe Schichtenweise rückwärts durch das gesamte Netz berechnet
Bis Montag 3. November bestmögliches Modell für Handschrift Erkennung (MNIST-Datensatz)