3 Punkte von GN⁺ 2026-03-02 | 1 Kommentare | Auf WhatsApp teilen
  • Eine minimale Sprachmodell-Architektur, die den gesamten Prozess von Training und Inferenz eines GPT-Modells in einer einzigen reinen Python-Datei mit 200 Zeilen implementiert
  • Enthält vollständig Datensatz, Tokenizer, automatische Differenzierung, ein GPT-2-ähnliches neuronales Netz, den Adam-Optimierer sowie Trainings- und Inferenzschleifen
  • Lernt auf einem Namensdatensatz und erzeugt neue Namen; macht dabei durch selbst implementiertes Autograd und eine Transformer-Struktur die Kernprinzipien von GPT sichtbar
  • Läuft im Unterschied zu großen LLMs ohne Abhängigkeiten in reinem Python und reduziert alles auf die algorithmische Essenz
  • Wer microgpt versteht, kann die grundlegende algorithmische Struktur großer Modelle wie ChatGPT verstehen

Überblick über microgpt

  • microgpt ist eine minimale GPT-Implementierung in 200 Zeilen Python-Code und kommt ohne Abhängigkeiten von externen Bibliotheken aus
    • Enthalten sind Datensatz, Tokenizer, automatische Differenzierung, eine GPT-2-ähnliche Struktur, der Adam-Optimierer sowie Trainings- und Inferenzschleifen
  • Ein künstlerisches Projekt von Karpathy, das LLMs auf ihr Wesentliches reduziert, in der Tradition von micrograd, makemore und nanogpt
  • Der vollständige Code ist als GitHub Gist, Webseite und Google Colab verfügbar

Datensatz

  • Verwendet wird eine Textdatei mit rund 32.000 Namen, jeweils einer pro Zeile
  • Jeder Name wird als eigenes Dokument behandelt, und das Modell lernt das Muster, um neue Namen zu generieren
  • Beispielausgaben nach dem Training: kamon, ann, karai, jaire, vialan usw.

Tokenizer

  • Ein einfacher zeichenbasierter Tokenizer, der jedem eindeutigen Zeichen eine Ganzzahl-ID zuweist
  • Insgesamt 27 Tokens, bestehend aus den Buchstaben a–z und dem BOS-Token (beginning of sequence)
  • Jedes Dokument wird in der Form [BOS, e, m, m, a, BOS] für das Training eingerahmt

Automatische Differenzierung (Autograd)

  • Die Klasse Value verfolgt Skalarwerte und Gradienten und bildet dabei den Rechengraphen
  • Speichert die lokalen Ableitungen (local gradients) grundlegender Operationen wie Addition, Multiplikation, Potenz, Logarithmus, Exponentialfunktion und ReLU
  • Die Methode backward() führt Backpropagation mit Anwendung der Kettenregel aus
  • Derselbe Algorithmus wie bei .backward() in PyTorch wird direkt auf Skalar-Ebene implementiert

Parameterinitialisierung

  • Das Modell besitzt etwa 4.192 Parameter
  • Dazu gehören Embedding-Tabellen, Attention-Gewichte, MLP-Gewichte und die Ausgabeprojektion
  • Jeder Parameter wird mit Zufallswerten aus einer Gauß-Verteilung initialisiert

Modellarchitektur

  • Eine vereinfachte Form der GPT-2-Architektur mit RMSNorm, ReLU und Residualverbindungen (residual connections)
  • Zentrale Bestandteile:
    • Embedding-Phase: Token- und Positions-Embeddings werden addiert
    • Multi-Head-Attention: Nach Berechnung von Q-, K- und V-Vektoren wird über den KV-Cache auf Informationen früherer Tokens zugegriffen
    • MLP-Block: Ein zweischichtiges Feedforward-Netzwerk für lokale Berechnungen
    • Ausgabestufe: Erzeugt Logits für die Vokabulargröße von 27
  • Der KV-Cache ist auch während des Trainings aktiv, sodass die Rückpropagation durch den Cache fließt

Trainingsschleife

  • In jedem Schritt wird ein Dokument ausgewählt und als [BOS, ... , BOS] tokenisiert
  • Das Modell sagt die Wahrscheinlichkeit des nächsten Tokens voraus und berechnet den Cross-Entropy-Loss
  • Nach der Gradientenberechnung mit loss.backward() werden die Parameter mit dem Adam-Optimierer aktualisiert
  • Die Lernrate folgt einem linearen Decay
  • Über 1.000 Schritte sinkt der Loss ungefähr von 3,3 auf 2,37

Inferenz

  • Nach Abschluss des Trainings werden neue Namen erzeugt, beginnend mit dem BOS-Token
  • In jedem Schritt wird das nächste Token gemäß den Softmax-Wahrscheinlichkeiten gesampelt
  • Mit dem temperature-Wert lässt sich die Kreativität steuern (niedriger = konservativer, höher = vielfältiger)
  • Beispielausgaben: kamon, ann, karai, jaire, vialan, karia, yeran, anna usw.

