English translation is not available yet. Showing Russian content.

Сколько эпох достаточно для LoRA fine-tuning?

Краткий тезис

Количество эпох для LoRA fine-tuning не фиксировано и зависит от объёма датасета, сложности задачи, learning rate и ранга LoRA. Эмпирическое правило: 1–3 эпохи для среднего датасета (500–10 000 примеров), 2–4 эпохи для маленького (< 500), 1 эпоха для большого (> 10 000). Ключевой приём — следить за валидационной метрикой и останавливаться, когда loss перестаёт падать или начинает расти (переобучение).


1. Термин: LoRA (Low-Rank Adaptation)

LoRA — это техника параметр-эффективного fine-tuning (PEFT). Вместо обновления всех весов предобученной модели в неё добавляют маленькие обучаемые матрицы низкого ранга, а исходные веса замораживают.

  • Зачем существенно сокращает число обучаемых параметров (в 100–10 000 раз), снижает потребление памяти и ускоряет обучение.
  • Ранг LoRA (r) — гиперпараметр, определяющий размер добавленных матриц. Типичные значения: 8, 16, 32, 64.
  • Адаптер LoRA — совокупность этих матриц; после обучения его можно сохранить отдельно (несколько мегабайт) и подгружать к базовой модели.

Поскольку LoRA обновляет лишь малую часть параметров, переобучение наступает не так быстро, как при полном fine-tuning, но риск всё же есть.


2. Факторы, влияющие на необходимое число эпох

ФакторВлияние на число эпох
Размер датасетаЧем меньше данных, тем больше эпох нужно, чтобы модель «увидела» примеры несколько раз.
Сложность задачиДля простой классификации достаточно 1–2 эпох; для генерации ответов или перевода может потребоваться 3–5.
Learning rate (LR)Высокий LR (например, 5e-4) позволяет быстрее сходиться, но может привести к переобучению за меньшее число эпох; низкий LR (1e-5) требует больше эпох.
Ранг LoRAБолее высокий ранг (r = 64) даёт больше обучаемых параметров → выше риск переобучения → часто достаточно 1–2 эпох. Низкий ранг (r = 8) медленнее учится, может потребоваться 3–4 эпохи.
Температура dropout в LoRAЕсли включён dropout (обычно 0.1), он немного регуляризует, позволяя увеличить число эпох без переобучения.
Степень отличия новой задачи от предобученияЕсли задача близка к предобученной (например, дообучение GPT на технической документации), хватает 1 эпохи. Если задача новая (свой домен), нужно 3–4.

3. Эвристики по числу эпох в зависимости от размера датасета

3.1 Датасет < 500 примеров

  • Рекомендация 2–4 эпохи.
  • Риск переобучение высоко (модель может запомнить примеры).
  • Что делать обязательно использовать валидационную выборку (20–30%), early stopping. Если переобучение видно уже на 2‑й эпохе — остановиться раньше.

3.2 Датасет 500–10 000 примеров

  • Рекомендация 1–3 эпохи.
  • Пояснение средний объём; обычно 3 эпохи — хорошая отправная точка. Часто оптимальная эпоха — 2‑я или 3‑я.

3.3 Датасет > 10 000 примеров

  • Рекомендация 1 эпоха, редко 2.
  • Причина данные разнообразны, модель с высокой вероятностью увидит все паттерны за один проход. Вторая эпоха часто лишь увеличивает вычислительные затраты без прироста качества или даже ведёт к переобучению.

4. Как отслеживать, достаточно ли эпох?

4.1 Валидационная метрика

Основной инструмент — validation loss (или accuracy, F1, BLEU — в зависимости от задачи).
Правило: «Train until validation loss stops decreasing».

  • Кривая обучения
    • Train loss монотонно падает, validation loss падает — обучение идёт хорошо.
    • Train loss падает, validation loss перестал падать или начал расти — переобучение (стоит остановиться).
    • Оба loss не падают — возможно, слишком низкий LR или мало эпох.

4.2 Early Stopping

Автоматический механизм:

  • Задаём patience (например, 2–3 эпохи) — если validation loss не улучшился за это число шагов, обучение прерывается.
  • В библиотеках (HuggingFace Transformers) это реализуется через EarlyStoppingCallback.

4.3 Learning rate scheduling

  • Linear schedule with warmup — типичный выбор для LoRA. Обычно learning rate линейно растёт первые 10% шагов, затем падает до нуля.
  • При коротком числе эпох (1–2) лучше использовать более низкий LR и без scheduler (или только warmup).

