Grokking
Grokking ist eine verzögerte Verallgemeinerung: Ein Netz passt früh auf seine Trainingsdaten, doch viele Schritte später steigt seine Validierungsgenauigkeit sprunghaft vom Zufallsniveau auf nahezu perfekte Werte.
Grokking ist verzögerte Generalisierung: Ein neuronales Netz erreicht früh eine perfekte Genauigkeit auf seinen Trainingsdaten, bleibt auf den Validierungsdaten lange auf Zufallsniveau und generalisiert dann plötzlich – lange nachdem es bereits überangepasst zu sein scheint. Power et al. (2022) bei OpenAI prägten den Begriff, nachdem sie kleine Transformer mit algorithmischen Aufgaben wie modularer Arithmetik trainiert hatten. Dabei stieg die Genauigkeit auf den Validierungsdaten lange nach der Sättigung der Trainingsgenauigkeit von Zufallsniveau auf 100 %. Das Wort stammt aus Robert Heinleins Roman Stranger in a Strange Land. Darin bedeutet „to grok“, etwas vollständig zu verstehen.
Wie Grokking abläuft#
Die modulare Addition ist die klassische Grokking-Aufgabe: Das Netz sieht Paare (a, b) und muss (a + b) mod p ausgeben. Für das Training steht nur ein Teil aller Paare zur Verfügung. Der folgende Lauf trainiert ein kleines mehrschichtiges Perzeptron mit PyTorchs AdamW-Optimierer auf 30 % der 9.409 Paare für p = 97 und ist auf einer CPU in weniger als einer Minute abgeschlossen:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
p = 97 # task: predict (a + b) mod 97 from one-hot encodings of a and b
a, b = torch.cartesian_prod(torch.arange(p), torch.arange(p)).T
x, y = torch.cat([F.one_hot(a, p), F.one_hot(b, p)], dim=1).float(), (a + b) % p
idx = torch.randperm(p * p)
train, val = idx[: p * p * 3 // 10], idx[p * p * 3 // 10 :] # train on 30% of all pairs
model = torch.nn.Sequential(torch.nn.Linear(2 * p, 256), torch.nn.ReLU(), torch.nn.Linear(256, p))
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1.0) # strong weight decay
for step in range(1, 20001):
loss = F.cross_entropy(model(x[train]), y[train])
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step % 4000 == 0:
train_acc, val_acc = [(model(x[i]).argmax(1) == y[i]).float().mean().item() for i in (train, val)]
print(f"step {step:5d}: train accuracy {train_acc:.2f}, validation accuracy {val_acc:.2f}")Bei Schritt 4.000 beträgt die Trainingsgenauigkeit bereits 1,00, während die Validierungsgenauigkeit bei 0,00 liegt. Danach steigt die Validierungsgenauigkeit auf 0,16 bei Schritt 8.000, 0,54 bei Schritt 12.000, 0,84 bei Schritt 16.000 und 0,97 bei Schritt 20.000. Mit weight_decay=0.0 bleibt die Validierungsgenauigkeit desselben Laufs während aller 20.000 Schritte bei 0,00.
Nanda et al. (2023) erklärten das Plateau, indem sie einen einschichtigen Transformer zurückentwickelten, der auf modularer Addition trainiert worden war. Das Netz lernt, Addition in eine Rotation um einen Kreis umzuwandeln, und nutzt dazu diskrete Fourier-Merkmale und trigonometrische Identitäten. Das Training verläuft in drei kontinuierlichen Phasen: Auswendiglernen, Aufbau der Schaltung und Bereinigung. Die generalisierende Schaltung wächst allmählich, während die Validierungsgenauigkeit unverändert bleibt. Der sprunghafte Anstieg erfolgt, wenn Gewichtsabnahme die auswendig gelernte Lösung entfernt, die die Ausgaben bis dahin noch dominiert hatte.
Was Grokking auslöst#
- Regularisierung: Gewichtsabnahme war in den ursprünglichen Experimenten die wirksamste Maßnahme. Ohne sie generalisiert der obige Lauf überhaupt nicht.
- Datensatzgröße: Bei kleineren Anteilen der Trainingsdaten ist deutlich mehr Optimierung nötig, bevor das Netz generalisiert. Unterhalb eines Schwellenwerts generalisiert es innerhalb eines praktikablen Rechenbudgets nie.
- Gewichtsnorm: Omnigrok stellt einen Zusammenhang zwischen Grokking und der Größe der Gewichte her, da Lösungen, die generalisieren, eine kleinere Gewichtsnorm haben als auswendig gelernte Lösungen. Ausgehend von großen Anfangsgewichten lösten die Autorinnen und Autoren Grokking bei Aufgaben zu Bildern, Sprache und Molekülen aus. Durch eine Begrenzung der Gewichtsnorm beseitigten sie es bei algorithmischen Aufgaben.
- Numerische Stabilität: Prieto et al. (2025) stellten fest, dass das Training mit Kreuzentropie ohne Regularisierung die Logits immer weiter skaliert, bis Gleitkommafehler in der Softmax das Lernen stoppen. Sie nennen diesen Effekt Softmax-Kollaps. Ihre StableMax-Aktivierung und ihr ⊥Grad-Optimierer erzeugen Grokking ohne Gewichtsabnahme.
Grokking im Vergleich zu verwandten Konzepten#
- Überanpassung: Eine Lücke zwischen der Leistung auf Trainings- und Validierungsdaten, die bestehen bleibt oder größer wird. Beim Grokking schließt sich die Lücke bei weiterem Training von selbst.
- Doppelter Abstieg: Der Testfehler sinkt, steigt und sinkt erneut, wenn Modellgröße oder Trainingsdauer zunimmt. Der doppelte Abstieg über Epochen ist eine weitere Form verzögerter Verbesserung: Dabei steigt der Testfehler während des Trainings zunächst eine Weile an, bevor er wieder sinkt.
- Mechanistische Interpretierbarkeit: Die Untersuchung der Algorithmen in trainierten Netzen. Grokking bei modularer Arithmetik wurde zu einem der wichtigsten Fallbeispiele, weil sich der erlernte Algorithmus vollständig auslesen ließ.
Grokking in der Praxis#
Grokking tritt am deutlichsten bei kleinen algorithmischen Datensätzen auf, für die eine einzige exakte Regel gilt. Es ist auch für das Versuchsdesign relevant, denn beim frühzeitigen Abbruch endet ein Lauf, sobald sich die Validierungsmetrik nicht mehr verbessert. Dadurch würde ein Grokking-Lauf während seines Plateaus abgebrochen. Das Training von Ultralytics YOLO wird standardmäßig nach patience Epochen ohne Verbesserung der Validierungsleistung beendet (100). Wenn patience=0 gesetzt ist, wird jede Epoche ausgeführt.










