CUDA berichtet Dokumentenindizes
Ein CUDA-Trainer weiß, welches Dokument gesampelt wurde
Jeder Trainingsschritt zieht eine Sequenz aus einer .btok-Binärdatei, die viele Dokumente hintereinander packt. CUDA protokolliert einen Dokumentenindex neben dem Verlust: step 47213, source=gutenberg, doc=128407, loss=2.81. Ein Proxy sammelt diese Berichte & pflegt eine Menge eindeutiger Dokumentenindizes pro Quelle.
Von Zählungen zu Abdeckung
Abdeckung einer Quelle = unique_docs_seen / n_docs. Einige Beispiele:
| Quelle | n_docs | unique gesehen | Abdeckung |
|---|---|---|---|
| gutenberg | 512.000 | 154.000 | 30,1% |
| hermes3-general | 67.395 | 47.176 | 70,0% |
| dictionary | 88.000 | 88.000 | 100,0% |
| synthetic-chat | 1.400 | 1.400 | 100,0% |
Kleine Quellen sättigen sich schnell. Große Quellen fallen für Wochen unter 50 %. Der Coverage-Bonus belohnt einen Banditen dafür, Dokumente zu besuchen, die er noch nicht innerhalb einer Quelle probiert hat.
Bonus-Formel
Der Coverage-Bonus skaliert linear von 1,3x bei 0 % Abdeckung herunter auf 1,0x bei 50 % Abdeckung, dann flach bei 1,0x oberhalb von 50 %:
if coverage < 0.5:
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
else:
bonus = 1.0
Eine Quelle mit 0 % Abdeckung erhält 1,3x; eine Quelle mit 25 % erhält 1,15x; eine Quelle mit 50 % fällt auf 1,0x. Über 50 % gibt es keinen Bonus.
Bonus berechnen
Zwei unterschiedliche Frische-Signale
Gleiches Ziel, unterschiedliche Granularität
ANDREA verfügt über zwei Mechanismen, die ein Übertraining an einer einzelnen Quelle verhindern. Sie klingen ähnlich; sie messen unterschiedliche Dinge.
Epoch-Strafe. Verfolgt aggregiertes Überziehen. Wenn lifetime_pulls / n_docs > 1.0, hat eine Quelle theoretisch jede Dokument mindestens einmal umrundet. Strafe = 1 / (1 + epochs). Eine synthetic-chat-Quelle mit 1,4K-Dokumenten bei 5.600 lifetime pulls (epochs = 4) erhält Strafe 1/5 = 0,2x. Epoch-Zähler persistieren über Neustarts hinweg; sie verfallen nie.
Abdeckungsbonus. Verfolgt die Frische pro Dokument innerhalb einer Quelle. CUDA meldet Doc-Indizes; der Proxy pflegt einen Satz pro Quelle. Quellen unter 50% Abdeckung einzigartiger Docs erhalten bis zu 1,3x. Abdeckung belohnt das Erkunden des Schwanzes einer Quelle; Epoch-Strafe bestraft deren Erschöpfung.
Warum beide wichtig sind
| Signal | Tracks | Direction | Cap | Persists across restarts |
|---|---|---|---|---|
| Epoch-Strafe | aggregiertes Überziehen | reduziert | 1/(1+e) | ja |
| Coverage-Bonus | Frische pro Dokument | steigert | 1.3x | ja |
Eine 500K-Dokumenten-Gutenberg-Quelle kann während des gesamten 200K-Trainingslaufs unter 50% Coverage bleiben, ohne je Epoch=1 zu erreichen. Epoch-Strafe ignoriert sie; Coverage-Bonus zieht einen Banditen aktiv zum unerforschten 70%-Schwanz von Gutenberg.
Umgekehrt sättigt eine 1.4K synthetische-Chat-Quelle die Coverage (100%) innerhalb weniger Tausend Züge; Coverage-Bonus bleibt bei 1.0x, während Epoch-Strafe wächst.
Die beiden unterscheiden
Was der Coverage-Bonus ANDREA bringt
Der Fehlerfall, den es verhindert
Ohne Doc-Level-Tracking wählt ein Bandit, der auf pro-Schritt-Belohnung selektiert, .btok-Sequenzen gierig aus. Ein 500K-Dokument-Gutenberg-Korpus enthält ein paar tausend Sequenzen mit niedriger Kreuzentropie (konsistente Prosa, gängiges Vokabular). Ein reiner Belohnungs-Bandit kehrt wiederholt zu diesen Sequenzen zurück, weil sie kontinuierlich starke Belohnungssignale produzieren.
Ergebnis: Ein 500K-Dokument-Korpus wird über 200K Trainings-Schritte auf vielleicht 2K-5K unterschiedliche Sequenzen gesampelt. Das Modell merkt sich diese Sequenzen, ohne je den Rest zu sehen. Kapazität verschwendet; Abdeckung bleibt unter 1% stecken.
Was der Coverage-Bonus bringt
1,3x bei 0% Abdeckung, abgestuft auf 1,0x bei 50%. Dieser Anstoß propagiert durch die UCB1-Selektion: Arme mit niedriger Abdeckung bleiben wettbewerbsfähig, selbst wenn ihre pro-Pull-Belohnung sinkt. Der Bandit erkundet den Schwanz gezielt statt zufällig.
Über einen 200K-Schritt-Lauf auf einem 500K-Doc-Gutenberg hebt der Coverage-Bonus die beobachtete Abdeckung typischerweise von ~3% (ohne Bonus) auf ~25-30% (mit Bonus). Gleiche Rechenleistung, acht- bis zehnmal mehr Dokumente berührt.
Wo die Verfolgung stattfindet
| Komponente | Verantwortung |
|---|---|
microgpt_cuda.cu | Meldet Doc-Index pro Trainingsschritt |
training_proxy.py | Pflegt seen_docs-Menge pro Quelle |
training_proxy.py | Berechnet Abdeckung, wendet Bonus auf Banditen-Belohnung an |
training_proxy.py | Speichert seen_docs in .state.json über Neustarts hinweg |