中文翻译暂不可用,显示俄语原文。
Что такое curriculum learning на уровне данных для LLM?
Краткий тезис
Curriculum learning (CL) — это стратегия организации порядка подачи данных во время обучения LLM, при которой модель сначала тренируется на лёгких примерах (короткие, простые тексты), а затем постепенно переходит к более сложным (длинные, технические, многозначные). Такой подход имитирует человеческое обучение и позволяет модели быстрее сходиться, избегать переобучения на шуме и достигать лучшего качества на сложных задачах. На практике CL реализуется через динамическую вероятность сэмплирования, зависящую от шага обучения и метрики сложности примера, и даёт прирост в метриках вроде MMLU на 2–3%.
1. Термин: Curriculum Learning (обучение по учебному плану)
Curriculum Learning — метод машинного обучения, при котором данные подаются модели в порядке возрастания сложности. Впервые формализован Bengio et al. (2009). Для LLM это означает, что на ранних этапах обучения модель видит короткие, грамматически простые, высокочастотные тексты, а на поздних — длинные, редкие, технические или многозначные.
Зачем это нужно
- Ускоряет сходимость (модель быстрее осваивает базовые паттерны).
- Улучшает финальное качество на сложных задачах (модель не «застревает» в локальных минимумах из-за шумных данных).
- Снижает риск переобучения на редких или шумных примерах на ранних шагах.
2. Мотивация: почему порядок данных важен
При стандартном случайном сэмплировании модель может столкнуться со сложным примером на первом же шаге, что приведёт к большому градиенту и дестабилизации обучения. CL решает эту проблему, выстраивая прогрессию сложности.
Аналогия с человеком ребёнок сначала учится складывать слоги, потом читать простые предложения, затем — сложные тексты. Если дать ему сразу «Войну и мир», он не сможет извлечь пользу.
Экспериментальные данные
- В работе «Curriculum Learning for Language Modeling» (2019) показано, что CL на корпусе WikiText-2 снижает perplexity на 3–5 пунктов.
- Для LLM масштаба 7B параметров CL на смеси CommonCrawl и книг даёт прирост MMLU на 2–3% при том же количестве шагов.
3. Критерии сложности данных
Чтобы применить CL, нужно определить, что считать «лёгким» или «сложным» примером. Основные критерии:
| Критерий | Лёгкий пример | Сложный пример |
|---|---|---|
| Длина текста | < 128 токенов | > 1024 токенов |
| Частота слов | Высокочастотные (top-10k) | Низкочастотные, редкие термины |
| Грамматическая сложность | Простые предложения | Сложноподчинённые, инверсии |
| Техничность | Общие темы (спорт, погода) | Научные статьи, юридические документы |
| Перплексия базовой модели | Низкая (модель легко предсказывает) | Высокая (модель ошибается) |
| Наличие шума | Чистый текст | OCR-ошибки, опечатки, разметка |
Метрика сложности часто вычисляется как взвешенная сумма этих факторов, либо используется perplexity небольшой предобученной модели (например, GPT-2) — чем выше perplexity, тем сложнее пример.
4. Реализация: динамическое сэмплирование
На практике CL реализуется через вероятность сэмплирования, которая зависит от сложности примера и текущего шага обучения.
Формула
P(example_i) = softmax( -alpha * (step / total_steps) * complexity_i )
где alpha — гиперпараметр крутизны кривой, complexity_i — нормализованная сложность (0..1). На ранних шагах (step мало) все примеры имеют почти равную вероятность; к концу обучения сложные примеры получают больший вес.
Альтернативный подход — ступенчатый задаются пороги сложности, и на каждом этапе (например, каждые 10% шагов) включается новый пул более сложных данных.
Пример кода на Python (псевдокод с HuggingFace Trainer):
from transformers import Trainer
import numpy as np
class CurriculumTrainer(Trainer):
def get_train_dataloader(self):
# Вычисляем сложность для каждого примера (заранее)
complexities = compute_complexities(self.train_dataset)
# На каждом шаге пересчитываем веса
step = self.state.global_step
total = self.args.max_steps
alpha = 5.0
weights = np.exp(-alpha * (step / total) * complexities)
weights /= weights.sum()
sampler = WeightedRandomSampler(weights, len(weights))
return DataLoader(self.train_dataset, sampler=sampler, ...)
5. Стратегии curriculum learning
| Стратегия | Описание | Когда применять |
|---|---|---|
| Прямая (forward) | От простого к сложному, как описано выше | Стандартный случай |
| Обратная (reverse) | Сначала сложные, потом простые (для «доучивания» на лёгких) | Когда модель уже обучена на сложных, но хочет улучшить базовые навыки |
| Ступенчатая (staged) | Фиксированные этапы с резким переключением пула | Когда сложность можно чётко разбить на категории |
| Плавная (smooth) | Непрерывное изменение вероятности | Когда сложность — континуум |
| Self-paced | Модель сама выбирает, какие примеры ей «по силам» (по loss) | Когда нет априорной метрики сложности |
Self-paced learning — особый случай: модель на каждом шаге выбирает примеры, loss которых ниже порога (т.е. которые она уже может осилить). Порог постепенно увеличивается.
6. Экспериментальные результаты
- MMLU (Massive Multitask Language Understanding): прирост 2–3% на моделях 7B–13B при одинаковом количестве токенов обучения.
- Perplexity: снижение на 1–2 пункта на тестовых доменах.
- Скорость сходимости для достижения того же loss требуется на 15–20% меньше шагов.
- Устойчивость к шуму CL уменьшает влияние грязных данных, так как модель сначала учится на чистых примерах.
Важно эффект сильнее для маленьких моделей (<1B) и ослабевает для очень больших (>100B), где случайное сэмплирование уже достаточно хорошо.
7. Связь с другими методами
CL часто комбинируют с:
- Data filtering — отсев шумных данных перед обучением.
- Data mixing — пропорции разных источников (книги, веб, код) могут меняться по curriculum.
- Active learning — модель запрашивает сложные примеры у человека.
- Progressive learning — увеличение размера контекста (сначала короткие, потом длинные последовательности).
8. Проблемы и ограничения
- Определение сложности субъективно; один и тот же текст может быть лёгким для одной задачи и сложным для другой.
- Переобучение на простых данных если слишком долго держать модель на лёгких примерах, она может забыть сложные паттерны.
- Дополнительные вычисления нужно предварительно оценить сложность всех примеров (O(N) по времени).
- Не всегда выгодно для некоторых задач (например, генерация кода) обратный curriculum (сначала сложные задачи) может быть эффективнее.
9. Инструменты и фреймворки
- HuggingFace Trainer — можно переопределить
get_train_dataloaderдля кастомного сэмплера. - PyTorch WeightedRandomSampler — базовая реализация.
- Datasets library — позволяет добавить колонку
complexityи фильтровать/сортировать. - MLflow / W&B — логирование распределения сложности по шагам для мониторинга.
Пет-проект для закрепления
Задача Реализовать curriculum learning для дообучения небольшой LLM (например, GPT-2 124M) на датасете с текстами разной длины и техничности.
Инструменты Python, HuggingFace Transformers, Datasets, PyTorch.
Шаги:
- Загрузить датасет (например,
c4или wikitext-2). - Вычислить сложность каждого примера: длина в токенах + perplexity базовой модели (GPT-2 small).
- Нормализовать сложность в [0,1].
- Написать кастомный Trainer, который на каждом шаге пересчитывает веса сэмплирования по формуле
w = exp(-alpha * step/total * complexity). - Обучить модель с CL и без (контроль) на одинаковом количестве шагов.
- Оценить на MMLU (или на perplexity тестового набора).
Ожидаемый результат Модель, обученная с CL, покажет на 1–3% лучшее качество на сложных подмножествах теста (например, на научных текстах) при той же или меньшей финальной perplexity.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 476 | Data mixing strategies для LLM |
| 478 | Active learning для сбора данных |
| 479 | Progressive learning (увеличение контекста) |
| 480 | Self-supervised learning для LLM |
| 481 | Fine-tuning на сложных доменах |
| 482 | Оценка качества данных (data quality metrics) |
Навигация
- Предыдущий: 476
- Следующий: 478
- Индекс: 00. Индекс разборов