Журнал · Rit.work

Падающая функция потерь не выбирает лучшую синтетику для кода

Эксперимент с обучением модели для кода показал: синтетические задачи могут хорошо обучаться, но ухудшать итоговый результат, если вытесняют данные, близкие к целевой задаче.

Rit.work
Студия разработки
9 октября 2026 г.3 мин чтения

Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.

Снижение функции потерь на синтетических задачах оказалось плохим ориентиром для выбора данных, если цель — улучшить генерацию кода. В препринте автора Ohad Rubin, который не рецензирован и содержит его собственные замеры, лучшая смесь обошла чистый OpenCodeInstruct на 3,1 процентного пункта. Для настройки состава данных нужен результат на целевой задаче, а не только скорость обучения на отдельных источниках.

Как разделили полезный сигнал и локальное обучение

Работа различает три свойства задачи. Диагностическая задача показывает общий прогресс модели: её функция потерь снижается, даже если модель учится на других данных. Обучаемая задача реагирует на собственный бюджет токенов: чем чаще она встречается, тем быстрее модель осваивает именно её.

Третье свойство — перенос. Источник даёт перенос, если его доля в обучающей смеси улучшает результат после одинаковой дополнительной настройки на целевую задачу. Обучаемость при этом ничего не гарантирует: модель может хорошо запомнить правила синтетического упражнения, но не применить их при написании программ.

Во всех запусках основой служил общий корпус Python из CodeParrot. Варьировалась только контролируемая часть смеси: OpenCodeInstruct с инструкциями по программированию, набор Curated с синтетическими задачами, близкими к операциям над кодом, и набор Literature со стандартными пробами на поиск, отслеживание состояния и преобразование последовательностей.

После предварительного обучения все модели одинаково дообучали на OpenCodeInstruct и проверяли на HumanEval. Основная метрика pass@20 оценивает вероятность получить хотя бы одно правильное решение из двадцати попыток. Благодаря общей основе и одинаковому финальному этапу различия можно связать с составом контролируемой части корпуса.

Обучаемость и перенос дали разные рейтинги

В Curated обучаемыми признали 10 задач из 12, а в Literature — только 4 из 15. Значит, специально подобранные упражнения чаще отвечали на дополнительный бюджет снижением функции потерь. Однако этот результат описывает освоение самих упражнений, а не качество программ, которые модель пишет после обучения.

Лучший результат на HumanEval составил 22,6%. Его дала внутренняя точка смеси, где OpenCodeInstruct оставался доминирующим источником, а Curated занимал ограниченную долю. Чистый Curated оказался хуже не только этой смеси, но и варианта без синтетических задач.

Два источника выполняли разные роли. Curated добавлял операции, которые могут пригодиться при синтезе программ, а OpenCodeInstruct сохранял формат и содержание, близкие к последующей настройке и HumanEval. Когда синтетические упражнения вытесняли целевые инструкции целиком, их высокая обучаемость переставала помогать.

Это не доказывает, что найденная пропорция универсальна. Проверка охватывает одну семью разреженных экспертных моделей, один базовый корпус и одну целевую оценку. Сетка смесей была крупной, а OpenCodeInstruct использовался и при предварительном обучении, и при последующей настройке, поэтому эффекты формата и содержания здесь не разделены.

Состав смеси нужно настраивать по целевой задаче

Отдельный эксперимент показал риск автоматического распределения данных. Планировщик Ado отдавал больше бюджета задачам, для которых предсказывал сильнейшее ближайшее снижение функции потерь. Доля OpenCodeInstruct упала ниже 5% уже за первые 5 тысяч шагов, хотя фиксированные смеси показывали, что именно этот источник должен доминировать.

На итоговой оценке HumanEval такие запуски отстали от соответствующих фиксированных смесей на 2,4–11 процентных пунктов. Планировщик правильно находил данные, на которых ещё можно быстро снизить ошибку, но отвечал не на тот вопрос: его цель не учитывала перенос после дополнительной настройки.

Для команды, которая собирает корпус для собственной модели, работа меняет критерий отбора. Синтетический источник сначала стоит проверять на обучаемость, но его долю нужно выбирать отдельным перебором смесей и оценивать после полного целевого конвейера. Хорошая кривая функции потерь подходит для диагностики, а не для окончательного решения о бюджете.

Адаптивный планировщик безопаснее ограничивать на уровне крупных источников: не позволять ему вытеснить данные, близкие к продуктовой задаче, даже если их ошибка временно снижается медленнее. Если целевая проверка стоит дорого, её можно запускать реже, но именно она должна подтверждать изменение пропорций.

Практический вывод узкий: OpenCodeInstruct-подобные данные остаются основой для генерации кода, а синтетические упражнения работают как добавка с ограниченной долей. Переносить найденный состав на другую архитектуру или другой тест без собственного перебора работа не позволяет.

Источники

Пауза в чтении

Похоже на вашу задачу?

Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.

Rit.work

Студия разработки

Собираем мобильные приложения и помогаем командам получать от AI реальную пользу. Основатель и команда, работаем удалённо — с клиентами в России и за рубежом.

← Ко всем материалам
Понравилось? Обсудим вашу задачу