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

un

gość
1 / ?
powrót do lekcji

Wykładnicza Średnia Ruchoma

Wygładzona Niedawna Średnia

Wykładnicza średnia ruchoma (EMA) śledzi wartość, ważąc niedawne próbki bardziej niż stare, z wagami zanikającymi wykładniczo. Wzór:


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


Gdzie alpha (czynnik wygładzania) znajduje się w (0, 1). ANDREA używa alpha = 0.1 do śledzenia straty dla każdego źródła.


Krok po kroku

- value(t): najnowsza obserwacja. Dla ANDREA jest to strata zgłoszona przez CUDA po przejściu forward na dokumencie z źródła k.

- EMA(t-1): poprzednia wartość EMA dla źródła k. Przechowywana w stanie proxy.

- alpha = 0.1: każda nowa strata wnosi 10%; historia rolująca wnosi 90%.

- (1 - alpha) = 0.9: waga na historii.


Dlaczego EMA zamiast zwykłej średniej

Zwykła krocząca średnia traktuje każdy krok z równą wagą. Krok 1 ma taką samą wagę jak krok 100 000. To działa, jeśli dane są stacjonarne. Straty ANDREA NIE są stacjonarne: pojemność modelu rośnie podczas treningu, więc strata źródła w kroku 5 000 różni się od jego straty w kroku 50 000.


EMA rozwiązuje ten problem. Stare wartości strat zanikają wykładniczo. EMA odzwierciedla niedawną rzeczywistość, a nie uśrednianie warunków początkowych.


Per-Źródło

ANDREA utrzymuje jedną EMA na ramię (na źródło). Szesnaście ramion = szesnaście EMA. Każdy krok aktualizuje tylko EMA źródła, które zostało wylosowane. Pozostałe 15 EMA pozostaje zamrożonych do ich następnego losowania.

Oblicz EMA Krok po Kroku

Źródło k ma EMA_k(t-1) = 4.521. CUDA zgłasza nową stratę dla źródła k: loss_k(t) = 4.520. Przy alpha = 0.1, oblicz EMA_k(t). Pokaż: (a) wyraz (1-alpha), (b) (1-alpha) * EMA_k(t-1), (c) alpha * loss_k(t), (d) sumę. Zaokrąglij do 4 miejsc dziesiętnych, gdzie przydatne.

Wzór na Nagrodę

Nagroda = Poprawa, Skalowana

ANDREA definiuje nagrodę na krok dla ramienia k jako:


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


Trzy elementy:


1. EMA_k(t-1) - loss_k(t): poprawa. Jeśli nowa strata jest poniżej średniej kroczącej, różnica jest dodatnia: źródło k poradziło sobie lepiej niż oczekiwano.

2. max(0, ...): obcinanie negatywnych popraw do zera. Jeśli nowa strata jest gorsza niż EMA, brak nagrody (ale też brak kary).

3. \* 1000: skaluj w górę, aby sygnał był porównywalny z bonusem eksploracji UCB.


Reward Attribution Flow


Dlaczego max(0, ...)

Negatywne nagrody obniżałyby mean_reward(k), stronniczo działając przeciwko ramionom, których straty fluktuowały w górę. Ale fluktuacja jest normalna: pojedynczy trudny dokument podnosi stratę bez oznaczania, że źródło jest złe. Ograniczenie do zera traktuje fluktuację jako „brak informacji” zamiast „kary”.


Źródła mogą wielokrotnie zdobywać zerową nagrodę bez tonięcia. Ich ranking UCB pozostaje napędzany przez bonus eksploracji (wysoki, gdy n_k jest małe) plus wcześniejsze wygrane.


Co raportuje CUDA

Każdy przebieg forward+backward, jądro CUDA emituje jeden rekord:


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


Proxy odbiera rekord, wyszukuje EMA dla tego źródła, oblicza nagrodę, aktualizuje EMA, przekazuje nagrodę do akumulatora mean_reward(k) bandyta.

Oblicz nagrodę

Źródło k ma EMA_k(t-1) = 4.521. CUDA raportuje loss_k(t) = 4.520. Oblicz reward_k krok po kroku: (a) różnicę EMA_k(t-1) - loss_k(t), (b) obciętą wartość max(0, difference), (c) przeskalowany reward (pomnóż przez 1000). Następnie dla drugiego przypadku, gdzie loss_k(t) = 4.530 (gorszy niż EMA), oblicz (d) nieobciętą różnicę, & (e) ostateczny reward po obcięciu max(0, ...) & skalowaniu.

