Przeuczenie (Overfitting)
Fundamentalny problem uczenia maszynowego: model nadmiernie dopasowuje się do zestawu treningowego wraz z jego specyficznym szumem, tracąc zdolność do generalizacji (Generalization) na nowych danych. Analiza dywergencji funkcji straty, technik regularizacji oraz wczesnego zatrzymywania (Early Stopping) w kodzie.
1. Przegląd koncepcji i istota matematyczna
Głównym celem każdego modelu uczenia maszynowego nie jest odtwarzanie przeszłości, lecz skuteczna ekstrapolacja wiedzy na nieznaną przyszłość – czyli wykazanie zdolności do generalizacji (Generalization).
Gdy pojemność parametryczna modelu (liczba wag) znacząco przewyższa złożoność informacyjną zbioru treningowego, pojawia się zjawisko przeuczenia (Overfitting / High Variance). Zamiast wydobywać invariantne wzorce, sieć neuronowa wychwytuje przypadkowe korelacje w szumie danych.
Model mentalny: student przed egzaminem wykuwa na pamięć dokładne numery odpowiedzi z tyłu podręcznika zamiast uczyć się wzorów: na testach próbnych osiągnie wynik 100%, ale zawiedzie przy pierwszym realnym zadaniu inżynierskim z innymi liczbami.
┌─────────────────────────────────────────────────────────────┐
│ KRZYWA DIVERGENCJI PRZEUCZENIA │
├─────────────────────────────────────────────────────────────┤
│ BŁĄD (Loss) │
│ ▲ │
│ │ Niedouczenie IDEALNY PUNKT Przeuczenie │
│ │ │ │
│ │ ▼ (Wyzwalacz Early Stopping) │
│ │ \ / │
│ │ \ / ═══════════════════════ Walid.│
│ │ \ / Błąd │
│ │ \───────...──────/ │
│ │ \ │
│ │ \───────────────────────────────────────── Trening│
│ │ Błąd │
│ └────────────────────────────────────────────────────────►│
│ EPOKI TRENINGU (Epochs) │
└─────────────────────────────────────────────────────────────┘
2. Praktyczna implementacja: Early Stopping w pętli treningowej PyTorch
Oto jak inżynierowie implementują automatyczne przerywanie nauki w kodzie, aby zapobiec degradacji modelu:
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
Podczas fine-tuningowania za pomocą biblioteki Hugging Face Trainer konfiguracja ta sprowadza się dosłownie do dwóch linii:
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. Cztery główne metody walki z przeuczeniem
- Regularyzacja wag (Weight Decay / $L_2$): Nakłada karę na model za zbyt duże wartości bezwzględne wag w funkcji straty ($Loss = Loss_{orig} + \lambda \sum w_i^2$), co wymusza na modelu zachowanie gładkości i odporności na lokalne skoki.
- Dropout (Losowe wyłączanie węzłów): Podczas treningu losowe 10–20% neuronów w każdej warstwie jest tymczasowo zerowane. Uniemożliwia to „zmowę” (co-adaptation) między neuronami i zmusza sieć do znajdowania redundatnych, niezawodnych ściegów propagacji sygnału.
- Obniżenie pojemności parametrycznej (LoRA Rank Reduction):
Jeśli dataset do adaptacji jest niewielki (np. 200 przykładów stylu korporacyjnego), ustawienie
r=64w LoRA niemal gwarantuje katastrofalne przeuczenie. Obniżenie rzędu dor=8lubr=16działa jako potężny regularyzator. - Augmentacja i dane syntetyczne: Sztuczne dodawanie szumu, parafrazowanie przez modele językowe oraz rozszerzanie treści w celu rozmycia specyficznych sformułowań.
4. Podsumowanie inżynierskie
Przeuczenie to cena za wysoką ekspresyjność współczesnych sieci neuronowych. Profesjonalny inżynier ML nigdy nie kieruje się ładnymi wartościami lossu treningowego, lecz zawsze utrzymuje rygorystyczny zestaw walidacyjny poza pętlą treningową.
FAQ: Przeuczenie (Overfitting)
Powiązane pojęcia
Pre-training
The initial stage of creating a Foundation Model. It involves aligning a neural network with trillions of words from the internet, books, and code using clusters of thousands of GPUs over months, at costs ranging from tens to hundreds of millions of dollars.
Fine-tuning (Dostrajanie)
Proces adaptacji już wytrenowanego dużego modelu językowego do wąsko specjalistycznego zadania lub stylu przy użyciu niewielkiego, wysokiej jakości zestawu danych (Supervised Fine-Tuning, SFT). Pozwala na nauczenie AI terminologii medycznej, korporacyjnego tonu komunikacji lub formatowania specyficznego kodu w ciągu kilku godzin.
Katastroficzne zapominanie (Catastrophic Forgetting)
Fundamentalny problem sztucznych sieci neuronowych, polegający na tym, że podczas uczenia się nowego zadania lub języka zaktualizowane wagi nadpisują wcześniejsze połączenia, co prowadzi do nagłej i całkowitej utraty wcześniej nabytych umiejętności.
Wagi i przesunięcia sieci neuronowych (Weights & Biases)
Fundamentalna natura wytrenowanej sieci neuronowej. Wagi (Weights) to macierzowe współczynniki siły połączeń między sztucznymi neuronami, a przesunięcia (Biases) to progi czułości aktywacji. Wyjaśnienie formatów zapisu (.safetensors, bfloat16, fp8) oraz inspekcji wag za pomocą Pythona i CLI.