Dropout Monte Carlo

Visão geral

Dropout de Monte Carlo (Monte Carlo Dropout, MC Dropout) é uma técnica simples e amplamente utilizada para estimar a incerteza preditiva em redes neurais profundas. A ideia central é:

  • Treinar um modelo com regularização padrão de Dropout.
  • Manter o dropout ativo no momento da inferência (em vez de desativá-lo).
  • Executar múltiplas passagens estocásticas para frente (forward passes) pelo mesmo input.
  • Tratar a dispersão resultante das previsões como uma aproximação da incerteza bayesiana (Bayesian uncertainty), especificamente a incerteza epistêmica.

O MC dropout se popularizou em grande parte devido à interpretação de Gal & Ghahramani (2016): o dropout pode ser visto como uma forma aproximada de inferência variacional (variational inference) em uma rede neural bayesiana, em que o dropout induz uma distribuição sobre os pesos do modelo.

O MC dropout é atraente porque exige mudanças arquiteturais mínimas e é fácil de implementar em pipelines de aprendizado profundo já existentes.

Por que a incerteza importa

Redes neurais modernas frequentemente produzem previsões confiantes mesmo quando estão erradas — especialmente em entradas que diferem da distribuição de treinamento. Estimativas de incerteza ajudam com:

  • Detecção fora da distribuição (out-of-distribution, OOD): sinalizar entradas diferentes dos dados de treinamento.
  • Tomada de decisão sensível ao risco: delegar a humanos quando houver incerteza (por exemplo, em imagens médicas).
  • Aprendizado ativo (active learning): selecionar amostras nas quais o modelo está mais incerto para rotulagem.
  • Implantação mais segura: quantificar quando o conhecimento do modelo é limitado.

Para contexto sobre abordagens bayesianas para incerteza em redes, veja Redes Neurais Bayesianas.

Dropout como inferência bayesiana aproximada (teoria em breve)

Recapitulando o dropout padrão

No treinamento, o dropout zera aleatoriamente ativações (ou às vezes pesos) com probabilidade (p). Isso pode ser visto como amostrar uma sub-rede “afinada” (thinned) a cada iteração.

No tempo de teste, na receita padrão de dropout:

  • O dropout é desligado
  • As ativações são escaladas apropriadamente (ou o escalonamento é feito durante o treinamento)

Isso produz uma única previsão determinística.

Perspectiva bayesiana

Em um modelo bayesiano, colocamos uma distribuição sobre os pesos (p(\mathbf{W})) e calculamos uma posteriori (p(\mathbf{W} \mid \mathcal{D})). As previsões marginalizam os pesos:

[ p(y \mid x, \mathcal{D}) = \int p(y \mid x, \mathbf{W}) , p(\mathbf{W} \mid \mathcal{D}) , d\mathbf{W} ]

Essa integral é intratável para redes profundas.

O MC dropout aproxima isso por:

  • Tratar as máscaras de dropout como amostras de uma posteriori aproximada (q(\mathbf{W}))
  • Aproximar a integral com amostragem de Monte Carlo (Monte Carlo sampling):

[ p(y \mid x, \mathcal{D}) \approx \frac{1}{T} \sum_{t=1}^{T} p(y \mid x, \mathbf{W}_t), \quad \mathbf{W}_t \sim q(\mathbf{W}) ]

A justificativa teórica costuma ser formulada como inferência variacional, em que o dropout corresponde a uma família variacional e a um objetivo específicos (intimamente relacionado à minimização do risco empírico regularizado).

Para leitores novos nessa ideia, veja Inferência Variacional.

O procedimento de MC dropout

  1. Treine sua rede neural com dropout como de costume.
  2. No momento da inferência, ative o dropout (mantenha o mascaramento estocástico).
  3. Para cada entrada (x), execute (T) passagens para frente: [ \hat{y}^{(1)}, \hat{y}^{(2)}, \ldots, \hat{y}^{(T)} ]
  4. Agregue essas amostras para calcular:
    • Média preditiva (previsão esperada)
    • Variância preditiva (incerteza)

Média e variância preditivas (regressão)

