EnglishGitHub
Prototyppackages/neuronal-network/src

Neuronal Network

@ralphschuler/neuronal-network

Führt numerische Vorwärtsberechnung und gradientenbasiertes Lernen mit Formprüfungen aus.

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

Führt numerische Vorwärtsberechnung und gradientenbasiertes Lernen mit Formprüfungen aus. Das didaktische Sigmoid-Netz nutzt Gradienten des quadratischen Fehlers. Es ist kein Tensor- oder GPU-Framework.

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 / LayerRepräsentiert numerische Aktivierungen und gewichtete Verbindungen.
Network.activate / trainBerechnet Vorwärtsausgaben und aktualisiert Parameter.
toObject()Serialisiert Graph-IDs ohne Zyklen.

05 · Selbst bauen

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.
Konzeptskizze · kann ausgelassene Helfer verwenden
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 solltest du testen?

  • 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.

Selbst ausprobieren

Formuliere die erste Prüfaussage als fehlschlagenden Test, implementiere die kleinste Korrektur und ergänze einen Grenzfall.

Forward eines kleinen Netzes stimmt mit handberechneten Werten überein.

Ansatz vergleichen

Dein Test sollte beim gezielten Verletzen der Invariante fehlschlagen und nach der Korrektur wieder bestehen. Halte den Aufbau deterministisch und prüfe ein beobachtbares Ergebnis.

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

Das didaktische Sigmoid-Netz nutzt Gradienten des quadratischen Fehlers. Es ist kein Tensor- oder GPU-Framework.

08 · Weiterdenken

Quellcode und verwandte Ideen

yarn tsx packages/neuronal-network/examples/basic.ts