Pular para conteúdo

Aula 19 - Treinamento, Overfitting, Regularização e Transfer Learning 🎯

Objetivo Pedagógico

Objetivo: Técnicas de treinamento de redes neurais profundas: Otimizadores modernos (AdamW), mitigação de Overfitting com Dropout, Weight Decay, Early Stopping e Transfer Learning.


📑 1. Fundamentos Teóricos & Análise Técnica

Treinar redes neurais profundas com milhões de parâmetros exige um equilíbrio rigoroso entre a capacidade de representação do modelo e sua capacidade de Generalização para dados não vistos.

  1. O Dilema do Overfitting (Sobreajuste): Ocorre quando o modelo memoriza o ruído estatístico do conjunto de treinamento, atingindo erro quase zero no treino mas errando grosseiramente em validação.
  2. Técnicas de Regularização:
  3. Dropout: Desativa aleatoriamente uma fração dos neurônios durante o forward pass, forçando a rede a aprender representações redundantes e não correlacionadas.
  4. Weight Decay (Regularização L2 / AdamW): Penaliza pesos excessivamente grandes adicionando \(\frac{1}{2} \lambda ||W||^2\) à função de perda.
  5. Early Stopping: Interrompe o treinamento assim que a perda no conjunto de validação começa a subir.
  6. Transfer Learning (Aprendizado por Transferência): Técnica onde aproveitamos modelos pré-treinados em gigantescas bases de dados (como ImageNet) congelando suas camadas iniciais de extração de características (Feature Extractor) e retreinando apenas o classificador final (Fine-Tuning).

📐 Arquitetura Conceitual & Diagrama de Fluxo

graph TD
    Pretrained["Modelo Pré-Treinado no ImageNet (Ex: ResNet-50)"] --> Freeze["Congelar Camadas Convolucionais Iniciais (weights.requires_grad = False)"]
    Freeze --> Head["Substituir Cabeça de Classificação por Nova Camada"]
    Head --> Train["Treinamento Rápido em Dataset Específico (Fine-Tuning)"]
    Train --> HighAcc["Alta Acurácia com Poucos Dados e Baixo Custo Computacional!"]
    style Pretrained fill:#e1f5fe,stroke:#01579b
    style Freeze fill:#fff3e0,stroke:#e65100
    style HighAcc fill:#e8f5e9,stroke:#2e7d32

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Otimizador AdamW com Cosine Annealing: Desaceleração suave da taxa de aprendizado (Learning Rate) ao longo das épocas. - Data Augmentation: Expansão artificial dos dados de treino com rotações, flips e cortes aleatórios. - Fine-Tuning de Camadas Superiores: Descongelamento progressivo das últimas camadas com learning rate reduzida. - Métricas de Validação Aprofundadas: Uso de F1-Score, Matriz de Confusão e curva ROC-AUC além da simples Acurácia.


🛠️ 2. Implementação Prática em Deep Learning e Otimização de Modelos

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// transfer_learning.py (Transfer Learning com ResNet Pré-Treinada em PyTorch)
import torch
import torch.nn as nn
from torchvision import models

def create_transfer_model(num_classes: int) -> nn.Module:
    # 1. Carrega modelo pré-treinado com pesos do ImageNet
    model = models.resnet50(weights=models.ResNet50_Weights.DEFAULT)

    # 2. Congela todos os parâmetros do extrator de características
    for param in model.parameters():
        param.requires_grad = False

    # 3. Substitui a camada final (Fully Connected) para nosso número de classes
    num_features = model.fc.in_features
    model.fc = nn.Sequential(
        nn.Dropout(p=0.5), # Regularização contra overfitting
        nn.Linear(num_features, num_classes)
    )

    return model

model = create_transfer_model(num_classes=5)
# Apenas a camada final será atualizada pelo otimizador
trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(f"Parâmetros treináveis após congelamento: {trainable_params:,}")

💡 Análise Passo a Passo do Código

  1. requires_grad = False: Desativa o cálculo de gradientes nas primeiras 49 camadas, economizando tempo e memória da GPU.
  2. Dropout na Cabeça de Classificação: Garante que o novo classificador linear generalize bem sem sobreajustar rapidamente.
  3. Economia de Dados e Computação: Permite atingir acurácia de ponta com centenas de imagens em vez de milhões.

🎯 3. Próximos Passos & Sequência Didática