При обучении моделей машинного обучения часто возникает вопрос: сколько эпох нужно? Когда модель уже «поняла» данные, а когда она начинает запоминать их слишком точно (то есть переобучаться)?
В этой статье:
- Что такое эпоха
- Как понять, что модель переобучается
- Сколько эпох нужно
- Как выбрать и настроить обучение правильно
Что такое эпоха
Эпоха — это один полный проход по всему обучающему набору данных.
Допустим, у вас есть 10 000 примеров, и вы обучаете модель с batch_size=100
. Это значит, за одну эпоху модель увидит все примеры по 100 штук за раз — всего 100 шагов.
Когда эпох несколько, модель повторно видит одни и те же данные, чтобы «отточить» предсказания.
Почему не всегда больше — лучше
Модель может начать запоминать примеры, а не учиться на них обобщать. Это называется переобучение.
Признаки:
- Ошибка на обучении (
train loss
) продолжает падать - Ошибка на валидации (
val loss
) начинает расти - Точность на тренировке высокая, на тесте — низкая
Как отслеживать переобучение
- Делите данные на
train
иvalidation
- После каждой эпохи измеряйте
val loss
и метрику (например, accuracy) - Стройте графики
Если val loss
начинает расти — модель начала переобучаться, даже если train loss
ещё падает.
Сколько эпох выбрать
Ответ: зависит от данных, модели и задачи. Но есть ориентиры:
- Маленькие датасеты → 5–20 эпох
- Большие датасеты → 2–5 эпох (модель быстро учится)
Что помогает:
- Early stopping — остановка, когда
val loss
не улучшается 2–3 эпохи - Checkpoints — сохранять лучшую модель по
val metric
Пример с EarlyStopping
from transformers import TrainerCallback
class EarlyStop(TrainerCallback):
def __init__(self, patience=3):
self.patience = patience
self.counter = 0
self.best_loss = float("inf")
def on_evaluate(self, args, state, control, metrics, **kwargs):
val_loss = metrics.get("eval_loss")
if val_loss < self.best_loss:
self.best_loss = val_loss
self.counter = 0
else:
self.counter += 1
if self.counter >= self.patience:
control.should_training_stop = True
Вывод
Обучение — это баланс. Слишком мало эпох — модель не научится. Слишком много — начнёт переобучаться.
Следите за метриками на валидации, сохраняйте лучшие версии и не бойтесь остановиться чуть раньше — это часто даёт лучший результат.