4.4 Сохранение лучшей модели

Не забирать модель последней эпохи, а сохранять чекпоинт с лучшей валидационной метрикой (например, save_total_limit=2, load_best_model_at_end=True).


5. Пример конфигурации LoRA fine-tuning в коде (HuggingFace + PEFT)

from transformers import AutoModelForCausalLM, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
import torch

model_name = "microsoft/phi-2"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16)

lora_config = LoraConfig(
    r=16,                # ранг
    lora_alpha=32,       # масштабирующий коэффициент
    target_modules=["q_proj", "v_proj"],  # модули для адаптеров
    lora_dropout=0.1,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)

training_args = TrainingArguments(
    output_dir="./phi2-lora-qa",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    learning_rate=2e-4,
    num_train_epochs=3,            # ← здесь ставим эпохи
    logging_steps=50,
    evaluation_strategy="epoch",   # проверяем валидацию каждую эпоху
    save_strategy="epoch",
    load_best_model_at_end=True,
    metric_for_best_model="eval_loss",
    greater_is_better=False,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
    callbacks=[EarlyStoppingCallback(early_stopping_patience=2)],
)

trainer.train()

Здесь мы явно просим 3 эпохи, но благодаря EarlyStopping обучение может завершиться раньше.


6. Что если данные очень малы (< 100 примеров)?

Для таких объёмов даже LoRA может переобучиться. Дополнительные приёмы:

  • Увеличить dropout в LoRA (0.2–0.3).
  • Сильно занизить ранг (r = 2–4).
  • Использовать репетицию прошлых знаний — смешивать небольшой датасет с примерами из предобучающего распределения (replay buffer).
  • Применить аугментацию данных (синонимы, back‑translation).
  • Увеличить число эпох до 10–20, но добавить aggressive early stopping и очень низкий LR (1e-5). Тем не менее это редко даёт выигрыш.

7. Особенности LoRA по сравнению с полным fine-tuning

ХарактеристикаПолный fine-tuningLoRA
Число обучаемых параметров100%0.01–1%
Память (градиенты/оптимизатор)~4× размер модели~1.2–1.5× размер модели
Скорость на эпохумедленнеебыстрее в 2–3 раза
Риск переобучениявышениже (меньше параметров)
Число эпох до переобучениячасто 1–2может быть 3–5

Из-за меньшего числа параметров LoRA может «выдержать» больше эпох, прежде чем начать переобучаться. Это даёт больше возможностей для подбора LR.


8. Практические советы для собеседования

  • «Я обычно начинаю с 3 эпох, смотрю на validation loss после каждой эпохи и применяю early stopping с patience=2».
  • «Если датасет меньше 500 примеров, я поднимаю число эпох до 4, но включаю сильную регуляризацию (dropout=0.2).»
  • «Для больших датасетов (>10k) я делаю 1 эпоху — этого хватает, и экономлю compute
  • «Не забываю про learning rate: для LoRA типичный диапазон 1e-5 – 5e-4; низкий LR требует больше эпох, высокий — меньше.»

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

Задача Определить оптимальное число эпох для LoRA на задаче классификации отзывов (SST-2 или собственный маленький датасет).

Инструменты HuggingFace Transformers, PEFT, Datasets, Weights & Biases (для логирования).

Шаги:

  1. Взять модель BERT-base и применить LoRA (r=8, target_modules=['query', 'value']).
  2. Сгенерировать синтетический датасет из 800 примеров (500 train / 150 val / 150 test).
  3. Провести эксперименты с числом эпох: 1, 2, 3, 4, 5.
  4. Для каждого запуска зафиксировать: validation loss, accuracy на test, время обучения.
  5. Использовать одинаковый LR (2e-4) и batch (16).
  6. Построить график зависимости метрик от эпох.

Ожидаемый результат

  • На 1–2 эпохах может быть недобуч (high loss).
  • Начиная с 3 эпох loss стабилизируется.
  • На 4‑й эпохе может появиться признак переобучения (val loss растёт).
  • Гипотеза подтверждается: 3 эпохи — оптимум для данного датасета.

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

ВопросТема
38Как настроить LoRA (ранг, alpha, target modules)?
40Что такое QLoRA и как он влияет на ресурсы?
36Какие слои лучше заморозить при fine-tuning?
41Как выбор датасета влияет на качество LoRA?
35Чем отличается fine-tuning от промпт-инжиниринга?

11. Навигация


Навигация