Redes Neurais Bayesianas

Visão geral

Uma Rede Neural Bayesiana (Bayesian Neural Network, BNN) é um modelo de Redes Neurais treinado e usado de forma bayesiana: em vez de aprender um único melhor conjunto de pesos (weights), ela aprende uma distribuição de probabilidade (probability distribution) sobre os pesos (e, às vezes, outras quantidades latentes). Isso permite que o modelo represente incerteza epistêmica (epistemic uncertainty) — incerteza devido a dados limitados ou ambiguidade do modelo — ao produzir uma distribuição preditiva (predictive distribution) em vez de uma única predição pontual.

As BNNs são mais úteis quando saber o que o modelo não sabe é importante, como em:

  • Predição crítica para segurança (medicina, direção autônoma)
  • Tomada de decisão consciente de incerteza (uncertainty-aware decision-making) (abster-se ou encaminhar para um humano)
  • Aprendizado ativo (active learning) (escolher o que rotular em seguida)
  • Detecção fora da distribuição (out-of-distribution, OOD) e monitoramento de modelos

Na prática, a inferência bayesiana exata para redes profundas modernas é intratável, então BNNs dependem de aproximações como inferência variacional (variational inference), aproximações de Laplace (Laplace approximations), dropout MC (MC dropout) e ensembles profundos (deep ensembles) (não estritamente bayesianos, mas uma linha de base amplamente usada que muitas vezes funciona extremamente bem).

De estimativas pontuais a distribuições

Redes neurais padrão: pesos pontuais

No aprendizado profundo (deep learning) típico, aprendemos um único conjunto de parâmetros (\theta) minimizando uma função de perda (loss), frequentemente via Retropropagação e Otimizadores. Isso produz uma estimativa pontual (frequentemente próxima de uma solução de máxima verossimilhança (maximum likelihood) ou de máximo a posteriori (maximum a posteriori, MAP)).

As predições então são estimativas pontuais como:

  • Regressão: (\hat{y} = f_\theta(x))
  • Classificação: (\hat{p}(y \mid x) = \text{softmax}(f_\theta(x)))

Essas saídas podem ser excessivamente confiantes, especialmente em entradas muito distantes da distribuição de treino.

Redes neurais bayesianas: distribuições sobre pesos

Em uma BNN, colocamos uma distribuição a priori (prior) sobre os pesos:

[ p(\theta) ]

e definimos uma verossimilhança (likelihood) para os dados (\mathcal{D}={(x_i,y_i)}_{i=1}^N):

[ p(\mathcal{D}\mid \theta) = \prod_{i=1}^N p(y_i \mid x_i, \theta) ]

A regra de Bayes (Bayes’ rule) nos dá o posterior:

[ p(\theta \mid \mathcal{D}) \propto p(\mathcal{D}\mid \theta), p(\theta) ]

As predições marginalizam (\theta):

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

Essa integral é o recurso central: ela produz uma distribuição preditiva que pode expressar a incerteza decorrente de parâmetros incertos.

Tipos de incerteza: epistêmica vs aleatória

BNNs miram principalmente a incerteza epistêmica:

  • Incerteza epistêmica (do modelo): devido a dados limitados; reduzível com mais dados.
  • Incerteza aleatória (aleatoric uncertainty; dos dados): ruído inerente (por exemplo, ruído de sensor); não reduzível com mais dados.

Uma abordagem prática comum é modelar ambas:

  • Use uma BNN (ou ensemble) para capturar incerteza epistêmica.
  • Use uma verossimilhança que capture incerteza aleatória (por exemplo, Gaussiana com variância aprendida em regressão).

Exemplo (regressão heteroscedástica (heteroscedastic regression)):

[ y \sim \mathcal{N}(\mu_\theta(x), \sigma^2_\theta(x)) ]

Mesmo com uma rede determinística, prever (\sigma^2(x)) modela incerteza aleatória; tornar (\theta) bayesiano adiciona incerteza epistêmica por cima.

Por que a inferência exata é difícil