Para previsões escalares de regressão (\hat{y}^{(t)} \in \mathbb{R}):

Média preditiva [ \mu(x) = \frac{1}{T} \sum_{t=1}^{T} \hat{y}^{(t)} ]

Variância preditiva (baseada em amostras) [ \sigma^2(x) = \frac{1}{T} \sum_{t=1}^{T} \left(\hat{y}^{(t)}\right)^2 - \mu(x)^2 ]

Essa variância reflete principalmente incerteza epistêmica (incerteza devido a dados limitados / parâmetros incertos).

Distribuição preditiva (classificação)

Para classificação com (K) classes, cada passagem retorna probabilidades de classe via softmax: [ \mathbf{p}^{(t)} = \text{softmax}(\mathbf{z}^{(t)}) \in \Delta^{K-1} ]

A probabilidade média preditiva é: [ \bar{\mathbf{p}} = \frac{1}{T} \sum_{t=1}^{T} \mathbf{p}^{(t)} ]

Uma pontuação comum de incerteza é a entropia preditiva (predictive entropy): [ H(\bar{\mathbf{p}}) = -\sum_{k=1}^{K} \bar{p}_k \log \bar{p}_k ]

No entanto, a entropia preditiva mistura diferentes fontes de incerteza. Uma quantidade mais “focada no epistêmico” é a informação mútua (mutual information), frequentemente usada em aprendizado ativo:

  • Calcule a entropia da previsão média (H(\bar{\mathbf{p}}))
  • Subtraia a entropia esperada sob as amostras de dropout:

[ \text{MI}(y, \mathbf{W} \mid x) = H(\bar{\mathbf{p}}) - \frac{1}{T}\sum_{t=1}^{T} H(\mathbf{p}^{(t)}) ]

MI alta sugere que os parâmetros do modelo discordam (incerteza epistêmica).

Incerteza epistêmica vs aleatória

A incerteza costuma ser decomposta em:

  • Incerteza epistêmica: incerteza sobre os parâmetros do modelo (reduzível com mais dados).
  • Incerteza aleatória (aleatoric uncertainty): ruído inerente nos dados (irredutível), por exemplo, ruído de sensor, ambiguidade de rótulos.

O MC dropout captura principalmente a incerteza epistêmica porque a aleatoriedade vem de amostrar diferentes sub-redes (um proxy para diferentes configurações plausíveis de parâmetros).

Modelando também a incerteza aleatória (regressão)

Se você quer ambas:

  • Faça o modelo produzir tanto uma média quanto uma variância: (\mu(x)), (\sigma^2_\text{ale}(x))
  • Treine com uma verossimilhança como a log-verossimilhança negativa Gaussiana

Então:

  • O MC dropout captura incerteza em (\mu(x)) (epistêmica)
  • O (\sigma^2_\text{ale}(x)) previsto captura ruído aleatório

Esse é um padrão comum em regressão com consciência de incerteza.

Exemplo prático: MC dropout em PyTorch

Ativando dropout na inferência

No PyTorch, chamar model.train() habilita o dropout — mas isso também afeta camadas como BatchNorm. Em geral, você quer:

  • Dropout ligado
  • BatchNorm congelado (usar estatísticas acumuladas)

Uma abordagem prática é colocar o modelo em modo de avaliação e, em seguida, habilitar manualmente os módulos de dropout.

import torch
import torch.nn as nn

def enable_mc_dropout(model: nn.Module):
    """Enable dropout layers during inference."""
    for m in model.modules():
        if isinstance(m, nn.Dropout) or isinstance(m, nn.Dropout2d) or isinstance(m, nn.Dropout3d):
            m.train()  # activate dropout

@torch.no_grad()
def mc_predict(model, x, T=50):
    model.eval()              # freeze BatchNorm, etc.
    enable_mc_dropout(model)  # enable dropout only

    preds = []
    for _ in range(T):
        preds.append(model(x))
    return torch.stack(preds, dim=0)  # [T, batch, ...]

Regressão: média e variância

@torch.no_grad()
def mc_regression_stats(model, x, T=50):
    samples = mc_predict(model, x, T=T)          # [T, B, 1] for example
    mean = samples.mean(dim=0)                   # [B, 1]
    var = samples.var(dim=0, unbiased=False)     # [B, 1]
    return mean, var

