GitHub
Prototyppackages/neuronal-network/src

Neuronal Network

@ralphschuler/neuronal-network

Skizziert Layer, Neuronen und Verbindungen; ein lernfähiges Netz braucht jedoch echte Aktivierungen, Gradienten und Gewichtsupdates.

neural networkbackpropagationmatrix

01 · Problem

Wofür braucht man das?

Ein dichtes neuronales Netz approximiert eine Funktion, indem es gewichtete Summen durch nichtlineare Aktivierungen schickt und Fehler rückwärts verteilt.

02 · Denkmodell

Das mentale Modell

Layer sind Matrizen statt rekursiver Objektgraphen. Forward erzeugt Aktivierungen; Backprop berechnet Deltas; ein Optimizer aktualisiert Gewichte und Biases.

Im Repository

Neuron, Layer und Network bilden einen rekursiven Graphen. Bias und propagate verändern nichts, train kann nicht lernen, Shapes sind ungeprüft und Serialisierung läuft in Zyklen.

03 · Kontrollfluss

Was passiert in welcher Reihenfolge?

  1. Eingabevektor auf erwartete Layerbreite prüfen.
  2. Pro Layer Matrix-Vektor-Produkt plus Bias berechnen und aktivieren.
  3. Loss zwischen Ausgabe und Ziel bestimmen.
  4. Deltas mit Ableitungen rückwärts durch die Layer propagieren.
  5. Gewichte und Biases um Learning-Rate mal Gradient aktualisieren.

04 · Bauteile

Die entscheidenden Verträge

Neuron<T> Speichert Verbindungen und Bias, nutzt den Bias im Repository aber nicht.
Layer<T> Erzeugt mehrere Neuronen und vollständige Verbindungen.
Network<T>.activate / train Soll Forward und Training ausführen; propagate aktualisiert gegenwärtig keine Parameter.
toObject Versucht den zyklischen Verbindungsgraph rekursiv zu serialisieren.

05 · Build it yourself

Selbst implementieren

Implementiere ein kleines numerisches Dense-Netz und beweise Lernen zunächst an XOR, bevor du Generics oder Graphen ergänzt.

  1. Speichere Gewichte als number[][] und Biases als number[] mit validierten Shapes.
  2. Implementiere Forward inklusive Aktivierung und bewahre Zwischenwerte für Backprop auf.
  3. Berechne Gradienten und aktualisiere Parameter mit einer expliziten Learning Rate.
minimal.ts · unabhängig vom Package
type Layer = { weights: number[][]; biases: number[] };

function forward(input: number[], layers: Layer[]) {
  const activations = [input];
  for (const layer of layers) {
    const previous = activations.at(-1) as number[];
    const next = layer.weights.map((row, output) => {
      const sum = row.reduce((value, weight, i) => value + weight * previous[i], 0);
      return 1 / (1 + Math.exp(-(sum + layer.biases[output])));
    });
    activations.push(next);
  }
  return activations;
}

06 · Verifizieren

Was du testen solltest

  • Forward eines kleinen Netzes stimmt mit handberechneten Werten überein.
  • Numerischer Gradient und Backprop-Gradient liegen innerhalb einer engen Toleranz.
  • XOR-Loss sinkt reproduzierbar unter einen festgelegten Wert.

07 · Grenzen

Kompromisse und Stolperfallen

  • Objektgraphen sind anschaulich, Matrizen aber einfacher, schneller und serialisierbar.
  • Math.random ohne Seed verhindert reproduzierbare Trainingsfehler.
  • Ein Lernbeispiel ist keine produktive ML-Bibliothek; numerische Stabilität und Batching fehlen.
Wichtig

Der vorhandene train-Aufruf verändert keine Gewichte. Das Modul ist eine Graphskizze, kein trainierbares Netz.

08 · Weiterdenken

Quellcode und Nachbarn

Originalcode auf GitHub ansehen