Para redes profundas modernas, o posterior (p(\theta\mid\mathcal{D})) é:

  • de alta dimensionalidade (milhões/bilhões de parâmetros),
  • não convexo,
  • fortemente correlacionado entre parâmetros.

Então usamos aproximações que equilibram custo computacional, complexidade de implementação e fidelidade.

Métodos de aproximação

1) Inferência variacional (VI)

A inferência variacional aproxima o posterior verdadeiro (p(\theta\mid\mathcal{D})) com uma distribuição mais simples (q_\phi(\theta)) (por exemplo, Gaussianas fatoradas). Ela encontra o melhor (q_\phi) minimizando uma divergência, tipicamente (\mathrm{KL}(q_\phi(\theta),|,p(\theta\mid\mathcal{D}))), isto é, a divergência de Kullback–Leibler (Kullback–Leibler divergence, KL).

Isso é equivalente a maximizar o ELBO (limite inferior da evidência (Evidence Lower BOund)):

[ \mathcal{L}(\phi) = \mathbb{E}{q\phi(\theta)}[\log p(\mathcal{D}\mid \theta)] - \mathrm{KL}\big(q_\phi(\theta),|,p(\theta)\big) ]

Interpretação:

  • O primeiro termo ajusta os dados (log-verossimilhança esperada).
  • O termo de KL regulariza em direção ao prior (atua como uma penalização de complexidade).

Isso se conecta de perto à Regularização clássica: por exemplo, decaimento de peso L2 corresponde a um prior Gaussiano sob estimação MAP, enquanto VI mantém uma distribuição sobre os pesos.

Como o treinamento funciona (ideia do Bayes by Backprop)

Se (q_\phi(\theta)) é Gaussiana, amostre pesos usando o truque de reparametrização (reparameterization trick):

[ \theta = \mu + \sigma \odot \epsilon,\quad \epsilon\sim \mathcal{N}(0,I) ]

Então faça retropropagação através da amostra estocástica para atualizar (\phi=(\mu,\sigma)). Isso depende de Diferenciação Automática assim como o treinamento padrão.

Notas práticas

  • Posteriores Gaussianos de campo médio (mean-field Gaussian) (pesos independentes) são comuns e escaláveis, mas podem subestimar a incerteza porque ignoram correlações.
  • Normalmente você usa múltiplas amostras de pesos por minilote (minibatch) (frequentemente 1–5) para estimar o gradiente do ELBO.
  • A escolha da escala do prior importa. Muito estreito → subajuste; muito amplo → regularização fraca.

Esboço mínimo de pseudocódigo (conceitual)

# Conceptual VI training loop (not framework-specific)
for x, y in dataloader:
    theta = sample_from_q(phi)              # reparameterized sample
    loglik = log_p_y_given_x_theta(y, x, theta)
    kl = kl_divergence(q_phi(theta), p_prior(theta))
    loss = -(loglik - kl / N)               # negative ELBO (scaled)
    loss.backward()
    optimizer.step()

Aqui (N) é o tamanho total do conjunto de dados (truque comum de escalonamento por minilote).

2) Aproximação de Laplace

A aproximação de Laplace ajusta uma aproximação Gaussiana ao redor de um modo do posterior (normalmente a estimativa MAP):

  1. Encontre (\theta_{\text{MAP}} = \arg\max_\theta \log p(\mathcal{D}\mid\theta) + \log p(\theta)).
  2. Aproxime o posterior como:

[ p(\theta\mid\mathcal{D}) \approx \mathcal{N}\left(\theta_{\text{MAP}},, H^{-1}\right) ]

onde (H) é a Hessiana (Hessian) do log-posterior negativo em (\theta_{\text{MAP}}).

Prós e contras

  • Prós:
    • Conceitualmente simples; frequentemente boa para bayesianizar a última camada (last-layer).
    • Pode funcionar bem quando o posterior é aproximadamente unimodal localmente.
  • Contras:
    • Calcular/armazenar uma Hessiana completa é inviável para redes grandes.
    • Usa a curvatura local perto de uma solução; não captura multimodalidade.

