English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

gast
1 / ?
terug naar lessen

Exponentieel Bewegend Gemiddelde

Een Gesmeerd Recent Gemiddelde

Een exponentieel bewegend gemiddelde (EMA) volgt een waarde door recente samples zwaarder te wegen dan oude, met gewichten die exponentieel afnemen. Formule:


EMA(t) = (1 - alpha) EMA(t-1) + alpha value(t)


Waarbij alpha (de gladmakingsfactor) in (0, 1) ligt. ANDREA gebruikt alpha = 0.1 voor het bijhouden van de per-bron verlies.


Term voor Term

- value(t): nieuwste observatie. Voor ANDREA is dit het verlies gerapporteerd door CUDA na een forward pass op een document van bron k.

- EMA(t-1): vorige EMA-waarde voor bron k. Opgeslagen in proxy state.

- alpha = 0.1: elk nieuw verlies draagt 10% bij; de rollende geschiedenis draagt 90% bij.

- (1 - alpha) = 0.9: gewicht op de geschiedenis.


Waarom EMA in plaats van Gewone Gemiddelde

Een gewone lopende gemiddelde geeft elke stap hetzelfde gewicht. Stap 1 heeft hetzelfde gewicht als stap 100.000. Dat werkt als de data stationair zijn. De verliezen van ANDREA zijn NIET stationair: de modelcapaciteit groeit tijdens de training, dus het verlies van een bron op stap 5.000 verschilt van het verlies op stap 50.000.


EMA lost dit op. Oude verlieswaarden vervagen exponentieel. De EMA weerspiegelt de recente realiteit, niet een gemiddelde van initiële condities.


Per Bron

ANDREA onderhoudt één EMA per arm (per bron). Zestien armen = zestien EMA's. Elke stap update alleen de EMA van de bron die getrokken is. De andere 15 EMA's blijven bevroren tot hun volgende trek.

Bereken een EMA-stap

Bron k heeft EMA_k(t-1) = 4.521. CUDA rapporteert een nieuwe loss voor bron k: loss_k(t) = 4.520. Met alpha = 0.1, bereken EMA_k(t). Toon: (a) de (1-alpha) term, (b) (1-alpha) * EMA_k(t-1), (c) alpha * loss_k(t), (d) de som. Rond af op 4 decimalen waar nuttig.

De Reward Formule

Reward = Verbetering, Geschaald

ANDREA definieert de per-stap beloning voor arm k als:


reward_k = max(0, EMA_k(t-1) - loss_k(t)) * 1000


Drie stukken:


1. EMA_k(t-1) - loss_k(t): verbetering. Als de nieuwe loss onder het lopende gemiddelde ligt, is het verschil positief: bron k presteerde beter dan verwacht.

2. max(0, ...): knip negatieve verbeteringen naar nul. Als de nieuwe loss slechter is dan de EMA, geen beloning (maar ook geen straf).

3. \* 1000: schaalt op om het signaal vergelijkbaar te maken met de UCB-exploratiebonus.


Reward Attribution Flow


Waarom max(0, ...)

Negatieve beloningen zouden mean_reward(k) omlaag duwen, waardoor UCB bevooroordeeld raakt tegen armen waarvan de verliezen omhoog fluctueren. Maar fluctuatie is normaal: een enkel moeilijk document verhoogt het verlies zonder dat dit betekent dat de bron slecht is. Clipping naar nul behandelt fluctuatie als 'geen informatie' in plaats van 'straf'.


Bronnen kunnen herhaaldelijk nul beloning verdienen zonder te zinken. Hun UCB-rang blijft bepaald door de exploratiebonus (hoog wanneer n_k klein is) plus eerdere successen.


Wat CUDA Rapporteert

Bij elke forward+backward pass emitteert de CUDA kernel één record:


{source: 'hermes3-general', doc_index: 4231, loss: 4.520}


De proxy ontvangt het record, zoekt de EMA op voor die bron, berekent de reward, update de EMA, voedt de reward in de mean_reward(k) accumulator van de bandit.

Bereken een Reward

