Експоненційний ковзний середній показник
Згладжений недавній середній показник
Експоненційний ковзний середній показник (EMA) відстежує значення, надаючи більшу вагу недавнім зразкам, ніж старим, з вагами, що експоненційно зменшуються. Формула:
EMA(t) = (1 - alpha) EMA(t-1) + alpha value(t)
Де alpha (коефіцієнт згладжування) лежить у (0, 1). ANDREA використовує alpha = 0.1 для відстеження втрат на джерело.
Побічно
- value(t): останнє спостереження. Для ANDREA це втрата, повідомлена CUDA після прямого проходу по документу з джерела k.
- EMA(t-1): попереднє значення EMA для джерела k. Зберігається в проксі-стані.
- alpha = 0.1: кожна нова втрата становить 10%; накопичена історія — 90%.
- (1 - alpha) = 0.9: вага на історію.
Чому EMA замість простої середньої
Проста ковзна середня надає однакову вагу кожному кроку. Крок 1 має таку саму вагу, як і крок 100,000. Це працює, якщо дані стаціонарні. Втрати ANDREA НЕ є стаціонарними: ємність моделі зростає під час тренування, тому втрата джерела на кроці 5,000 відрізняється від його втрати на кроці 50,000.
EMA вирішує це. Старі значення втрат експоненційно згасають. EMA відображає недавню реальність, а не усереднення початкових умов.
На джерело
ANDREA підтримує одну EMA на руку (на джерело). Шістнадцять рук = шістнадцять EMA. Кожен крок оновлює лише EMA джерела, яке було витягнуте. Інші 15 EMA залишаються замороженими до їхнього наступного витягування.
Обчислити EMA крок
Формула Нагороди
Нагорода = Покращення, Масштабоване
ANDREA визначає винагороду за крок для руки k як:
reward_k = max(0, EMA_k(t-1) - loss_k(t)) * 1000
Три частини:
1. EMA_k(t-1) - loss_k(t): покращення. Якщо нова втрата нижча за ковзаючу середню, різниця позитивна: джерело k спрацювало краще за очікуване.
2. max(0, ...): обрізання негативних покращень до нуля. Якщо нова втрата гірша за EMA, винагороди немає (але й покарання теж).
3. \* 1000: масштабування вгору, щоб зробити сигнал порівнянним з бонусом дослідження UCB.
Чому max(0, ...)
Негативні винагороди опустили б mean_reward(k) вниз, упереджено впливаючи на UCB проти руків, чиї втрати коливалися вгору. Але коливання нормальні: один складний документ підвищує втрату без того, щоб це означало, що джерело погане. Обрізання до нуля трактує коливання як 'відсутність інформації', а не 'штраф'.
Джерела можуть отримувати нульову винагороду неодноразово без занурення. Їхній рейтинг UCB залишається керованим бонусом дослідження (високий, коли n_k мале) плюс минулі перемоги.
Що повідомляє CUDA
Кожен прохід forward+backward, ядро CUDA видає один запис:
{source: 'hermes3-general', doc_index: 4231, loss: 4.520}
Проксі отримує запис, шукає EMA для цього джерела, обчислює винагороду, оновлює EMA, передає винагороду в акумулятор mean_reward(k) бандита.
Обчислити винагороду
Відповідність винагороди бонусу за дослідження
Проблема величини
Покращення втрат на крок є малими. Втрати падають з 4.521 до 4.520: різниця 0.001. З 4.520 до 4.518: різниця 0.002. Протягом усього тренувального запуску сирі різниці знаходяться приблизно в [0, 0.01].
Тепер подивіться на бонус дослідження UCB при C=0.5, з N=1000 та n_k=20:
0.5 sqrt(ln(1000) / 20) = 0.5 sqrt(6.91 / 20) = 0.5 * 0.588 = 0.294
Бонус становить 0.294. Сирий нагородженийний сигнал становить 0.001. Бонус у 300 разів більший, ніж нагорода. argmax UCB сортує майже повністю за бонусом; mean_reward надає практично нульовий сигнал.
Результат без масштабування: бандит ANDREA кожного кроку обирає руку з найменшим n_k. Mean_reward ігнорується. Бандит перетворюється на чисту політику дослідження.
Виправлення: 1000x
Помножте сирий reward на 1000. Тепер reward становить 1.0 (проти сирого 0.001). Порівняйте з тим самим бонусом за дослідження 0.294:
scaled reward 1.0 vs bonus 0.294 = reward переважає на 3.4x
Тепер mean_reward домінує в рейтингу UCB. Дослідження додає нюансів до хвоста (рідкісні руки отримують буст 0.3), але основна частина рейтингу походить від спостереженого reward.
Чому 1000 (а не 10 і не 100 000)
Відповідність порядку величин. Сирі винагороди становлять ~10^-3. Бонус за дослідження становить ~10^0. Різниця — 10^3. Помножте сиру винагороду на 10^3, щоб потрапити в той самий діапазон, що й бонус.
Масштабування на 100x залишає винагороду на рівні 0.1 (все ще менше за бонус 0.294 -> дослідження все ще домінує). Масштабування на 100 000x піднімає винагороду до 100 (тепер дослідження не може нічого вплинути; UCB зводиться до жадібного mean_reward). 1000x перебуває в робочій зоні, де обидва члени сприяють.
Калібрування, а не теорія
Фактор 1000x — це інженерне калібрування, а не теоретична стала. Він залежить від трьох речей: масштабу втрат навчання (крос-ентропія на словнику з 8K токенів становить близько 4.5), швидкості затухання втрат на крок (повільна) та константи UCB C=0.5. Змініть будь-що з цього, і 1000 може більше не бути правильним множником.
Роздуми про фактор масштабування
Наступне
Що Ви Маєте
Атрибуція винагород перетворює звіти про втрати CUDA на сигнал, готовий для UCB, у трьох операціях: EMA по джерелах відстежує історію втрат (alpha=0.1, повільно), reward = max(0, EMA - loss) обрізає негативні, та масштабування 1000x відповідає величині винагороди величині бонусу UCB для дослідження.
Що Залишається
Підлоги та штрафи епох (активність 79) працюють поверх виводу UCB. Підлоги джерел гарантують мінімальне вибіркове охоплення для пріоритетних джерел незалежно від рангу UCB. Штрафи епох зменшують вагу джерел, які були витягнуті більше разів, ніж у них є документів, запобігаючи запам'ятовуванню малих наборів даних, тоді як великі набори даних залишаються свіжими.
Посилання
ANDREA whitepaper, section 3.3.