Variantes práticas

  • Aproximações de Hessiana diagonal ou bloco-diagonal.
  • Aproximações de curvatura fatoradas por Kronecker (Kronecker-factored) (por exemplo, no estilo K-FAC) para escalar.
  • “Última camada bayesiana (Bayesian last layer)”: congelar um extrator de características e aplicar Laplace apenas à camada linear final.

3) Dropout MC (dropout como inferência bayesiana aproximada)

O dropout MC mantém o dropout ativo no teste e executa múltiplas passagens estocásticas de forward. A variabilidade entre as passagens estima a incerteza.

Para (T) passagens estocásticas com máscaras de dropout:

  • Média preditiva: (\hat{\mu}(x) \approx \frac{1}{T}\sum_{t=1}^T f_{\theta, m_t}(x))
  • Variância preditiva: a partir da variância amostral entre predições

O dropout MC é frequentemente usado porque é extremamente fácil de adicionar a pipelines de treinamento existentes (ele reutiliza o dropout padrão de Regularização).

Exemplo prático no estilo PyTorch

import torch
import torch.nn as nn
import torch.nn.functional as F

class MCDropoutNet(nn.Module):
    def __init__(self, d_in, d_hidden, d_out, p=0.1):
        super().__init__()
        self.fc1 = nn.Linear(d_in, d_hidden)
        self.fc2 = nn.Linear(d_hidden, d_out)
        self.p = p

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.dropout(x, p=self.p, training=True)  # keep dropout ON
        return self.fc2(x)

@torch.no_grad()
def mc_predict(model, x, T=50):
    preds = torch.stack([model(x) for _ in range(T)], dim=0)  # [T, B, d_out]
    mean = preds.mean(dim=0)
    var = preds.var(dim=0, unbiased=False)
    return mean, var

Para classificação, você tipicamente aplica softmax a cada vetor de logits amostrado e então faz a média das probabilidades.

Ressalvas

  • A incerteza baseada em dropout pode ser sensível à taxa de dropout e à arquitetura.
  • Frequentemente funciona melhor como heurística do que como uma aproximação fiel do posterior.
  • A qualidade de calibração varia; ainda pode ser excessivamente confiante em OOD.

4) Ensembles profundos (linha de base forte)

Ensembles profundos treinam (K) modelos independentes (sementes aleatórias diferentes, ordem de dados, às vezes bootstrapping) e agregam suas predições.

Embora não sejam “bayesianos” em um sentido estrito de inferência de posterior, ensembles frequentemente superam métodos aproximados de BNN em acurácia preditiva e qualidade de incerteza com um esforço de engenharia similar.

Para classificação:

[ p(y\mid x) \approx \frac{1}{K}\sum_{k=1}^K p_k(y\mid x) ]

Para regressão, agregue médias e variâncias preditivas; se cada modelo produz ((\mu_k(x), \sigma_k^2(x))), então a variância preditiva total se decompõe em epistêmica + aleatória:

  • Epistêmica ≈ variância de (\mu_k(x)) entre modelos
  • Aleatória ≈ média de (\sigma_k^2(x))

Por que ensembles funcionam bem na prática

  • Diferentes inicializações e o ruído do SGD exploram diferentes modos/regiões do espaço de parâmetros.
  • Eles aproximam uma distribuição de mistura sobre funções, capturando multimodalidade melhor do que um único posterior Gaussiano.

Custos

  • O custo de treinamento multiplica por (K).
  • O custo de inferência multiplica por (K) (a menos que você destile o ensemble).

Como fazer predição com uma BNN (ou aproximação)

A maioria dos métodos aproximados acaba se reduzindo ao mesmo padrão de inferência: integração de Monte Carlo (Monte Carlo integration).

  1. Extraia (S) amostras de parâmetros (ou máscaras estocásticas):
    • (\theta^{(s)} \sim q(\theta)) (VI/Laplace)
    • máscaras de dropout (m^{(s)}) (dropout MC)
    • índice do modelo (k) (ensemble)
  2. Calcule probabilidades preditivas (classificação) ou valores (regressão).
  3. Agregue amostras para estimar momentos e métricas de incerteza.

Resumos comuns de incerteza (classificação)