Bron k heeft EMA_k(t-1) = 4.521. CUDA rapporteert loss_k(t) = 4.520. Bereken reward_k stap voor stap: (a) het verschil EMA_k(t-1) - loss_k(t), (b) de afgeknotte waarde max(0, verschil), (c) de geschaalde beloning (vermenigvuldig met 1000). Vervolgens voor een tweede geval waarbij loss_k(t) = 4.530 (slechter dan EMA), bereken (d) het niet-afgeknotte verschil, & (e) de uiteindelijke beloning na max(0, ...) afknipping & schaling.

Beloning afstemmen op Exploratiebonus

Het Grootteprobleem

Per-stap verliesverbeteringen zijn klein. Verlies daalt van 4.521 naar 4.520: verschil 0.001. Van 4.520 naar 4.518: verschil 0.002. Over een gehele trainingrun liggen ruwe verschillen ruwweg in [0, 0.01].


Bekijk nu de exploratiebonus van UCB bij C=0.5, met N=1000 & n_k=20:


0.5 sqrt(ln(1000) / 20) = 0.5 sqrt(6.91 / 20) = 0.5 * 0.588 = 0.294


De bonus loopt op 0.294. De ruwe beloning loopt op 0.001. De bonus is 300x groter dan de beloning. De argmax van UCB sorteert bijna volledig op basis van de bonus; mean_reward levert vrijwel geen signaal.


Resultaat zonder schaling: De bandit van ANDREA kiest elke stap de arm met de kleinste n_k. Mean_reward wordt genegeerd. De bandit wordt een pure exploratiepolicy.


De Oplossing: 1000x

Vermenigvuldig de ruwe beloning met 1000. Nu zit de beloning op 1.0 (vs ruw 0.001). Vergelijk met dezelfde exploratiebonus 0.294:


geschaalde beloning 1.0 vs bonus 0.294 = beloning leidt met 3.4x


Nu domineert mean_reward de UCB-ranking. Exploratie voegt nuance toe aan de staart (zeldzame armen krijgen een boost van 0.3), maar het lichaam van de ranking komt van de waargenomen beloning.


Waarom 1000 (en niet 10, en niet 100.000)

Order of magnitude matching. Raw rewards run ~10^-3. Exploration bonus runs ~10^0. The gap is 10^3. Multiply raw reward by 10^3 to land in the same range as the bonus.


Scaling by 100x leaves reward at 0.1 (still less than 0.294 bonus -> exploration still dominates). Scaling by 100,000x lifts reward to 100 (now exploration cannot influence anything; UCB collapses to greedy mean_reward). 1000x sits in the working zone where both terms contribute.


Kalibratie, geen theorie

De 1000x factor is engineering kalibratie, geen theoretische constante. Het hangt af van drie dingen: training loss scale (cross-entropy op een vocabulaire van 8K tokens loopt rond 4.5), per-step loss decay rate (slow), & UCB constant C=0.5. Verander een van die, & 1000 is misschien niet langer de juiste multiplier.

Redeneren over de schalingsfactor

Stel je voor dat ANDREA de ruwe beloningen met 100x schaalt in plaats van 1000x. Met ruwe beloning 0.001 & UCB-exploratiebonus 0.294 (C=0.5, N=1000, n_k=20): (a) bereken de geschaalde beloning bij 100x, (b) bereken de geschaalde beloning bij 1000x, (c) voor elke schaling, identificeer welke term (mean_reward of exploration bonus) domineert in de UCB-score voor een arm waarvan mean_reward gelijk is aan de geschaalde beloning. (d) In één zin, leg uit waarom 1000x de twee balanceert.

Wat volgt

Wat Je Hebt

Beloningsattributie zet CUDA's verliesrapporten om in UCB-klaar signaal in drie operaties: per-bron EMA volgt verliesgeschiedenis (alpha=0.1, langzaam), beloning = max(0, EMA - verlies) knipt negatieven weg, & 1000x schaling matcht beloningsgrootte aan UCB-exploratiebonusgrootte.


Wat Rest Over

Vloeren & epochstraffen (activiteit 79) werken bovenop de UCB-uitvoer. Bronvloeren garanderen minimale sampling voor prioriteitsbronnen ongeacht de UCB-ranglijst. Epochstraffen verlagen het gewicht van bronnen die meer keer zijn getrokken dan dat ze documenten hebben, waardoor memorisatie van kleine datasets wordt voorkomen terwijl grote datasets vers blijven.


Referentie

ANDREA whitepaper, sectie 3.3.