Ausführung

  • Lässt sich allein mit Python ausführen (python train.py)
  • Das Training ist in etwa einer Minute abgeschlossen, der Loss wird schrittweise ausgegeben
  • Funktioniert ebenso in einem Colab-Notebook

Entwicklungsschritte des Codes

  • Schrittweise Erweiterung von train0.py bis train5.py
    • Bigram → MLP → Autograd → Attention → Multi-head → Adam
  • Jede Stufe ist in den build_microgpt.py-Revisionen des Gists nachvollziehbar

Unterschiede zu realen LLMs

  • Daten: microgpt verwendet 32K Namen, reale LLMs Billionen von Tokens
  • Tokenizer: Zeichenebene vs. BPE-basierte Subwords
  • Autograd: skalarbasiertes Python vs. GPU-Tensoroperationen
  • Architektur: 4K Parameter vs. Hunderte Milliarden Parameter
  • Training: Wiederholung einzelner Dokumente vs. Training mit großen Batches und Mixed Precision
  • Optimierung: einfaches Adam vs. fein abgestimmte Hyperparameter und Scheduling
  • Nachbearbeitung: Entwicklung zur ChatGPT-Form über SFT- und RL-Phasen
  • Inferenz-Infrastruktur: GPU-Verteilung, KV-Cache-Verwaltung, Quantisierung, Speculative Decoding usw.

FAQ-Zusammenfassung

  • Das Modell ist eine mathematische Funktion, die Eingabe-Tokens in Wahrscheinlichkeiten für das nächste Token umwandelt
  • Es gibt kein „Verstehen“, sondern Vorhersagen auf Basis gelernter statistischer Regeln
  • Dieselbe Token-Vorhersageschleife wie bei ChatGPT wird hier in verkleinerter Form umgesetzt
  • „Halluzinationen“ sind ein natürliches Ergebnis probabilistischen Samplings
  • Die Geschwindigkeit ist gering, aber der Kernalgorithmus von LLMs wird vollständig nachgebildet
  • Für bessere Ergebnisse lassen sich Trainingsschritte, Modellgröße und Datensatz anpassen
  • Durch Austausch des Datensatzes können verschiedenste Muster gelernt werden, etwa Städtenamen, Pokémon-Namen oder Gedichte

microgpt ist ein didaktisches und experimentelles Modell, das alle zentralen Algorithmen eines LLM in minimaler Form implementiert und die Funktionsweise großer Sprachmodelle vollständig offenlegt.

