Перенавчання (Overfitting)(Перенавчання нейромереж: Bias-Variance компроміс, розбіжність Train/Val Loss та методи регуляризації)
Фундаментальна проблема машинного навчання: модель надмірно підлаштовується під тренувальний датасет разом із його специфічним шумом, втрачаючи здатність до генералізації (Generalization) на нових даних. Розбір дивергенції функцій втрат, технік регуляризації та Early Stopping у коді.
1. Огляд концепції та математична суть
Головна мета будь-якої моделі машинного навчання — не відтворити минуле, а успішно екстраполювати знання на невідоме майбутнє: тобто продемонструвати здатність до генералізації (Generalization).
Коли параметрична ємність моделі (кількість вагів) значно перевищує інформаційну складність навчального датасету, виникає явище Перенавчання (Overfitting / High Variance). Замість вилучення інваріантних закономірностей нейромережа знаходить випадкові кореляції в шумі даних.
Ментальна модель: як студент перед екзаменом зазубрив точні номери відповідей у кінці підручника замість вивчення формул: на тестових білетах він покаже 100% результат, але впаде на першій реальній інженерній задачі з іншими числами.
┌─────────────────────────────────────────────────────────────┐
│ КРИВА ДИВЕРГЕНЦІЇ ПЕРЕНАВЧАННЯ │
├─────────────────────────────────────────────────────────────┤
│ LOSS (Похибка) │
│ ▲ │
│ │ Underfitting ІДЕАЛЬНА ТОЧКА Overfitting │
│ │ │ │
│ │ ▼ (Early Stopping Trigger) │
│ │ \ / │
│ │ \ / ═══════════════════════ Val │
│ │ \ / Loss │
│ │ \───────...──────/ │
│ │ \ │
│ │ \───────────────────────────────────────── Train │
│ │ Loss │
│ └────────────────────────────────────────────────────────►│
│ ЕПОХИ НАВЧАННЯ (Epochs) │
└─────────────────────────────────────────────────────────────┘
2. Практична реалізація: Early Stopping у тренувальному циклі PyTorch
Ось як інженери реалізують автоматичне припинення навчання в коді, щоб не дати моделі деградувати:
import torch
class EarlyStopping:
def __init__(self, patience: int = 3, min_delta: float = 0.001):
self.patience = patience # Скільки епох чекати після зупинки прогресу
self.min_delta = min_delta # Мінімальне покращення loss
self.counter = 0
self.best_loss = float('inf')
self.should_stop = False
def check(self, val_loss: float) -> bool:
if val_loss < self.best_loss - self.min_delta:
self.best_loss = val_loss
self.counter = 0 # Скидаємо лічильник: є покращення!
else:
self.counter += 1
if self.counter >= self.patience:
self.should_stop = True
print(f"[ALERT] Overfitting виявлено! Зупинка навчання на eval_loss: {val_loss:.4f}")
return self.should_stop
Під час файн-тюнінгу бібліотек Hugging Face Trainer це налаштовується буквально двома рядками конфігурації:
from transformers import EarlyStoppingCallback, TrainingArguments
training_args = TrainingArguments(
eval_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
metric_for_best_model="eval_loss",
weight_decay=0.01 # L2 регуляризація
)
callbacks = [EarlyStoppingCallback(early_stopping_patience=2)]
3. Чотири головні методи боротьби з перенавчанням
- Регуляризація ваг (Weight Decay / $L_2$): Штрафує модель за занадто великі абсолютні значення вагів у функції втрат ($Loss = Loss_{orig} + \lambda \sum w_i^2$), що змушує модель залишатися плавною та стійкою до локальних сплесків.
- Dropout (Випадкове відключення вузлів): Під час тренування випадкові 10–20% нейронів у кожному шарі тимчасово обнуляються. Це унеможливлює "змову" (co-adaptation) між нейронами і змушує мережу знаходити дублюючі надійні шляхи передачі сигналу.
- Зниження параметричної ємності (LoRA Rank Reduction):
Якщо датасет для адаптації невеликий (наприклад, 200 прикладів корпоративного стилю), встановлення
r=64у LoRA майже гарантовано призведе до катастрофічного перенавчання. Зниження рангу доr=8абоr=16виступає потужним регуляризатором. - Аугментація та синтетичні дані: Штучне додавання шуму, перефразування через мовні моделі та розширення контенту для розмивання специфічних формулювань.
4. Підсумковий інженерний висновок
Перенавчання — це ціна за високу виразну здатність сучасних нейромереж. Професійний ML-інженер ніколи не орієнтується на красиві цифри тренувального лоссу, а завжди тримає строгий валідаційний набір даних за межами тренувального контуру.
FAQ: Перенавчання (Overfitting)
Пов'язані терміни
Попереднє навчання (Pre-training)
Початковий етап створення базової великої мовної моделі (Foundation Model). Процес згодовування нейромережі трильйонів слів з інтернету, книг і коду на кластерах із тисяч відеокарт протягом місяців за десятки й сотні мільйонів доларів.
Тонке донавчання (Fine-Tuning)
Процес адаптації вже навченої великої моделі до вузькоспеціалізованого завдання або стилю за допомогою невеликого якісного датасету (Supervised Fine-Tuning, SFT). Дозволяє навчити ШІ медичній термінології, корпоративному тону або форматуванню специфічного коду за кілька годин.
Катастрофічне забування (Catastrophic Forgetting)
Фундаментальна проблема штучних нейронних мереж, коли при навчанні новому завданню або іншій мові оновлені вагові коефіцієнти перезаписують попередні зв'язки, призводячи до раптової та повної втрати раніше набутих навичок.
Ваги та зміщення нейромережі (Weights & Biases)
Фундаментальна природа навченої нейромережі. Ваги (Weights) — матричні коефіцієнти сили зв'язку між штучними нейронами, а зміщення (Biases) — поріг чутливості активації. Пояснення форматів збереження (.safetensors, bfloat16, fp8) та інспекція ваг через Python і CLI.