O que significa “depurar” e “interpretar” uma rede neural
Depurar (debug) um modelo é tratar o treinamento como um sistema observável: você coleta sinais (curvas, métricas, exemplos errados), formula hipóteses (subajuste, sobreajuste, problema de otimização, dados/rotulagem), executa intervenções controladas e mede o efeito. Interpretar, neste contexto, é entender onde e como o modelo falha (por classe, por subgrupo, por tipo de entrada), para escolher ações corretivas com maior probabilidade de funcionar.
Este capítulo organiza a depuração como um conjunto de procedimentos: (1) ler curvas de aprendizado, (2) inspecionar métricas e matriz de confusão, (3) fazer análise por fatias (subgrupos), (4) rodar ablações para testar contribuições de componentes, (5) fechar o ciclo com hipóteses e ações.
Procedimento 1: leitura de curvas de aprendizado (perda e métricas)
Sinais observáveis essenciais
- Curva de perda de treino ao longo das épocas/steps.
- Curva de perda de validação (mesma escala e frequência de avaliação).
- Métricas de treino/validação (ex.: acurácia, F1, AUC, MAE), alinhadas ao objetivo.
- Gap de generalização: diferença entre desempenho de treino e validação.
- Estabilidade: oscilações, divergência, platôs, “serrilhado”.
Mapa rápido: padrão nas curvas → hipótese provável
| Padrão observado | Hipótese provável | Próximas verificações |
|---|---|---|
| Perda de treino alta e perda de validação alta; ambas melhoram pouco | Subajuste (capacidade insuficiente, features fracas, regularização excessiva) ou otimização travada | Verificar se a perda de treino cai ao aumentar épocas; checar taxa de aprendizado; checar se o modelo consegue memorizar um lote pequeno |
| Perda de treino cai bem; perda de validação para de cair e começa a subir | Sobreajuste | Checar tamanho/qualidade do dataset; avaliar regularização; verificar se há vazamento de dados; analisar por fatias |
| Perda de treino não cai (ou cai e volta a subir), com oscilações grandes | Problema de otimização/instabilidade (LR alta, batch pequeno, normalização inadequada, gradientes instáveis) | Reduzir LR; aumentar batch; checar clipping; checar normalização; inspecionar gradientes |
| Perda de treino cai muito lentamente; validação acompanha, mas tudo é lento | Otimização lenta (LR baixa, scheduler inadequado, arquitetura difícil) | Aumentar LR gradualmente; testar scheduler; checar inicialização; testar otimização alternativa |
| Métrica melhora, mas perda não; ou perda melhora, mas métrica não | Desalinhamento entre perda e métrica, limiar de decisão, desbalanceamento | Checar calibração/threshold; usar métrica adequada; analisar matriz de confusão e curvas por classe |
Passo a passo prático: checklist de leitura das curvas
- Passo 1 — Garanta comparabilidade: treino e validação devem usar o mesmo pré-processamento; a validação não pode ter augmentações estocásticas que mudem a distribuição (a menos que seja intencional e controlado).
- Passo 2 — Observe a queda inicial: nos primeiros passos/épocas a perda de treino deveria cair. Se não cai, suspeite de otimização (LR, bug no pipeline, labels erradas, perda mal configurada).
- Passo 3 — Meça o gap: se a métrica de treino é muito melhor que a de validação, há sobreajuste ou shift entre conjuntos.
- Passo 4 — Procure o “ponto de virada”: quando a validação para de melhorar, isso indica limite de generalização com a configuração atual.
- Passo 5 — Compare perda e métrica: divergências sugerem limiar inadequado, métrica insensível ao que a perda otimiza, ou desbalanceamento.
Procedimento 2: diferenciar subajuste, sobreajuste e otimização (com testes rápidos)
Teste rápido A: “overfit em um lote pequeno”
Objetivo: verificar se o modelo e o treinamento conseguem memorizar um subconjunto minúsculo. Se nem isso funciona, o problema tende a ser otimização, implementação ou dados/labels.
- Passo 1: selecione um lote fixo pequeno (ex.: 32–128 exemplos) e treine apenas nele por muitas iterações.
- Passo 2: monitore perda e métrica nesse lote.
- Interpretação:
- Se a perda não vai quase a zero (ou a métrica não chega perto do máximo), suspeite de bug (labels desalinhadas, perda errada, normalização errada, modelo não recebendo sinal), ou LR inadequada.
- Se memoriza facilmente, mas falha na validação, o problema é generalização (sobreajuste, dataset pequeno/ruidoso, shift).
Teste rápido B: “curva de dados” (mais dados vs desempenho)
Objetivo: ver se o modelo se beneficia de mais dados.
- Passo 1: treine o mesmo modelo com 10%, 30%, 60%, 100% dos dados (mantendo validação fixa).
- Passo 2: plote métrica de validação vs tamanho do treino.
- Interpretação:
- Se melhora consistentemente com mais dados, o gargalo pode ser dados (quantidade/variedade) e/ou sobreajuste.
- Se não melhora, pode ser subajuste (capacidade/representação) ou rótulos/ruído limitando o teto.
Teste rápido C: “sensibilidade à taxa de aprendizado”
Objetivo: identificar se o treinamento está travado por hiperparâmetros de otimização.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
- Passo 1: rode treinos curtos (poucas épocas) com LR em escala log (ex.: 1e-5, 3e-5, 1e-4, 3e-4, 1e-3).
- Passo 2: compare queda de perda inicial e estabilidade.
- Interpretação:
- LR alta: perda oscila/diverge.
- LR baixa: perda quase não cai.
- Existe uma faixa “boa” onde a perda cai rápido e estável.
Procedimento 3: matriz de confusão e métricas por classe
Quando a matriz de confusão é indispensável
- Classificação multiclasse com classes parecidas.
- Desbalanceamento (classes raras).
- Quando a acurácia global parece boa, mas usuários reclamam de erros específicos.
Como ler a matriz de confusão (diagnóstico orientado a ações)
- Erros concentrados entre duas classes: sugere ambiguidade visual/semântica, rotulagem inconsistente, ou falta de exemplos representativos. Ação típica: coletar mais exemplos dessas classes, revisar rótulos, criar features/augmentações específicas, ou ajustar custo por classe.
- Uma classe vira “lixeira” (muitos exemplos de outras classes caem nela): pode indicar limiar/viés do modelo, desbalanceamento ou que a classe é muito heterogênea. Ação: reavaliar definição da classe, dividir em subclasses, ponderar perda, calibrar.
- Classe rara com recall muito baixo: o modelo quase nunca a prevê. Ação: reamostragem, ponderação, focal loss (se aplicável), mais dados e validação estratificada.
Passo a passo prático: relatório mínimo por classe
- Passo 1: compute precisão, recall e F1 por classe.
- Passo 2: ordene classes por pior recall (ou pela métrica crítica do produto).
- Passo 3: para as piores classes, extraia exemplos de falsos positivos e falsos negativos e agrupe por padrões (iluminação, ângulo, ruído, comprimento do texto, etc.).
- Passo 4: verifique se os erros são “difíceis” (ambíguos) ou “bobos” (rótulo errado, pré-processamento quebrado).
Procedimento 4: análise por fatias (subgrupos) para achar falhas escondidas
O que é uma “fatia”
Uma fatia é um subconjunto definido por uma condição interpretável: faixa etária, idioma, dispositivo, iluminação, comprimento da sequência, região, fonte de dados, horário, etc. A análise por fatias evita que uma métrica agregada esconda degradações graves em subgrupos.
Passo a passo prático: como montar uma análise por fatias
- Passo 1 — Defina dimensões de segmentação: escolha atributos disponíveis e relevantes (ex.: “tipo de câmera”, “comprimento do texto”, “classe verdadeira”, “fonte do dado”).
- Passo 2 — Garanta tamanho mínimo: imponha um mínimo de amostras por fatia para evitar conclusões ruidosas (ex.: >= 100, dependendo do problema).
- Passo 3 — Meça a métrica certa: para classes raras, use recall/PR-AUC; para regressão, use MAE por faixa; para ranking, use NDCG por grupo.
- Passo 4 — Compare com o global: calcule “delta” por fatia (métrica_fatia − métrica_global).
- Passo 5 — Investigue as piores fatias: amostre erros e identifique causas (shift de distribuição, ruído, ausência de exemplos no treino).
Padrões típicos em fatias → hipóteses
| Padrão | Hipótese provável | Ações corretivas |
|---|---|---|
| Uma fonte de dados específica tem desempenho muito pior | Shift de domínio (pré-processamento, qualidade, estilo) | Normalizar pipeline; coletar dados dessa fonte; treino com mistura/ponderação; validação por domínio |
| Entradas longas têm pior desempenho | Limitação de contexto/representação; truncamento; ruído acumulado | Ajustar truncamento; arquitetura/posição; features; treinar com distribuição real de comprimentos |
| Baixa luz/baixa resolução piora muito | Robustez insuficiente | Augmentações direcionadas; dados reais; pré-processamento (denoise, resize consistente) |
| Subgrupo com rótulos inconsistentes tem métrica baixa e perda alta | Problema de rotulagem | Auditoria de rótulos; regras de anotação; limpeza; modelagem de ruído |
Procedimento 5: ablação como ferramenta de diagnóstico (não só “melhoria”)
Conceito: o que é uma ablação
Ablação é um experimento controlado em que você remove, substitui ou simplifica um componente para medir sua contribuição. O objetivo é responder perguntas do tipo: “Esse componente realmente ajuda?” e “Ajuda em quais fatias/classe?”
Regras para ablações confiáveis
- Uma mudança por vez: altere apenas um fator (ex.: tirar dropout) mantendo o resto fixo.
- Mesmo orçamento: compare com mesmo número de épocas/steps e mesma política de early stopping.
- Repita seeds: rode 3–5 seeds quando a variância for alta; reporte média e desvio.
- Compare por fatias: um componente pode não melhorar o global, mas reduzir falhas críticas em subgrupos.
Tipos de ablação úteis (com hipóteses e leituras)
| Ablação | O que testa | Sinal esperado | Interpretação |
|---|---|---|---|
| Reduzir profundidade (menos camadas) | Capacidade vs generalização | Treino piora; validação pode melhorar se havia sobreajuste | Se validação melhora, o modelo estava complexo demais para os dados |
| Aumentar profundidade | Capacidade/representação | Treino melhora; validação só melhora se havia subajuste | Se treino melhora e validação não, falta regularização/dados |
| Trocar ativação (A→B) | Dinâmica de otimização e expressividade | Curvas mais estáveis/rápidas ou saturação reduzida | Se a perda cai mais rápido, o gargalo era otimização/gradiente |
| Remover/alterar normalização | Estabilidade e escala interna | Sem normalização pode divergir ou ficar mais lento | Se piora muito, o treino dependia de estabilização; revisar LR/batch |
| Remover dropout/L2 | Regularização | Treino melhora; validação piora se havia sobreajuste | Se validação piora, regularização era necessária |
| Trocar otimizador/scheduler | Eficiência de otimização | Queda inicial mais rápida/estável | Se melhora só no começo, pode ser LR/scheduler, não arquitetura |
Passo a passo prático: plano de ablação em 6 execuções
- Execução 0 (baseline): configuração atual, com logging completo (curvas, matriz de confusão, fatias).
- Execução 1 (capacidade): reduzir profundidade/largura em ~30%.
- Execução 2 (capacidade): aumentar profundidade/largura em ~30%.
- Execução 3 (regularização): remover uma regularização principal (ex.: dropout) mantendo o resto.
- Execução 4 (regularização): aumentar regularização (ex.: maior weight decay ou dropout).
- Execução 5 (otimização): manter arquitetura e trocar apenas LR/scheduler (ou otimizador).
Interprete em conjunto: se mudanças de capacidade alteram muito o treino, mas pouco a validação, o gargalo pode ser dados/ruído; se mudanças de otimização alteram fortemente a queda inicial, o gargalo era otimização; se regularização controla o gap, o gargalo era generalização.
Procedimento 6: análise de erros orientada a categorias (do sintoma à ação)
Como construir um “catálogo de erros”
- Passo 1 — Colete um conjunto de erros: por exemplo, 200–500 exemplos errados da validação/teste, estratificados por classe e por fatias críticas.
- Passo 2 — Crie categorias explicativas: ex.: “oclusão”, “baixa luz”, “texto truncado”, “ambiguidade entre classes A/B”, “rótulo suspeito”, “entrada fora do domínio”.
- Passo 3 — Conte frequência e impacto: quantos erros por categoria e qual o impacto na métrica (ex.: quantos FN na classe crítica).
- Passo 4 — Mapeie categoria → intervenção: dados, pré-processamento, mudança de loss, mudança de arquitetura, ajuste de threshold, etc.
Exemplos de diagnósticos típicos (com sinais → hipótese → ação)
Caso 1: acurácia de treino alta, validação estagna e piora
- Sinais: perda de treino cai continuamente; perda de validação cai no início e depois sobe; gap crescente; matriz de confusão mostra classes raras com recall baixo.
- Hipóteses prováveis: sobreajuste; desbalanceamento; validação com distribuição diferente; rótulos ruidosos em parte do treino.
- Ações corretivas:
- Reforçar regularização e/ou early stopping mais agressivo.
- Rebalancear (ponderação por classe, reamostragem) e reavaliar por classe.
- Auditar rótulos nas classes com maior confusão.
- Adicionar dados nas fatias onde o desempenho é pior.
Caso 2: perda de treino não cai e métricas ficam próximas do aleatório
- Sinais: curvas quase planas; pequenas mudanças com épocas; “overfit em lote pequeno” falha.
- Hipóteses prováveis: bug no pipeline (labels desalinhadas, shuffle incorreto, normalização errada), perda incompatível com o formato do alvo, LR inadequada, dados com rótulos trocados em massa.
- Ações corretivas:
- Verificar manualmente pares (entrada, rótulo) após o dataloader.
- Checar shapes e codificação do alvo (one-hot vs índice; máscara de padding; etc.).
- Rodar varredura curta de LR e checar estabilidade.
- Testar um modelo mínimo (bem pequeno) para validar o pipeline.
Caso 3: perda cai, mas a métrica não melhora (ou piora)
- Sinais: perda de validação diminui, mas F1/recall não sobe; matriz de confusão mostra muitos falsos negativos na classe importante.
- Hipóteses prováveis: limiar de decisão inadequado; métrica não alinhada ao objetivo; desbalanceamento; calibração ruim.
- Ações corretivas:
- Ajustar threshold com base na validação (otimizar F1/recall/precisão conforme requisito).
- Reportar e otimizar métricas por classe e por fatias críticas.
- Usar ponderação/custos por classe se o objetivo penaliza FN/FP de forma diferente.
Caso 4: desempenho global bom, mas uma fatia crítica é ruim
- Sinais: métrica global alta; análise por fatias mostra grande queda em um subgrupo; erros têm padrão consistente (ex.: baixa luz, idioma específico).
- Hipóteses prováveis: shift de domínio; falta de cobertura no treino; pré-processamento diferente na fatia.
- Ações corretivas:
- Adicionar dados representativos da fatia (ou reponderar amostragem).
- Aplicar augmentações direcionadas que simulem a fatia.
- Separar validação por domínio e monitorar métricas por fatia como critério de parada.
Procedimento 7: roteiro de depuração em 30–60 minutos (triagem)
- 1) Sanidade do pipeline (5–10 min): inspecione exemplos e rótulos; rode “overfit em lote pequeno”.
- 2) Curvas (10 min): identifique padrão (subajuste/sobreajuste/otimização) e o ponto de virada.
- 3) Matriz de confusão + métricas por classe (10 min): encontre as piores classes e o tipo de confusão dominante.
- 4) Fatias (10–20 min): compute métricas por subgrupo e liste as 5 piores fatias com tamanho suficiente.
- 5) Hipóteses e 2 intervenções (5 min): escolha duas ações com maior chance de impacto e menor custo (ex.: ajustar LR; ajustar threshold; reponderar classes; coletar dados de uma fatia).
Modelos de registro (templates) para tornar a depuração repetível
Template de experimento
ID: exp_XXX Baseline/Ablação: (baseline | ablation) Mudança única: ... Dados: versão/recorte/estratificação ... Treino: épocas/steps, batch, LR, scheduler ... Métrica-alvo: ... Resultados globais: loss_val=..., metric_val=... Gap (train-val): ... Piores classes (recall): ... Piores fatias (delta): ... Observações de erros: categorias mais frequentes ... Próxima hipótese: ... Próxima ação: ...Template de categorias de erro
Categoria | Exemplos (links/ids) | Frequência | Impacto (classe/fatia) | Hipótese | Ação (dados/modelo/threshold) | Prioridade