Skip to main content

Przeuczenie (Overfitting)

DLA AGENTÓW AIChatGPTClaude

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

  1. 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.
  2. 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.
  3. Obniżenie pojemności parametrycznej (LoRA Rank Reduction): Jeśli dataset do adaptacji jest niewielki (np. 200 przykładów stylu korporacyjnego), ustawienie r=64 w LoRA niemal gwarantuje katastrofalne przeuczenie. Obniżenie rzędu do r=8 lub r=16 działa jako potężny regularyzator.
  4. 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ą.

/ Najczęściej zadawane pytaniaSchema.org FAQPage

FAQ: Przeuczenie (Overfitting)

Na podstawie punktu dywergencji: błąd treningowy (Train Loss) nadal monotonicznie maleje, podczas gdy błąd walidacyjny (Validation Loss) osiąga minimum i zaczyna rosnąć. Właśnie w tym momencie model przestaje uczyć się ogólnych reguł i zaczyna zapamiętywać konkretne próbki.
/ Linki wewnętrzne
Wszystkie hasła