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-tuningLoRA требует меньше данных, так как обновляется лишь малая часть параметров.
Сложность задачиЗадачи с узкой спецификой (например, генерация 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 7BLoRA (r=8)500 примеров (инструкции)Улучшение на 15% по ROUGE
Mistral 7BLoRA (r=16)2000 примеров (суммаризация)Сравнимо с full fine-tune на 10k
Llama 2 13BFull fine-tune50 000 примеров (диалог)State-of-the-art на Vicuna benchmark
CodeLlama 34BLoRA1000 примеров (генерация кода)Pass@1 вырос на 20%

8. Как определить, что датасета достаточно

  1. Кривая обучения accuracy/loss на валидации перестаёт расти при увеличении данных.
  2. Сравнение с baseline модель без fine-tuning vs после. Если прирост менее 5% — данных мало или задача не требует дообучения.
  3. Тест на переобучение если loss на train падает, а на val растёт — данных недостаточно.
  4. Бутстреп-оценка обучите на 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.

Шаги:

  1. Взять предобученную модель (например, distilbert-base-uncased).
  2. Создать синтетический датасет из 2000 примеров (можно взять IMDb и отфильтровать).
  3. Обучить LoRA на подвыборках: 50, 100, 200, 500, 1000, 2000 примеров.
  4. Замерить accuracy на фиксированном тестовом наборе (500 примеров).
  5. Построить график зависимости accuracy от размера выборки.
  6. Сделать вывод: при каком размере кривая выходит на плато.

Ожидаемый результат Вы увидите, что после 500–1000 примеров прирост качества замедляется. Это подтверждает эмпирическое правило.


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

ВопросТема
21Что такое fine-tuning и чем отличается от pre-training?
22LoRA vs full fine-tuning: когда что выбирать?
23Как выбрать слои для fine-tuning?
25Как избежать переобучения при fine-tuning?
26Какие методы data augmentation эффективны для LLM?
27Как оценить качество датасета для fine-tuning?

Навигация