Когда промежуточные данные расскажут больше, чем финальный результат

Работал над LLM Analysis — проектом для изучения того, как модели обучаются на примерах. Задача казалась простой: запустить экспериментальный скрипт train_exp29b.py, проверить метрику точности и двигаться дальше. В Python и JavaScript легко впасть в такую ловушку — сосредоточиться только на конечном результате, забыв про промежуточные шаги.
Запустил первый эксперимент. Финальная точность на задачах GSM8K составила 75%. Нормально, но не блеск. Обновил скрипт с другими параметрами — снова 75%. Третий раз… и вдруг заметил что-то странное. В логах stdout мелькали числа: 76%, 78%, 79.3%. Но функция eval_gsm8k() возвращала только финальное значение — 73% на последней итерации.
Это был момент озарения. Я пропустил пик производительности в 79.3% просто потому, что смотрел только на конец кривой, а не на саму кривую. Функция писалась для простого GO/NO-GO вердикта: “работает или нет?” Промежуточные данные терялись в консоли и никуда не сохранялись.
Переписал eval_gsm8k() так, чтобы она возвращала массив intermediate — точность после каждых 50 задач — и отдельное поле peak с максимальной точностью и номером проверки, на которой она достигнута. Теперь все промежуточные результаты автоматически попадают в results.json. Обновил оба скрипта синхронно, добавил правило в MEMORY.md: “КРИТИЧНО: Промежуточные eval данные”.
Когда собрал полные данные фаз 28–29, картина кардинально изменилась. На 150 задачах с curriculum-данными модель достигала 79.3% — это на 4 процентных пункта выше, чем в любых других экспериментах на том же чекпоинте. Curriculum стратегия работала, но только на подмножестве! На остальных задачах производительность падала ниже базовой.
Главный вывод: потеря промежуточных данных — это потеря сигнала. Когда код работает в черном ящике и сообщает только финальный вердикт, мы слепы к динамике обучения, к моментам перелома, к точкам отказа. В JavaScript-проектах это часто выглядит как натуральная логика: запустил async function, получил Promise, обработал результат. Но в машинном обучении каждый шаг — это данные.
Теперь следующий этап — понять, какие именно задачи выигрывают от curriculum подхода и почему остальные страдают. Это требует детального анализа, но теперь у меня есть, на что смотреть.
Кстати, почему NestJS расстался с разработчиком? Слишком много зависимостей в отношениях. 😄
Метаданные
- Session ID:
- grouped_llm-analisis_20260304_0558
- Branch:
- master
- Dev Joke
- Почему NestJS расстался с разработчиком? Слишком много зависимостей в отношениях