Seja (p^{(s)} = p(y\mid x,\theta^{(s)})).

  • Entropia preditiva (predictive entropy) (incerteza geral): [ H\big(\bar{p}\big),\quad \bar{p}=\frac{1}{S}\sum_s p^{(s)} ]
  • Informação mútua (mutual information) (proxy de epistêmica; usada no aprendizado ativo BALD): [ \mathrm{MI} \approx H(\bar{p}) - \frac{1}{S}\sum_s H(p^{(s)}) ] Intuição: se cada modelo amostrado é confiante, mas eles discordam, a MI é alta (epistêmica).

Resumos comuns de incerteza (regressão)

Se você tem predições amostradas (y^{(s)}):

  • Média preditiva: (\hat{\mu} = \frac{1}{S}\sum_s y^{(s)})
  • Variância preditiva: (\widehat{\mathrm{Var}} = \frac{1}{S}\sum_s (y^{(s)}-\hat{\mu})^2)

Se cada amostra também produz variância aleatória (\sigma^{2(s)}(x)), combine via:

[ \mathrm{Var}(y\mid x) \approx \underbrace{\frac{1}{S}\sum_s \sigma^{2(s)}(x)}{\text{aleatoric}} ;+; \underbrace{\frac{1}{S}\sum_s (\mu^{(s)}(x)-\hat{\mu}(x))^2}{\text{epistemic}} ]

Aplicações práticas

Tomada de decisão consciente de incerteza (abstenção e controle de risco)

Em contextos de alto impacto, você pode querer que o modelo recuse predições sobre as quais está incerto.

Exemplo de política (classificação):

  • Calcule a entropia preditiva (H(\bar{p})).
  • Se a entropia exceder um limiar, abstenha-se ou escale para um humano.

Isso pode ser ajustado para atender restrições operacionais (“revisar no máximo 5% dos casos”).

Para regressão, você pode usar intervalos preditivos:

  • Se um intervalo preditivo de 95% for muito amplo, abstenha-se ou solicite mais dados.

Detecção fora da distribuição (OOD)

Entradas OOD são aquelas distantes do suporte de treino. Um bom método de incerteza deve produzir maior incerteza em dados OOD.

Sinais comuns:

  • Alta entropia preditiva (H(\bar{p}))
  • Alta informação mútua (epistêmica) para BNN/ensemble/dropout MC
  • Baixa probabilidade máxima prevista (maximum predicted probability, MSP) (linha de base MSP)

A incerteza no estilo BNN é útil, mas não é uma solução mágica: alguns exemplos OOD ainda podem disparar predições confiantes, especialmente quando os vieses indutivos do modelo extrapolam mal. Combinar incerteza com métodos especializados de Detecção Fora da Distribuição (modelos de densidade, distância no espaço de características, escores baseados em energia) é comum.

Aprendizado ativo

Quando rótulos são caros, você pode selecionar quais amostras rotular em seguida escolhendo aquelas com alta incerteza epistêmica.

Uma estratégia padrão:

  • Use dropout MC / VI / ensemble.
  • Pontue pontos não rotulados por informação mútua (BALD) ou discordância do ensemble.
  • Rotule os (M) pontos do topo, retreine, repita.

Esse é um dos ganhos práticos mais “limpos” da incerteza epistêmica.

Aprendizado por reforço e exploração

Em aprendizado por reforço (reinforcement learning, RL), a incerteza pode guiar a exploração (“tente ações em que seu modelo está incerto”). Ensembles e BNNs aproximadas são amplamente usados como estimadores de incerteza em RL baseado em modelo (model-based RL) e bandits contextuais (contextual bandits).

Monitoramento de modelo e detecção de mudança

Em produção, o aumento de incerteza pode sinalizar mudança de distribuição (distribution shift) (novo comportamento de usuário, mudanças de sensor etc.). Você pode monitorar:

  • entropia preditiva média,
  • discordância entre membros do ensemble,
  • deriva de calibração (ver abaixo).

Como avaliar a qualidade da incerteza

