CUDA Rapporte les Indices de Documents
Un Entraîneur CUDA Sait Quel Document Il a Échantillonné
Chaque étape d'entraînement tire une séquence d'un binaire .btok, qui regroupe de nombreux documents bout à bout. CUDA enregistre un indice de document avec la perte : step 47213, source=gutenberg, doc=128407, loss=2.81. Un proxy collecte ces rapports & maintient un ensemble d'indices de documents uniques vus par source.
Des Comptages à la Couverture
Couverture d'une source = unique_docs_seen / n_docs. Quelques exemples :
| Source | n_docs | unique vu | couverture |
|---|---|---|---|
| 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 % |
Les sources minuscules se saturent rapidement. Les sources volumineuses descendent en dessous de 50 % pendant des semaines. Le bonus de couverture récompense un bandit pour visiter des documents qu'il n'a pas encore échantillonnés au sein d'une source.
Formule du Bonus
Le bonus de couverture évolue linéairement de 1,3x à 0 % de couverture jusqu'à 1,0x à 50 % de couverture, puis reste constant à 1,0x au-dessus de 50 % :
si coverage < 0.5 :
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
sinon :
bonus = 1.0
Une source à 0 % de couverture obtient 1,3x ; une source à 25 % obtient 1,15x ; une source à 50 % tombe à 1,0x. Au-dessus de 50 %, aucun bonus ne s'applique.
Calculer le Bonus
Deux Signaux de Fraîcheur Distincts
Même Objectif, Granularité Différente
ANDREA dispose de deux mécanismes qui empêchent la sur-formation sur une seule source. Ils semblent similaires ; ils mesurent des choses différentes.
Pénalité d'époque. Suit le sur-déplacement agrégé. Lorsque lifetime_pulls / n_docs > 1.0, une source a théoriquement parcouru chaque document au moins une fois. Pénalité = 1 / (1 + epochs). Une source synthetic-chat de 1,4K documents avec 5 600 tirages à vie (epochs = 4) obtient une pénalité de 1/5 = 0,2x. Les compteurs d'époques persistent à travers les redémarrages ; ils ne décroissent jamais.
Bonus de couverture. Suit la fraîcheur par document au sein d'une source. CUDA rapporte les indices des documents ; le proxy maintient un ensemble par source. Les sources en dessous de 50 % de couverture de documents uniques obtiennent jusqu'à 1,3x. La couverture récompense l'exploration de la queue d'une source ; la pénalité d'époque punit son épuisement.
Pourquoi les deux sont importantes
| Signal | Tracks | Direction | Cap | Persists across restarts |
|---|---|---|---|---|
| Pénalité d'époque | sur-extraction agrégée | réduit | 1/(1+e) | oui |
| Bonus de couverture | fraîcheur par document | booste | 1.3x | oui |
Une source gutenberg de 500K documents peut rester en dessous de 50% de couverture pour toute la durée de l'entraînement de 200K tout en n'approchant jamais epoch=1. La pénalité d'époque l'ignore ; le bonus de couverture attire activement un bandit vers la queue inexplorée de 70% de gutenberg.
Inversement, une source synthetic-chat de 1.4K sature la couverture (100%) en quelques milliers de tirages ; le bonus de couverture reste à 1.0x tandis que la pénalité d'époque croît.
Distinguer les Deux
Ce que le Bonus de Couverture Apporte à ANDREA
Le Mode de Défaillance Qu'il Évite
Sans suivi au niveau document, un bandit sélectionnant sur la récompense par étape choisit les séquences .btok de manière gourmande. Un corpus Gutenberg de 500K documents contient quelques milliers de séquences avec une entropie croisée faible (prose cohérente, vocabulaire courant). Un bandit basé uniquement sur la récompense revient repeatedly à ces séquences car elles produisent continuellement des signaux de récompense forts.
Résultat : un corpus de 500K documents est échantillonné sur peut-être 2K-5K séquences distinctes sur 200K étapes d'entraînement. Le modèle mémorise ces séquences sans jamais voir le reste. Capacité gaspillée ; couverture bloquée en dessous de 1 %.
Ce que le Bonus de Couverture Apporte
1,3x à 0 % de couverture, réduit à 1,0x à 50 %. Cette incitation se propage via la sélection UCB1 : les bras avec faible couverture restent compétitifs même quand leur récompense par tirage baisse. Le bandit explore la queue par conception plutôt que par accident.
Sur une exécution de 200K étapes sur un Gutenberg de 500K docs, le bonus de couverture augmente typiquement la couverture observée de ~3 % (sans bonus) à ~25-30 % (avec bonus). Même calcul, huit à dix fois plus de documents touchés.
Où réside le Suivi
| Composant | Responsabilité |
|---|---|
microgpt_cuda.cu | Rapporte l'index du document par étape d'entraînement |
training_proxy.py | Maintient l'ensemble seen_docs par source |
training_proxy.py | Calcule la couverture, applique un bonus à la récompense du bandit |
training_proxy.py | Persiste seen_docs dans .state.json entre les redémarrages |