Overfitting
Problema fundamental do aprendizado de máquina: o modelo ajusta-se excessivamente ao conjunto de dados de treinamento, incluindo seu ruído específico, perdendo a capacidade de generalização (Generalization) em novos dados. Análise da divergência das funções de custo, técnicas de regularização e Early Stopping no código.
1. Visão geral do conceito e essência matemática
O objetivo principal de qualquer modelo de aprendizado de máquina não é reproduzir o passado, mas extrapolar com sucesso o conhecimento para um futuro desconhecido: ou seja, demonstrar capacidade de generalização (Generalization).
Quando a capacidade paramétrica do modelo (número de pesos) excede significativamente a complexidade informacional do dataset de treinamento, surge o fenômeno de Overfitting / Alta Variância. Em vez de extrair invariantes规律, a rede neural encontra correlações aleatórias no ruído dos dados.
Modelo mental: como um estudante que decora os números exatos das respostas no final do livro antes da prova em vez de estudar as fórmulas: ele terá 100% de acerto nos testes simulados, mas falhará na primeira tarefa de engenharia real com números diferentes.
┌─────────────────────────────────────────────────────────────┐
│ CURVA DE DIVERGÊNCIA DO OVERFITTING │
├─────────────────────────────────────────────────────────────┤
│ LOSS (Erro) │
│ ▲ │
│ │ Underfitting PONTO IDEAL Overfitting │
│ │ │ │
│ │ ▼ (Gatilho de Early Stopping) │
│ │ \ / │
│ │ \ / ═══════════════════════ Val │
│ │ \ / Loss │
│ │ \───────...──────/ │
│ │ \ │
│ │ \───────────────────────────────────────── Train │
│ │ Loss │
│ └────────────────────────────────────────────────────────►│
│ ÉPOCAS DE TREINAMENTO (Epochs) │
└─────────────────────────────────────────────────────────────┘
2. Implementação prática: Early Stopping no ciclo de treinamento PyTorch
Veja como os engenheiros implementam a interrupção automática do treinamento no código para evitar a degradação do modelo:
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
Durante o fine-tuning com a biblioteca Hugging Face Trainer, isso é configurado literalmente com duas linhas de configuração:
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. Quatro principais métodos para combater o overfitting
- Regularização de pesos (Weight Decay / $L_2$): Penaliza o modelo por valores absolutos excessivamente grandes dos pesos na função de perda ($Loss = Loss_{orig} + \lambda \sum w_i^2$), forçando o modelo a permanecer suave e estável contra picos locais.
- Dropout (Desativação aleatória de nós): Durante o treinamento, 10–20% aleatórios dos neurônios em cada camada são temporariamente zerados. Isso impede a "conspiração" (co-adaptation) entre neurônios e força a rede a encontrar caminhos redundantes e confiáveis para a transmissão de sinal.
- Redução da capacidade paramétrica (LoRA Rank Reduction):
Se o dataset para adaptação for pequeno (por exemplo, 200 exemplos de estilo corporativo), definir
r=64no LoRA quase certamente levará a um overfitting catastrófico. Reduzir o rank parar=8our=16atua como um regularizador poderoso. - Augmentação e dados sintéticos: Adição artificial de ruído, paráfrase via modelos de linguagem e expansão de conteúdo para diluir formulações específicas.
4. Conclusão de engenharia
O overfitting é o preço pago pela alta capacidade expressiva das redes neurais modernas. Um engenheiro de ML profissional nunca se orienta pelos belos números da loss de treinamento, mantendo sempre um conjunto de validação rigoroso fora do loop de treinamento.
FAQ: Overfitting
Termos relacionados
Pré-treinamento
Etapa inicial da criação de um modelo de linguagem fundamental (Foundation Model). Processo de ajuste de uma rede neural com trilhões de palavras extraídas da internet, livros e código, executado em clusters compostos por milhares de GPUs durante meses, com custos que variam de dezenas a centenas de milhões de dólares.
Fine-Tuning
Processo de adaptação de um modelo grande já treinado para uma tarefa ou estilo específico utilizando um pequeno conjunto de dados de alta qualidade (Supervised Fine-Tuning, SFT). Permite treinar a IA em terminologia médica, tom corporativo ou formatação de código específico em poucas horas.
Esquecimento Catastrófico (Catastrophic Forgetting)
Problema fundamental das redes neurais artificiais, no qual, ao aprender uma nova tarefa ou idioma, os coeficientes de peso atualizados sobrescrevem conexões anteriores, resultando na perda súbita e completa de habilidades previamente adquiridas.
Pesos e Vies de Redes Neurais (Weights & Biases)
A natureza fundamental de uma rede neural treinada. Os Pesos (Weights) são coeficientes matriciais que definem a força das conexões entre neurônios artificiais, enquanto os Vies (Biases) representam o limiar de sensibilidade para ativação. Explicação dos formatos de armazenamento (.safetensors, bfloat16, fp8) e inspeção de pesos via Python e CLI.