Apenas acurácia não é suficiente. Métricas úteis incluem:

  • Log-verossimilhança negativa (negative log-likelihood, NLL): recompensa predições probabilísticas bem calibradas.
  • Brier score (classificação): erro quadrático nas probabilidades.
  • Erro de calibração (calibration error) (por exemplo, ECE): compara confiança com acurácia empírica.
  • Cobertura do intervalo de predição (prediction interval coverage) (regressão): intervalos de 90% contêm ~90% dos alvos?
  • AUC de detecção OOD: a incerteza consegue separar ID vs OOD?

Ferramentas de calibração como escalonamento de temperatura (temperature scaling) podem melhorar a calibração de probabilidades para redes determinísticas e ensembles, mas não necessariamente corrigem a estimação de incerteza epistêmica.

Veja também: Ativações e Funções de Perda para escolhas de verossimilhança e como elas se relacionam com interpretação probabilística.

Escolhendo uma abordagem (regras práticas)

  • Se você quer a melhor linha de base prática para incerteza com risco mínimo de teoria/implementação:
    Ensembles profundos (frequentemente 5–10 modelos) são difíceis de superar.
  • Se você precisa de incerteza em modelo único (single-model) com mudanças mínimas:
    Dropout MC é o mais simples.
  • Se você precisa de uma história bayesiana mais fundamentada e pode arcar com a complexidade:
    Inferência variacional (por exemplo, campo médio) é comum.
  • Se você já tem um modelo treinado e quer incerteza ao redor dele:
    Aproximação de Laplace, frequentemente na última camada, pode ser eficaz.

Em aprendizado profundo em larga escala, um compromisso comum é:

  • backbone determinístico + cabeça bayesiana/incerta (VI ou Laplace na última camada),
  • ou um pequeno ensemble de backbones.

Limitações e armadilhas comuns

  • Posteriores aproximados podem estar mal calibrados: VI de campo médio frequentemente subestima incerteza; dropout MC pode ser sensível ao posicionamento e à taxa de dropout.
  • Incerteza OOD não é garantida: incerteza epistêmica ajuda, mas redes profundas ainda podem errar com confiança longe dos dados de treino.
  • Priors importam: um prior ruim pode prejudicar; em redes profundas, priors “razoáveis” nem sempre são óbvios.
  • Custo computacional: ensembles e amostragem MC aumentam a latência de inferência; VI aumenta a complexidade de treinamento.
  • A avaliação é sutil: boa incerteza deve ser nítida (não sempre vaga) e bem calibrada (correta quando está confiante).

Conexões com outros conceitos de aprendizado profundo

  • O treinamento de BNNs ainda depende de aprendizado padrão baseado em gradiente, Retropropagação e Otimizadores; a diferença é o objetivo (por exemplo, ELBO) e a estocasticidade nos parâmetros.
  • Muitos métodos “quase bayesianos” (“Bayesian-ish”) são intimamente relacionados à Regularização (por exemplo, priors Gaussianos ↔ weight decay; dropout ↔ inferência aproximada sob certas suposições).
  • Treinamento estável e incerteza sensata frequentemente se beneficiam de boa inicialização e normalização; veja Inicialização e Normalização e Problemas de Gradiente.

Resumo

Redes Neurais Bayesianas substituem estimativas pontuais de pesos por distribuições para capturar incerteza epistêmica, produzindo distribuições preditivas que permitem decisões mais seguras, melhor aprendizado ativo e sinais de robustez aprimorados sob mudança de distribuição.

Como a inferência exata é inviável em redes profundas, a prática depende de aproximações:

  • Inferência variacional: fundamentada, escalável, mas aproximada.
  • Aproximação de Laplace: Gaussiana ao redor do MAP; forte para métodos na última camada.
  • Dropout MC: simples, frequentemente efetivo, mas heurístico.
  • Ensembles profundos: não estritamente bayesianos, mas uma linha de base padrão-ouro para incerteza em muitos cenários.

Um bom fluxo de trabalho é começar com uma linha de base de ensemble, avaliar calibração e comportamento OOD no seu domínio e, então, considerar VI/Laplace se você precisar de um posterior mais explicitamente bayesiano ou de restrições mais rígidas de computação.