Classificação: entropia preditiva e informação mútua

import torch.nn.functional as F

@torch.no_grad()
def mc_classification_uncertainty(model, x, T=50):
    logits_samples = mc_predict(model, x, T=T)             # [T, B, K]
    prob_samples = F.softmax(logits_samples, dim=-1)       # [T, B, K]
    mean_prob = prob_samples.mean(dim=0)                   # [B, K]

    # Predictive entropy H[p(y|x,D)]
    eps = 1e-12
    predictive_entropy = -(mean_prob * (mean_prob + eps).log()).sum(dim=-1)  # [B]

    # Expected entropy E_q[H[p(y|x,W)]]
    ent_each = -(prob_samples * (prob_samples + eps).log()).sum(dim=-1)      # [T, B]
    expected_entropy = ent_each.mean(dim=0)                                   # [B]

    # Mutual information (epistemic proxy)
    mutual_information = predictive_entropy - expected_entropy               # [B]

    return mean_prob, predictive_entropy, mutual_information

Quando o MC dropout funciona bem

Incerteza epistêmica em regiões com poucos dados

Se seu modelo é treinado com dados limitados ou distribuídos de forma desigual, o MC dropout frequentemente mostra:

  • Baixa variância em entradas familiares
  • Alta variância em regiões com pouca cobertura de treinamento

Isso é especialmente útil em tarefas científicas de regressão (por exemplo, predição de propriedades) e em predição estruturada, onde a incerteza importa.

Detecção OOD aproximada (às vezes)

O MC dropout pode ajudar a detectar entradas OOD ao produzir maior incerteza quando as sub-redes do modelo discordam. Estratégias comuns:

  • Definir limiar para entropia preditiva ou MI
  • Combinar com probabilidade máxima do softmax (maximum softmax probability, MSP)
  • Usar incerteza como critério de rejeição (“abster-se” se estiver incerto)

Dito isso, detecção OOD não é garantida; veja as limitações abaixo e também Detecção Fora da Distribuição.

Aprendizado ativo

Um uso clássico é selecionar amostras com alta incerteza epistêmica (por exemplo, MI) para rotulagem. Isso é intimamente relacionado a funções de aquisição bayesianas; veja Aprendizado Ativo.

Principais armadilhas e limitações

1) Calibração não é automática

Mesmo com MC dropout, as probabilidades podem estar mal calibradas (muito confiantes ou pouco confiantes). A calibração depende de:

  • Mudança de dataset (dataset shift)
  • Capacidade do modelo
  • Posicionamento e taxa de dropout
  • Objetivo de treinamento

Correções práticas:

  • Calibração pós-hoc como escalonamento de temperatura (temperature scaling)
  • Avaliar com diagramas de confiabilidade, ECE, NLL

Veja Calibração de Modelos.

2) Custo computacional escala com o número de amostras \(T\)

O MC dropout multiplica o custo de inferência por (T). Isso pode ser caro para:

Compromissos comuns:

  • Usar (T) pequeno (por exemplo, 10–30) para estimativas rápidas de incerteza
  • Usar (T) maior (por exemplo, 50–200) para avaliação/análise
  • Fazer batch das passagens estocásticas se a memória permitir (por exemplo, replicar entradas)

Uma dica prática: estimativas de incerteza frequentemente estabilizam mais lentamente do que previsões de média. Sempre valide quão grande (T) precisa ser para sua métrica (entropia/MI/variância).

3) Posicionamento e taxa de dropout importam muito

Dropout perto da saída frequentemente tem um efeito mais forte na incerteza preditiva do que dropout apenas nas camadas iniciais. Mas dropout demais pode prejudicar a acurácia.

Considerações:

  • Redes convolucionais: variantes de dropout espacial podem se comportar melhor
  • Transformers: dropout já é comum, mas a qualidade da incerteza varia
  • Taxas muito baixas de dropout podem produzir sinais fracos de incerteza

Ajustar (p) para acurácia não garante boa incerteza. Idealmente, ajuste usando um critério de validação sensível à incerteza (por exemplo, NLL, erro de calibração).

