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

un

гость
1 / ?
назад к урокам

CUDA сообщает индексы документов

Тренер CUDA знает, какой документ он выбрал

Каждый шаг обучения извлекает последовательность из бинарного файла .btok, который упаковывает множество документов подряд. CUDA записывает индекс документа вместе с потерей: step 47213, source=gutenberg, doc=128407, loss=2.81. Прокси собирает эти отчеты и поддерживает множество уникальных индексов документов, увиденных для каждого источника.


От счетчиков к покрытию

Покрытие источника = unique_docs_seen / n_docs. Несколько примеров:


Источникn_docsunique seenпокрытие
gutenberg512,000154,00030.1%
hermes3-general67,39547,17670.0%
dictionary88,00088,000100.0%
synthetic-chat1,4001,400100.0%

Маленькие источники быстро насыщаются. Большие источники опускаются ниже 50% на недели. Бонус за покрытие награждает бандита за посещение документов, которые он ещё не семплировал в источнике.


Coverage bonus per source


Формула бонуса

Бонус за покрытие линейно масштабируется от 1.3x при 0% покрытии до 1.0x при 50% покрытии, затем остаётся плоским на 1.0x выше 50%:


if coverage < 0.5:
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
else:
bonus = 1.0

Источник с покрытием 0% получает 1.3x; источник с 25% — 1.15x; источник с 50% снижается до 1.0x. Выше 50% бонус не применяется.

Вычислить бонус

Запуск с покрытием gutenberg 30% и hermes3-general 70%. Вычислите множитель бонуса покрытия для каждого источника. Покажите вычисления.

Два различных сигнала свежести

Одна цель, разная детализация

У ANDREA есть два механизма, которые предотвращают переобучение на одном источнике. Они звучат похоже; измеряют разные вещи.


Штраф за эпоху. Отслеживает общее перевытягивание. Когда lifetime_pulls / n_docs > 1.0, источник теоретически обошёл каждый документ хотя бы раз. Штраф = 1 / (1 + epochs). Источник synthetic-chat с 1.4K документов при 5,600 lifetime pulls (epochs = 4) получает штраф 1/5 = 0.2x. Счётчики эпох сохраняются при перезапусках; они никогда не уменьшаются.


Бонус за покрытие. Отслеживает свежесть по документам внутри источника. CUDA сообщает индексы документов; прокси поддерживает множество на источник. Источники с покрытием менее 50% уникальных документов получают до 1.3x. Покрытие поощряет исследование хвоста источника; штраф за эпоху наказывает за его исчерпание.


Почему оба важны


СигналОтслеживаетНаправлениеКапСохраняется при перезапусках
Штраф эпохиагрегированный переборснижает1/(1+e)да
Бонус покрытиясвежесть по документамповышает1.3xда

Источник gutenberg из 500K документов может оставаться ниже 50% покрытия на протяжении всего обучения в 200K, не приближаясь к эпохе=1. Штраф эпохи его игнорирует; бонус покрытия активно тянет бандита к неизведанному 70% хвосту gutenberg.


Напротив, синтетический источник чата из 1.4K быстро насыщает покрытие (100%) за несколько тысяч тяг; бонус покрытия остается на 1.0x, в то время как штраф эпохи растет.

Различите их

Представьте два источника в середине обучения: источник A имеет 1,400 документов и 8,400 lifetime pulls. Источник B имеет 500,000 документов и 80,000 lifetime pulls; прокси зафиксировал 75,000 уникальных индексов документов для B на данный момент. Какой сигнал (штраф за эпоху или бонус за покрытие) управляет весом бандита для каждого источника, и почему?

Что дает бонус за покрытие ANDREA

Режим отказа, который он предотвращает

Без отслеживания на уровне документа бандит, выбирающий по вознаграждению за шаг, жадно выбирает последовательности .btok. Корпус Gutenberg из 500K документов содержит несколько тысяч последовательностей с низкой кросс-энтропией (согласованная проза, распространённый словарь). Бандит только по вознаграждению возвращается к этим последовательностям неоднократно, потому что они продолжают производить сильные сигналы вознаграждения.


Результат: корпус из 500K документов семплируется по примерно 2K-5K различным последовательностям за 200K шагов обучения. Модель запоминает эти последовательности, никогда не видя остальное. Ёмкость потрачена впустую; покрытие застревает ниже 1%.


Что даёт бонус покрытия

1.3x при 0% покрытии, снижается до 1.0x при 50%. Это подталкивание распространяется через выбор UCB1: руки с низким покрытием остаются конкурентоспособными, даже когда их вознаграждение за вытягивание падает. Бандит исследует хвост по дизайну, а не случайно.


За 200K-шаговый запуск на корпусе Gutenberg из 500K документов бонус покрытия обычно повышает наблюдаемое покрытие с ~3% (без бонуса) до ~25-30% (с бонусом). Те же вычисления, в восемь-десять раз больше затронутых документов.


Где хранится отслеживание


КомпонентОтветственность
microgpt_cuda.cuОтчет о индексе документа на каждый шаг обучения
training_proxy.pyПоддерживает множество seen_docs для каждого источника
training_proxy.pyВычисляет покрытие, применяет бонус к вознаграждению бандита
training_proxy.pyСохраняет seen_docs в .state.json между перезапусками

Связать с конкретным инженерным выбором

Предположим, вы убрали бонус за покрытие из обучения ANDREA-120M. Предскажите одно конкретное последствие для ветки gutenberg (которая имеет 500K+ документов) за 200K шагов. Сослаться либо на процент покрытия, либо на разнообразие документов, либо на качество downstream-выборок.