Что такое curriculum learning for synthetic data (обучение на легких данных сначала)?
Краткий тезис
Curriculum learning for synthetic data — это стратегия обучения модели, при которой синтетические данные подаются в порядке возрастания сложности: сначала простые примеры, затем постепенно более сложные. Для генерации синтетических данных это означает, что сначала создаются лёгкие вопросы/задачи (короткие, с одним шагом рассуждения), а затем — более сложные (длинные, многошаговые, требующие внешних знаний). Такой подход улучшает сходимость обучения и повышает финальное качество модели на 5–10% за счёт плавного усложнения целевой функции.
1. Термин: Curriculum Learning (обучение по учебному плану)
Curriculum Learning — это парадигма машинного обучения, вдохновлённая человеческим обучением: сначала изучаются простые концепции, затем — более сложные. В контексте нейронных сетей это означает, что на ранних эпохах модель видит лёгкие примеры (низкий loss, мало шума), а на поздних — сложные (высокий loss, много шума).
Ключевая идея: модель сначала осваивает базовые паттерны на чистых данных, а затем адаптируется к более тонким и запутанным случаям, избегая переобучения на шум с самого начала.
Формальное определение пусть есть обучающая выборка ( D = {(x_i, y_i)} ) и функция сложности ( [text](/wiki/text){diff}(x_i) ). Curriculum learning сортирует данные по возрастанию ( [text](/wiki/text){diff} ) и подаёт их в этом порядке, возможно, с постепенным добавлением более сложных примеров.
2. Мотивация: зачем учиться на лёгких данных сначала?
Основные причины:
| Причина | Объяснение |
|---|---|
| Улучшение сходимости | Модель быстрее находит хороший локальный минимум, так как градиенты на лёгких примерах более информативны и менее зашумлены. |
| Предотвращение переобучения | Если сразу дать сложные примеры, модель может запомнить редкие шумовые паттерны. Постепенное усложнение действует как регуляризация. |
| Стабильность обучения | Loss на лёгких примерах ниже, что позволяет использовать более высокий learning rate на ранних этапах. |
| Повышение финального качества | Эксперименты показывают прирост accuracy/ROUGE/BLEU на 5–10% по сравнению со случайным порядком. |
Аналогия ребёнок сначала учится складывать слоги, потом слова, потом предложения. Если сразу дать сложный текст, он не поймёт ничего.
3. Как определить сложность синтетических данных?
Для синтетических данных, генерируемых LLM (например, для fine-tuning), сложность можно оценивать по нескольким критериям:
- Длина входного/выходного текста — чем длиннее, тем сложнее.
- Количество шагов рассуждения (reasoning steps) — задачи с цепочкой мыслей (Chain-of-Thought) сложнее одношаговых.
- Необходимость внешних знаний — вопросы, требующие фактов из документов (RAG), сложнее, чем вопросы по общим знаниям.
- Уровень абстракции — конкретные вопросы (сколько? где?) проще, чем аналитические (почему? что если?).
- Наличие противоречий или шума — примеры с неоднозначностью сложнее.
Пример шкалы сложности для QA-пар
| Уровень | Пример вопроса | Характеристики |
|---|---|---|
| 1 (лёгкий) | «Какой цвет у неба?» | 1 шаг, общее знание, короткий ответ |
| 2 (средний) | «Почему небо голубое?» | 2–3 шага, требуется объяснение |
| 3 (сложный) | «Сравните механизмы рассеяния света в атмосферах Земли и Марса» | Много шагов, внешние знания, сравнение |
4. Процесс генерации синтетических данных с curriculum
Этапы:
- Определение пула тем и источников — выбираем домен (например, медицина, право, техподдержка).
- Генерация лёгких примеров — используем LLM с промптом: «Сгенерируй простой вопрос с однозначным ответом по теме X». Фильтруем по длине и уверенности модели.
- Генерация средних примеров — промпт: «Сгенерируй вопрос, требующий 2–3 шагов рассуждения или небольшого контекста».
- Генерация сложных примеров — промпт: «Сгенерируй многошаговый вопрос, требующий анализа нескольких источников и синтеза ответа».
- Сортировка и разбиение на батчи — создаём последовательность батчей: сначала только уровень 1, затем смесь 1+2, затем 1+2+3.
- Обучение модели — на каждом этапе увеличиваем долю сложных примеров (например, по экспоненциальному закону).
Код на Python (упрощённый пример генерации):
import openai
def generate_qa(difficulty: int, topic: str) -> dict:
prompts = {
1: f"Сгенерируй простой вопрос с ответом по теме '{topic}'. Вопрос должен быть коротким и однозначным.",
2: f"Сгенерируй вопрос средней сложности по теме '{topic}', требующий 2-3 шагов рассуждения.",
3: f"Сгенерируй сложный вопрос по теме '{topic}', требующий многошагового анализа и синтеза информации."
}
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompts[difficulty]}]
)
# Парсинг ответа (упрощённо)
return {"question": ..., "answer": ..., "difficulty": difficulty}
# Генерация curriculum-датасета
dataset = []
for diff in [1, 2, 3]:
for _ in range(100):
dataset.append(generate_qa(diff, "физика"))
# Сортируем по difficulty
dataset.sort(key=lambda x: x["difficulty"])
5. Связь с Agentic RAG
В архитектуре Agentic RAG агент может выполнять несколько шагов: поиск, рассуждение, вызов инструментов. Curriculum learning для синтетических данных особенно полезен при обучении таких агентов:
- Лёгкие сценарии агент делает один запрос к векторной БД и возвращает ответ.
- Средние сценарии агент делает 2–3 запроса, фильтрует результаты, использует простой reasoning.
- Сложные сценарии агент планирует последовательность действий, вызывает несколько инструментов (поиск, калькулятор, API), синтезирует ответ.
Обучая агента сначала на простых траекториях, мы избегаем ситуации, когда он «застревает» в сложных циклах на ранних этапах обучения.
6. Экспериментальные результаты и известные работы
- Self-Instruct (Wang et al., 2022) — генерация инструкций с постепенным усложнением: сначала seed-примеры, затем итеративное расширение.
- Evol-Instruct (Xu et al., 2023) — эволюционное усложнение инструкций: глубже, шире, конкретнее.
- Curriculum Learning for LLMs (Zhou et al., 2024) — показали прирост на 5–10% на бенчмарках reasoning (GSM8K, MATH) при использовании curriculum для синтетических данных.
Типичные метрики улучшения
| Метрика | Без curriculum | С curriculum | Прирост |
|---|---|---|---|
| Accuracy (QA) | 72.3% | 78.1% | +5.8% |
| F1 (summarization) | 0.45 | 0.49 | +0.04 |
| Pass@1 (code) | 34% | 38% | +4% |
7. Практические рекомендации по внедрению
- Начните с малого сгенерируйте 100–200 лёгких примеров, обучите модель, проверьте, что loss падает.
- Используйте метрику уверенности модели (perplexity) как прокси сложности: примеры с низкой perplexity — лёгкие.
- Динамическое curriculum не фиксируйте порядок жёстко, а добавляйте сложные примеры, когда loss на лёгких перестаёт уменьшаться.
- Осторожно с перекосом не делайте слишком много лёгких примеров — модель может переобучиться на них. Соотношение 50% лёгких, 30% средних, 20% сложных — хорошее начало.
- Интеграция с RAG для генерации синтетических данных используйте реальные документы из вашей базы — сначала простые чанки, потом сложные.
Подводные камни
- Сложность может быть субъективной — проверяйте на небольшой выборке.
- Генерация данных с curriculum требует больше времени, чем случайная.
- Если модель уже предобучена на больших данных, эффект может быть слабее.
Пет-проект для закрепления
Задача Создать датасет синтетических QA-пар для RAG-системы по медицинской тематике с curriculum по сложности, обучить на нём небольшой LLM (например, Llama-3.2-1B) и сравнить качество со случайным порядком.
Инструменты
- Python, Hugging Face Transformers, OpenAI API (или локальная LLM через vLLM).
- Библиотека для оценки: RAGAS или собственные метрики (BLEU, ROUGE, ответы эксперта).
Шаги:
- Выберите 10 медицинских статей (например, из PubMed).
- Разбейте на чанки разной длины (лёгкие — 1–2 предложения, средние — абзац, сложные — несколько абзацев).
- Используя LLM, сгенерируйте для каждого чанка вопрос и ответ. Для лёгких чанков — простые фактологические вопросы, для сложных — аналитические.
- Отсортируйте по сложности (длина вопроса, количество шагов).
- Обучите модель двумя способами:
- Curriculum сначала батчи только лёгких, потом добавляйте средние, потом сложные.
- Случайный перемешайте все примеры.
- Оцените на тестовом наборе (10 сложных вопросов) accuracy и faithfulness.
Ожидаемый результат Модель, обученная с curriculum, покажет на 5–10% более высокую точность и меньше галлюцинаций на сложных вопросах.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 680 | Что такое synthetic data generation для RAG? |
| 685 | Как улучшить качество синтетических данных? |
| 690 | Что такое Self-Instruct и Evol-Instruct? |
| 700 | Как обучать агентов с подкреплением? |
| 710 | Какие метрики качества синтетических данных? |
| 720 | Как избежать коллапса модели при обучении на синтетике? |
Навигация
- Предыдущий: 691
- Следующий: 693
- Индекс: 00. Индекс разборов