CUDA Raportuje Indeksy Dokumentów
Trener CUDA Wie, Jaki Dokument Został Wybrany
Każdy krok treningowy pobiera sekwencję z pliku binarnego .btok, który pakuje wiele dokumentów jeden po drugim. CUDA rejestruje indeks dokumentu obok straty: step 47213, source=gutenberg, doc=128407, loss=2.81. Proxy zbiera te raporty i utrzymuje zbiór unikalnych indeksów dokumentów widzianych na źródło.
Od Liczników do Pokrycia
Pokrycie źródła = unique_docs_seen / n_docs. Kilka przykładów:
| Źródło | n_docs | unikalnie widziane | pokrycie |
|---|---|---|---|
| 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% |
Małe źródła szybko się nasycają. Duże źródła spadają poniżej 50% na tygodnie. Bonus za pokrycie nagradza bandyta za odwiedzanie dokumentów, których jeszcze nie próbował w źródle.
Formuła Bonusu
Bonus za pokrycie skaluje się liniowo od 1.3x przy 0% pokrycia do 1.0x przy 50% pokrycia, potem stały na 1.0x powyżej 50%:
if coverage < 0.5:
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
else:
bonus = 1.0
Źródło z 0% pokrycia otrzymuje 1.3x; źródło z 25% otrzymuje 1.15x; źródło z 50% spada do 1.0x. Powyżej 50% bonus nie obowiązuje.
Oblicz premię
Dwa różne sygnały świeżości
Ten sam cel, różna granularność
ANDREA ma dwa mechanizmy, które zapobiegają nadmiernemu trenowaniu na jednym źródle. Brzmią podobnie; mierzą różne rzeczy.
Kara za epoki. Śledzi agregowane nadmierne ciągnięcia. Gdy lifetime_pulls / n_docs > 1.0, źródło teoretycznie przeszło już przez każdy dokument co najmniej raz. Kara = 1 / (1 + epochs). Źródło synthetic-chat z 1,4 tys. dokumentów przy 5600 lifetime pulls (epochs = 4) otrzymuje karę 1/5 = 0.2x. Liczniki epok zachowują się przez restarty; nigdy nie zanikają.
Bonus za pokrycie. Śledzi świeżość per-dokument w źródle. CUDA raportuje indeksy dokumentów; proxy utrzymuje zbiór per źródło. Źródła poniżej 50% pokrycia unikalnych dokumentów otrzymują do 1.3x. Pokrycie nagradza eksplorację ogona źródła; kara za epoki karze jego wyczerpanie.
Dlaczego oba są ważne
| Sygnał | Śledzi | Kierunek | Ograniczenie | Utrzymuje się po restarcie |
|---|---|---|---|---|
| Kara epoki | agregat nadmiernego ciągnięcia | zmniejsza | 1/(1+e) | tak |
| Premia za pokrycie | świeżość na dokument | zwiększa | 1.3x | tak |
Źródło gutenberg o 500K dokumentach może utrzymywać pokrycie poniżej 50% przez cały trening 200K, nigdy nie zbliżając się do epoki=1. Kara epoki to ignoruje; premia za pokrycie aktywnie ciągnie bandyta w stronę nieeksplorowanego 70% ogona gutenberg.
Odwrotnie, źródło syntetyczno-chatowe o 1.4K nasyca pokrycie (100%) w ciągu kilku tysięcy ciągnięć; premia za pokrycie zostaje na 1.0x, podczas gdy kara epoki rośnie.
Rozróżnij Oba
Co Bonus za Pokrycie Kupuje ANDREA
Tryb Awarii, Który Zapobiega
Bez śledzenia na poziomie dokumentu, bandyta wybierający na podstawie nagrody za pojedynczy krok, chciwie wybiera sekwencje .btok. Korpus gutenberg o 500K dokumentach zawiera kilka tysięcy sekwencji o niskiej entropii krzyżowej (spójna proza, powszechny słownik). Bandyta oparty tylko na nagrodzie wielokrotnie wraca do tych sekwencji, ponieważ one ciągle generują silne sygnały nagrody.
Rezultat: korpus o 500K dokumentach jest próbkowany w ramach może 2K-5K różnych sekwencji przez 200K kroków treningowych. Model zapamiętuje te sekwencje, nigdy nie widząc reszty. Marnowana pojemność; pokrycie utknięte poniżej 1%.
Co Kupuje Bonus Pokrycia
1.3x przy 0% pokryciu, skalowane w dół do 1.0x przy 50%. To pchnięcie propaguje przez selekcję UCB1: ramiona o niskim pokryciu pozostają konkurencyjne, nawet gdy ich nagroda za pociągnięcie spada. Bandyta eksploruje ogon z założenia, a nie przypadkowo.
W trakcie 200K-krokowego uruchomienia na gutenberg o 500K dokumentach, bonus pokrycia zazwyczaj podnosi obserwowane pokrycie z ~3% (bez bonusu) do ~25-30% (z bonusem). Ten sam compute, osiem do dziesięciu razy więcej dotkniętych dokumentów.
Gdzie znajduje się śledzenie
| Komponent | Odpowiedzialność |
|---|---|
microgpt_cuda.cu | Raportuje indeks dokumentu na krok treningowy |
training_proxy.py | Utrzymuje zbiór seen_docs na źródło |
training_proxy.py | Oblicza pokrycie, stosuje premię do nagrody bandyta |
training_proxy.py | Zachowuje seen_docs w .state.json między restartami |