English translation is not available yet. Showing Russian content.
Какой размер датасета нужен для fine-tuning?
Краткий тезис
Размер датасета для fine-tuning зависит от метода (LoRA или full fine-tuning), размера модели, сложности задачи и требуемого качества. Для LoRA на моделях 7B–13B достаточно 500–2000 примеров, а full fine-tuning требует тысяч примеров, чтобы избежать переобучения. Эмпирическое правило: количество примеров должно составлять (параметры модели) / (10–100). При малых датасетах обязательна data augmentation.
1. Термины: Fine-tuning, LoRA, Full fine-tuning
Fine-tuning — дообучение предобученной модели на новом датасете для адаптации под конкретную задачу (например, суммаризация, инструкции, диалог).
LoRA (Low-Rank Adaptation) — метод параметрически эффективного fine-tuning: в замороженные слои модели добавляются небольшие обучаемые матрицы ранга r (обычно 8–64). Количество обучаемых параметров — доли процента от полной модели.
Full fine-tuning — обновление всех весов модели. Требует больших вычислительных ресурсов и данных, так как модель может легко переобучиться.
Data augmentation — искусственное увеличение датасета путём модификации существующих примеров (перефразирование, замена синонимов, back-translation).
Переобучение (overfitting) — модель запоминает тренировочные данные, но не обобщает на новые. Симптомы: высокая точность на train, низкая на validation.
2. Факторы, влияющие на необходимый размер датасета
| Фактор | Влияние |
|---|---|
| Размер модели (число параметров) | Чем больше модель, тем больше данных нужно, чтобы обновить все веса без переобучения. |
| Метод fine-tuning | LoRA требует меньше данных, так как обновляется лишь малая часть параметров. |
| Сложность задачи | Задачи с узкой спецификой (например, генерация SQL-запросов) требуют меньше примеров, чем широкие (например, общий чат). |
| Качество данных | Чистые, непротиворечивые данные позволяют обойтись меньшим объёмом. |
| Желаемое качество | Для продакшн-уровня нужно больше примеров, чем для прототипа. |
3. Минимальные требования для LoRA
- Абсолютный минимум 50–100 примеров (при условии высокой чистоты и узкой задачи). Модель может выучить простой паттерн, но качество будет низким.
- Хорошо 500–1000 примеров. Стабильное улучшение, низкий риск переобучения.
- Лучше 2000–10000+ примеров. Максимальное качество для LoRA, особенно на моделях 7B–13B.
Практическое правило для LoRA количество примеров ≈ (число обучаемых параметров LoRA) × 10–100. Например, для LoRA с рангом 8 на 7B модели (обучаемых ~4 млн параметров) нужно 40–400 тыс. примеров? Нет, это слишком много. На практике эмпирика другая: 500–2000 примеров работают хорошо, потому что LoRA использует сильную предобученную базу.
4. Рекомендации для full fine-tuning
- Минимум 2000–5000 примеров (иначе переобучение почти гарантировано).
- Хорошо 10 000–50 000 примеров.
- Лучше 100 000+ примеров для моделей 7B–70B.
Почему full fine-tuning требует больше данных?
Обновляются все миллиарды параметров. Если данных мало, модель запоминает шум и теряет обобщающую способность. Регуляризация (weight decay, dropout) помогает, но не решает проблему полностью.
5. Эмпирическая формула
Общая оценка минимального размера датасета:
N_min ≈ (число параметров модели) / (10 … 100)
Примеры
-
Модель 7B (7×10⁹ параметров):
N_min = 7×10⁹ / 100 = 70 млн примеров — нереалистично.
Формула применима скорее для full fine-tuning с нуля, но для дообучения предобученной модели знаменатель можно увеличить до 1000–10 000.
На практике для 7B full fine-tuning хватает 10–50 тыс. примеров. -
LoRA на 7B (обучаемых ~0.1% параметров ≈ 7 млн):
N_min = 7×10⁶ / 100 = 70 тыс. примеров — тоже завышено.
Реально 500–2000 примеров дают хороший результат.
Вывод формула — грубая оценка. Лучше ориентироваться на бенчмарки и валидацию.
6. Data augmentation для маленьких датасетов
Если датасет меньше 500 примеров, обязательно применяйте data augmentation:
- Перефразирование с помощью LLM (GPT-4, Llama) — создание 3–5 вариантов каждого примера.
- Back-translation — перевод на другой язык и обратно.
- Замена синонимов (для текстовых задач).
- Добавление шума (опечатки, пропуски) для задач исправления ошибок.
Пример кода (Hugging Face Datasets + GPT):
from datasets import Dataset
import openai
def augment_example(example):
prompt = f"Перефразируй следующий запрос: {example['question']}"
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
return {"question_aug": response.choices[0].message.content}
dataset = Dataset.from_list([{"question": "Какой размер датасета нужен?"}])
augmented = dataset.map(augment_example)
7. Практические примеры
| Модель | Метод | Размер датасета | Результат |
|---|---|---|---|
| Llama 2 7B | LoRA (r=8) | 500 примеров (инструкции) | Улучшение на 15% по ROUGE |
| Mistral 7B | LoRA (r=16) | 2000 примеров (суммаризация) | Сравнимо с full fine-tune на 10k |
| Llama 2 13B | Full fine-tune | 50 000 примеров (диалог) | State-of-the-art на Vicuna benchmark |
| CodeLlama 34B | LoRA | 1000 примеров (генерация кода) | Pass@1 вырос на 20% |
8. Как определить, что датасета достаточно
- Кривая обучения accuracy/loss на валидации перестаёт расти при увеличении данных.
- Сравнение с baseline модель без fine-tuning vs после. Если прирост менее 5% — данных мало или задача не требует дообучения.
- Тест на переобучение если loss на train падает, а на val растёт — данных недостаточно.
- Бутстреп-оценка обучите на 50%, 75%, 100% данных. Если качество растёт линейно — нужно больше.
9. Ошибки при выборе размера датасета
- Слишком мало данных для full fine-tuning → переобучение, модель теряет общие знания.
- Слишком много данных для LoRA → возможно, но неэффективно: LoRA не может использовать весь объём из-за ограниченной ёмкости.
- Игнорирование качества данных 1000 грязных примеров хуже, чем 100 чистых.
- Отсутствие валидации без hold-out набора нельзя оценить, достаточно ли данных.
10. Инструменты для оценки достаточности датасета
- Hugging Face Trainer — встроенные коллбэки для логирования loss.
- Weights & Biases — визуализация кривых обучения.
- Scikit-learn Learning Curve — построение зависимости качества от размера выборки.
Пример построения learning curve
from sklearn.model_selection import learning_curve
import numpy as np
train_sizes, train_scores, test_scores = learning_curve(
model, X, y, train_sizes=np.linspace(0.1, 1.0, 5), cv=3
)
# Если test_scores растёт с размером — данных мало.
Пет-проект для закрепления
Задача Определить минимальный размер датасета для LoRA fine-tuning на задаче классификации тональности (positive/negative).
Инструменты Hugging Face Transformers, PEFT, Datasets, scikit-learn.
Шаги:
- Взять предобученную модель (например, distilbert-base-uncased).
- Создать синтетический датасет из 2000 примеров (можно взять IMDb и отфильтровать).
- Обучить LoRA на подвыборках: 50, 100, 200, 500, 1000, 2000 примеров.
- Замерить accuracy на фиксированном тестовом наборе (500 примеров).
- Построить график зависимости accuracy от размера выборки.
- Сделать вывод: при каком размере кривая выходит на плато.
Ожидаемый результат Вы увидите, что после 500–1000 примеров прирост качества замедляется. Это подтверждает эмпирическое правило.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 21 | Что такое fine-tuning и чем отличается от pre-training? |
| 22 | LoRA vs full fine-tuning: когда что выбирать? |
| 23 | Как выбрать слои для fine-tuning? |
| 25 | Как избежать переобучения при fine-tuning? |
| 26 | Какие методы data augmentation эффективны для LLM? |
| 27 | Как оценить качество датасета для fine-tuning? |
Навигация
- Предыдущий: 23
- Следующий: 25
- Индекс: 00. Индекс разборов