1 Kommentare

 
GN⁺ 2026-03-02
Hacker-News-Kommentare
  • Jemand hat microgpt modifiziert und ein kleines GPT gebaut, das koreanische Namen erzeugt
    Es gibt auch eine Webseite, die den gesamten Prozess visualisiert — von der Tokenisierung bis zur Inferenz kann man die gesamte Pipeline erkunden
    Im English GPT lab kann man es selbst ausprobieren

    • So etwas lässt sich auch mit einem deutlich leichteren Modell leicht umsetzen
      Man kann sich am PyTorch-char_rnn-Tutorial orientieren
    • Ich habe nichts mit dem Ersteller der Seite zu tun, aber sie ist äußerst nützlich, um die innere Struktur von LLMs zu lernen
      Tokenisierung, Embeddings, Attention, Loss·Gradienten, Training, Inferenz und der Vergleich mit einem Real GPT werden gut erklärt
    • Mit „modifiziert“ ist eigentlich nur gemeint, dass die Liste englischer Namen durch koreanische Namen ersetzt wurde
      Die Seite selbst ist eher eine KI-generierte Visualisierung, die auf dem ursprünglichen Blogpost basiert
  • Ich habe microgpt nach C++ portiert
    Code-Link
    Doppelt so viele Codezeilen, aber zehnmal schneller
    Der schwierigste Teil war, die Value-Klasse in C++ auszudrücken, und am Ende habe ich shared_ptr verwendet

    • Ich habe explizite Backpropagation ohne autodiff implementiert, und das war in Python achtmal schneller
  • Ich habe mich gefragt, was genau „Halluzination“ bedeutet
    Das Modell sampelt letztlich nur Tokens aus einer Wahrscheinlichkeitsverteilung und hat keinen Begriff von Wahrheit
    Daraus ergibt sich die Frage, ob ein LLM einen Konfidenzwert für seine eigenen Antworten haben kann

    • Das Modell kann zwar die confidence seiner Ausgabeverteilung melden, aber das ist nicht notwendigerweise korrekt kalibriert
      Vortrainierte Modelle sind kalibriert, aber nach dem Befolgen von Anweisungen (Post-Training) geht das kaputt
      Verwandte Forschung: Paper 1, Paper 2
    • Ein Konfidenzwert ist bedeutungslos, wenn man die Sampling-Methode der Trainingsdaten nicht kennt
      Wie ein Konfidenzintervall in der Statistik ohne Kenntnis der Grundgesamtheit haben auch LLM-Wahrscheinlichkeiten keine direkte Verbindung zur realen Welt
      Letztlich ist ein LLM wie jemand, der nur Bücher gelesen hat, aber keine Erfahrung mit der Welt besitzt
    • Tatsächlich gibt ein LLM eine Wahrscheinlichkeitsverteilung zurück, aus der dann Tokens gesampelt werden
      Diese Wahrscheinlichkeit ist aber nicht die „Wahrscheinlichkeit, dass es wahr ist“, sondern „die Wahrscheinlichkeit, dass ich in dieser Situation dieses Token ausgebe“
    • Generierung ist möglich, aber ohne die ‚echte Verteilung‘ zu kennen ist diese Konfidenz bedeutungslos
    • Sätze wie „Ich weiß es nicht genau, aber wahrscheinlich ist es so“ erscheinen nicht in der Ausgabe, existieren aber im internen Inferenzprozess
  • Ich habe microgpt zum Lernen nach Rust portiert
    microgpt-rs
    Am schwierigsten war es, die autograd-Graphstruktur als Rust-Typen auszudrücken
    Derzeit passe ich es an, damit es per WebAssembly im Browser laufen kann, und ich plane dazu einen Blogpost
    Karpathys Code hat wirklich ein poetisches und kompaktes Design

    • Ableitungen in der Gewichtsstruktur zu speichern wirkt ziemlich hacky, aber die meisten machen es so
    • Ich würde das auch gern einmal in einer anderen Sprache implementieren
  • Der Code ist schön und gut lesbar, aber ich wünschte, es gäbe eine Zeile-für-Zeile-Erklärung mit Kommentaren wie bei backbone.js
    Siehe die Backbone-Dokumentation

    • Der kommentierte Quelltext von Backbone wurde mit Docco erzeugt
      Das Docco-Projekt ist ebenfalls ein großartiges Tool vom selben Ersteller
    • Das ist ein wirklich schönes Beispiel für Literate Programming
      Es gibt auch eine HTML-Version des Codes
    • Es gibt auch Karpathys Walkthrough-Blog
      microgpt-Blog
    • Es gibt auch den Vorschlag, einfach ein leistungsfähiges LLM die Erklärung schreiben zu lassen
  • Dank Karpathys Videos und Code habe ich das Gefühl, zum ersten Mal Gradientenabstieg, Backpropagation und die Kettenregel wirklich verstanden zu haben
    Wenn ich nur die Mathematik gesehen habe, war ich verwirrt, aber zusammen mit dem Code wurde es klar
    Für mich persönlich war das so etwas wie ein Lebenserfolgserlebnis

    • Ich möchte versuchen, das ebenfalls intuitiv zu erklären
      Wie Karpathy sagte, ist es wichtig, es anderen beizubringen, wenn man es wirklich verstehen will
  • Ich bin überrascht, dass dieses Projekt erst jetzt auf HN gelandet ist
    Ich habe eine 35-zeilige JS-Version und eine Python-Version namens PicoGPT gebaut,
    die direkt im Web ausführbar ist
    Es ist sogar ein ultrakleines LLM, das per QR-Code ausführbar ist

    • Ich bin auch überrascht. Es ist erstaunlich, dass so ein tolles Projekt erst nach zwei Wochen auf der HN-Startseite gelandet ist
      Verwandte Threads: Link 1, Link 2
    • Tatsächlich wurde es schon früher gepostet — früherer Beitrag
  • Ich habe den microgpt-Code in einen visualisierten Blogpost verwandelt
    Blog-Link
    Er zeigt den Codefluss interaktiv Schritt für Schritt

    • Es hieß, dass nach dem Training Namen wie „kamon“, „karai“, „anna“ und „anton“ generiert würden,
      aber tatsächlich sind alle vier im Datensatz enthalten
    • Dieser Beitrag wäre es wert, separat als Artikel auf HN gepostet zu werden
    • Normalerweise bin ich bei Blogposts, die stark mit LLM-Hilfe geschrieben wurden, eher kritisch, aber das hier ist ein wirklich hervorragendes Beispiel
    • Selbst für mich als ML-Anfänger war dieses Material genauso hilfreich wie Karpathys Original
    • Wirklich großartige Arbeit
  • Der aktuelle ‚micro‘-Trend in der KI ist interessant
    Statt Modelle einfach nur größer zu machen, wird bei kleinen und fokussierten Modellen die Effizienz immer wichtiger
    Ich nutze tatsächlich Gemini Flash für Domänenanalyse, und das Verhältnis aus Geschwindigkeit und Kosten ist deutlich besser
    Schon der Unterschied bei der Latenz verändert, welche Art von Produkten man bauen kann

    • Aber das hier ist eher ein micro-Modell für Lernzwecke als für reale Anwendungen
  • Für den Namen microgpt ist es eigentlich kleiner als nanogpt, deshalb fände ich picogpt passender
    Trotzdem ein großartiges Projekt