中文翻译暂不可用,显示俄语原文。

Что такое 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

Этапы:

  1. Определение пула тем и источников — выбираем домен (например, медицина, право, техподдержка).
  2. Генерация лёгких примеров — используем LLM с промптом: «Сгенерируй простой вопрос с однозначным ответом по теме X». Фильтруем по длине и уверенности модели.
  3. Генерация средних примеров — промпт: «Сгенерируй вопрос, требующий 2–3 шагов рассуждения или небольшого контекста».
  4. Генерация сложных примеров — промпт: «Сгенерируй многошаговый вопрос, требующий анализа нескольких источников и синтеза ответа».
  5. Сортировка и разбиение на батчи — создаём последовательность батчей: сначала только уровень 1, затем смесь 1+2, затем 1+2+3.
  6. Обучение модели — на каждом этапе увеличиваем долю сложных примеров (например, по экспоненциальному закону).

Код на 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.450.49+0.04
Pass@1 (code)34%38%+4%

7. Практические рекомендации по внедрению

  1. Начните с малого сгенерируйте 100–200 лёгких примеров, обучите модель, проверьте, что loss падает.
  2. Используйте метрику уверенности модели (perplexity) как прокси сложности: примеры с низкой perplexity — лёгкие.
  3. Динамическое curriculum не фиксируйте порядок жёстко, а добавляйте сложные примеры, когда loss на лёгких перестаёт уменьшаться.
  4. Осторожно с перекосом не делайте слишком много лёгких примеров — модель может переобучиться на них. Соотношение 50% лёгких, 30% средних, 20% сложных — хорошее начало.
  5. Интеграция с RAG для генерации синтетических данных используйте реальные документы из вашей базы — сначала простые чанки, потом сложные.

Подводные камни

  • Сложность может быть субъективной — проверяйте на небольшой выборке.
  • Генерация данных с curriculum требует больше времени, чем случайная.
  • Если модель уже предобучена на больших данных, эффект может быть слабее.

Пет-проект для закрепления

Задача Создать датасет синтетических QA-пар для RAG-системы по медицинской тематике с curriculum по сложности, обучить на нём небольшой LLM (например, Llama-3.2-1B) и сравнить качество со случайным порядком.

Инструменты

  • Python, Hugging Face Transformers, OpenAI API (или локальная LLM через vLLM).
  • Библиотека для оценки: RAGAS или собственные метрики (BLEU, ROUGE, ответы эксперта).

Шаги:

  1. Выберите 10 медицинских статей (например, из PubMed).
  2. Разбейте на чанки разной длины (лёгкие — 1–2 предложения, средние — абзац, сложные — несколько абзацев).
  3. Используя LLM, сгенерируйте для каждого чанка вопрос и ответ. Для лёгких чанков — простые фактологические вопросы, для сложных — аналитические.
  4. Отсортируйте по сложности (длина вопроса, количество шагов).
  5. Обучите модель двумя способами:
    • Curriculum сначала батчи только лёгких, потом добавляйте средние, потом сложные.
    • Случайный перемешайте все примеры.
  6. Оцените на тестовом наборе (10 сложных вопросов) accuracy и faithfulness.

Ожидаемый результат Модель, обученная с curriculum, покажет на 5–10% более высокую точность и меньше галлюцинаций на сложных вопросах.


Связь с другими вопросами

ВопросТема
680Что такое synthetic data generation для RAG?
685Как улучшить качество синтетических данных?
690Что такое Self-Instruct и Evol-Instruct?
700Как обучать агентов с подкреплением?
710Какие метрики качества синтетических данных?
720Как избежать коллапса модели при обучении на синтетике?

Навигация