CUDA Riporta gli Indici dei Documenti
Un Trainer CUDA Sa Quale Documento Ha Campionato
Ogni passo di addestramento estrae una sequenza da un file .btok binario, che impacchetta molti documenti uno dopo l'altro. CUDA registra un indice di documento insieme alla loss: step 47213, source=gutenberg, doc=128407, loss=2.81. Un proxy raccoglie questi report & mantiene un insieme di indici di documento unici visti per sorgente.
Da Conteggi a Copertura
Copertura di una sorgente = unique_docs_seen / n_docs. Alcuni esempi:
| Sorgente | n_docs | unici visti | copertura |
|---|---|---|---|
| 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% |
Le fonti piccole saturano rapidamente. Le fonti grandi scendono sotto il 50% per settimane. Il bonus di copertura premia un bandit per visitare documenti che non ha ancora campionato all'interno di una fonte.
Formula del Bonus
Il bonus di copertura scala linearmente da 1.3x allo 0% di copertura fino a 1.0x al 50% di copertura, poi rimane piatto a 1.0x sopra il 50%:
if coverage < 0.5:
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
else:
bonus = 1.0
Una sorgente con copertura al 0% guadagna 1.3x; una sorgente al 25% guadagna 1.15x; una sorgente al 50% scende a 1.0x. Sopra il 50%, non si applica alcun bonus.
Calcola il Bonus
Due Segnali di Freschezza Distinti
Stesso Obiettivo, Granularità Diversa
ANDREA ha due meccanismi che prevengono il sovra-allenamento su una singola fonte. Suonano simili; misurano cose diverse.
Penalità per epoca. Traccia il sovra-uso aggregato. Quando lifetime_pulls / n_docs > 1.0, una fonte ha teoricamente superato ogni documento almeno una volta. Penalità = 1 / (1 + epochs). Una fonte synthetic-chat con 1.4K documenti a 5.600 lifetime pulls (epochs = 4) ottiene penalità 1/5 = 0.2x. I conteggi delle epoche persistono attraverso i riavvii; non decadono mai.
Bonus di copertura. Traccia la freschezza per documento all'interno di una fonte. CUDA riporta gli indici dei documenti; il proxy mantiene un set per fonte. Le fonti sotto il 50% di copertura di documenti unici guadagnano fino a 1.3x. La copertura premia l'esplorazione della coda di una fonte; la penalità per epoca punisce l'esaurimento.
Perché Entrambi Sono Importanti
| Segnale | Traccia | Direzione | Cap | Persiste tra i riavvii |
|---|---|---|---|---|
| Penalità epoca | aggregato over-pulling | riduce | 1/(1+e) | sì |
| Bonus copertura | freschezza per-doc | aumenta | 1.3x | sì |
Una sorgente gutenberg da 500K documenti può rimanere sotto il 50% di copertura per l'intero run di training da 200K mentre non si avvicina mai a epoca=1. La penalità epoca la ignora; il bonus copertura attivamente tira un bandit verso la coda inesplorata del 70% di gutenberg.
Al contrario, una sorgente synthetic-chat da 1.4K satura la copertura (100%) entro poche migliaia di pull; il bonus copertura rimane a 1.0x mentre la penalità epoca cresce.
Distinguere i Due
Cosa Compra il Bonus Copertura a ANDREA
La Modalità di Fallimento che Previene
Senza il tracciamento a livello di documento, un bandit che seleziona in base alla ricompensa per passo sceglie sequenze .btok in modo avido. Un corpus Gutenberg da 500K documenti contiene poche migliaia di sequenze con bassa entropia incrociata (prosa coerente, vocabolario comune). Un bandit basato solo sulla ricompensa torna ripetutamente a quelle sequenze perché continuano a produrre forti segnali di ricompensa.
Risultato: un corpus da 500K documenti viene campionato su forse 2K-5K sequenze distinte in 200K passi di addestramento. Il modello memorizza quelle sequenze senza mai vedere il resto. Capacità sprecata; copertura bloccata sotto l'1%.
Cosa Acquista il Bonus di Copertura
1.3x allo 0% di copertura, scalato fino a 1.0x al 50%. Quella spinta si propaga attraverso la selezione UCB1: le braccia con bassa copertura rimangono competitive anche quando la loro ricompensa per estrazione cala. Il bandit esplora la coda per progettazione piuttosto che per accidente.
Su una run da 200K passi su un Gutenberg da 500K documenti, il bonus di copertura tipicamente alza la copertura osservata da ~3% (senza bonus) a ~25-30% (con bonus). Stessa potenza di calcolo, otto-dieci volte più documenti toccati.
Dove Risiede il Tracking
| Component | Responsabilità |
|---|---|
microgpt_cuda.cu | Riporta l'indice del documento per ogni step di training |
training_proxy.py | Mantiene il set seen_docs per sorgente |
training_proxy.py | Calcola la copertura, applica bonus alla ricompensa del bandit |
training_proxy.py | Persiste seen_docs in .state.json tra i riavvii |