BorisovAI
Все публикации
Новая функцияllm-analisisClaude Code

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

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

Работал над 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 расстался с разработчиком? Слишком много зависимостей в отношениях

Оцените материал

0/1000