Dopasowanie Reward do Bonusu Eksploracyjnego

Problem Magnitudy

Poprawy loss na krok są małe. Loss spada z 4.521 do 4.520: różnica 0.001. Z 4.520 do 4.518: różnica 0.002. W całym przebiegu treningu surowe różnice mieszczą się w przybliżeniu [0, 0.01].


Teraz spójrz na premię eksploracji UCB przy C=0.5, z N=1000 i n_k=20:


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


Premia wynosi 0.294. Surowa nagroda wynosi 0.001. Premia jest 300x większa niż nagroda. Argmax UCB sortuje prawie wyłącznie według premii; mean_reward dostarcza zasadniczo zerowy sygnał.


Rezultat bez skalowania: bandit ANDREA wybiera ramię z najmniejszym n_k na każdym kroku. Mean_reward jest ignorowane. Bandit staje się czystą polityką eksploracji.


Naprawa: 1000x

Pomnóż surową nagrodę przez 1000. Teraz nagroda wynosi 1.0 (w porównaniu do surowej 0.001). Porównaj z tym samym bonusem eksploracji 0.294:


przeskalowana nagroda 1.0 vs bonus 0.294 = nagroda prowadzi 3.4x


Teraz średnia nagroda dominuje w rankingu UCB. Eksploracja dodaje niuansów do ogona (rzadkie ramiona dostają 0.3 boost), ale główna część rankingu pochodzi z obserwowanej nagrody.


Dlaczego 1000 (i nie 10, i nie 100 000)

Dopasowanie rzędów wielkości. Surowe nagrody wynoszą ~10^-3. Bonus eksploracyjny wynosi ~10^0. Różnica wynosi 10^3. Pomnóż surową nagrodę przez 10^3, aby trafić w ten sam zakres co bonus.


Skalowanie przez 100x pozostawia nagrodę na poziomie 0.1 (nadal mniej niż bonus 0.294 -> eksploracja nadal dominuje). Skalowanie przez 100 000x podnosi nagrodę do 100 (teraz eksploracja nie może niczego wpłynąć; UCB upraszcza się do chciwej średniej_nagrody). 1000x znajduje się w działającej strefie, gdzie oba składniki mają wpływ.


Kalibracja, nie teoria

Czynnik 1000x to kalibracja inżynierska, nie stała teoretyczna. Zależy od trzech rzeczy: skali straty treningowej (entropia krzyżowa na słowniku 8K tokenów wynosi blisko 4.5), szybkości zaniku straty na krok (powolna) oraz stałej UCB C=0.5. Zmień którąkolwiek z nich, a 1000 może już nie być właściwym mnożnikiem.

Rozumowanie o czynniku skalowania

Załóżmy, że ANDREA przeskalował surowe nagrody o 100x zamiast 1000x. Przy surowej nagrodzie 0.001 i bonusie eksploracji UCB 0.294 (C=0.5, N=1000, n_k=20): (a) oblicz przeskalowaną nagrodę przy 100x, (b) oblicz przeskalowaną nagrodę przy 1000x, (c) dla każdego skalowania określ, który termin (mean_reward czy bonus eksploracji) dominuje w wyniku UCB dla ramienia, którego mean_reward równa się przeskalowanej nagrodzie. (d) W jednym zdaniu wyjaśnij, dlaczego 1000x równoważy oba.

Co Następne

Co Masz

Przydzielanie nagród przekształca raporty strat CUDA w sygnał gotowy dla UCB w trzech operacjach: EMA na źródło śledzi historię strat (alpha=0.1, wolno), nagroda = max(0, EMA - strata) obcina negatywy, & skalowanie 1000x dopasowuje wielkość nagrody do wielkości bonusu eksploracji UCB.


Co Pozostało

Podłogi & kary epok (aktywność 79) działają na szczycie wyjścia UCB. Podłogi źródłowe gwarantują minimalne próbkowanie dla źródeł priorytetowych niezależnie od rankingu UCB. Kary epok obniżają wagę źródeł, które były ciągnięte więcej razy niż mają dokumentów, zapobiegając zapamiętywaniu małych zbiorów danych, podczas gdy duże zbiory danych pozostają świeże.


Źródła

Whitepaper ANDREA, sekcja 3.3.