4) Interação com BatchNorm pode ser complicada

Se você habilitar model.train() globalmente no tempo de teste, o BatchNorm irá:

  • Usar estatísticas do batch
  • Atualizar estatísticas acumuladas (running stats)

Isso pode introduzir aleatoriedade extra não relacionada à incerteza e pode degradar as previsões. Prefira:

  • model.eval() globalmente
  • Em seguida, reabilitar apenas os módulos de dropout (como mostrado acima)

5) Incerteza epistêmica é aproximada (e pode falhar sob mudança de distribuição)

O MC dropout é uma aproximação com uma família variacional específica. Ele ainda pode produzir previsões confiantemente erradas sob mudanças severas, exemplos adversariais ou forte viés no dataset.

Para incerteza de maior qualidade, praticantes frequentemente comparam com:

Ensembles profundos frequentemente superam o MC dropout tanto em acurácia quanto em qualidade de incerteza, ao custo de treinar múltiplos modelos.

6) Sutilezas na média do softmax

Para classificação, a distribuição preditiva bayesiana “correta” faz a média das probabilidades, não dos logits:

  • Prefira: (\bar{\mathbf{p}} = \frac{1}{T}\sum \text{softmax}(\mathbf{z}^{(t)}))
  • Evite: (\text{softmax}\left(\frac{1}{T}\sum \mathbf{z}^{(t)}\right))

Elas podem diferir substancialmente devido à não linearidade.

Orientação prática e melhores práticas

Configurações iniciais recomendadas

  • Amostras (T): 20–50 para muitas tarefas (valide!)
  • Pontuação de incerteza:
    • Regressão: variância preditiva
    • Classificação: entropia preditiva e/ou informação mútua
  • Regra de decisão: defina um limiar de abstenção usando um conjunto de validação, não o conjunto de teste

Avalie a incerteza explicitamente

Ferramentas úteis de avaliação incluem:

  • Log-verossimilhança negativa (negative log-likelihood, NLL): recompensa previsões probabilísticas calibradas
  • Pontuação de Brier (Brier score): erro quadrático das probabilidades
  • Erro de calibração esperado (Expected Calibration Error, ECE): resumo da lacuna de calibração
  • Benchmarks OOD com AUROC/AUPR usando entropia ou MI como pontuação

Combine com modelagem aleatória (quando necessário)

Se os rótulos são ruidosos ou a ambiguidade é inerente, MC dropout sozinho pode superinterpretar ruído como incerteza epistêmica. Para regressão, considere prever ruído de dados diretamente (regressão heteroscedástica).

Trate como baseline, não como a palavra final

MC dropout costuma ser um excelente método baseline de incerteza porque é fácil e barato adicionar a um modelo existente. Mas, para sistemas de alto risco, compare com baselines mais fortes (notavelmente ensembles) e realize calibração e testes de mudança de distribuição (shift) de forma rigorosa.

Aplicações típicas

  • Triagem em imagens médicas: sinalizar exames incertos para revisão de especialistas.
  • Sistemas autônomos: reduzir velocidade ou acionar fallback quando a incerteza aumenta.
  • Previsão (forecasting): mostrar intervalos de previsão, não apenas estimativas pontuais.
  • Pipelines de aprendizado ativo: solicitar rotulagem para pontos incertos para melhorar eficiência de dados.
  • Monitoramento OOD em produção: monitorar métricas de incerteza para detectar deriva de distribuição (com ressalvas).

Resumo

O MC dropout estima incerteza ao amostrar previsões com dropout ativo na inferência. Ao fazer média e medir a dispersão dessas passagens estocásticas para frente, ele aproxima a média bayesiana de modelos e fornece um meio prático de acessar incerteza epistêmica. Ele pode melhorar a tomada de decisão, apoiar detecção OOD e viabilizar aprendizado ativo — mas vem com ressalvas importantes sobre calibração, custo computacional e modos de falha sob mudança de distribuição.

Para um contexto mais amplo e alternativas, veja Redes Neurais Bayesianas, Calibração de Modelos e Ensembles Profundos.