Métodos de atribuição
Visão geral
Métodos de atribuição (attribution methods) são técnicas que atribuem crédito (ou culpa) pela saída de um modelo — ou por uma ativação interna — a partes específicas da entrada. Dependendo do domínio, as “partes” podem ser:
- Pixels em uma imagem (modelos de visão)
- Tokens (tokens) ou subpalavras (subwords) em texto (modelos de linguagem)
- Características (features) em dados tabulares (aprendizado de máquina clássico e redes profundas)
- Passos de tempo / canais (time steps / channels) em áudio ou séries temporais
A saída costuma ser um mapa de atribuição (attribution map) (também chamado de mapa de saliência (saliency map) em visão), em que magnitudes maiores indicam componentes de entrada mais influentes para uma determinada predição.
A atribuição é um dos conjuntos de ferramentas centrais no trabalho moderno de interpretabilidade (interpretability), ao lado de Visualização de Características (Feature Visualization) e abordagens mecanicistas. Muitas técnicas de atribuição se baseiam em gradientes (gradients) e em Retropropagação (Backpropagation), então são especialmente comuns para Redes Neurais (Neural Networks).
Veja também: Mapas de Saliência para uma visão focada em atribuições de pixels no estilo gradiente.
Que problema os métodos de atribuição resolvem?
Dado um modelo (f(x)) e uma entrada (x), queremos um vetor (ou tensor) de atribuições (A(x)) tal que cada componente (A_i(x)) meça o quanto a característica de entrada (x_i) contribuiu para:
- uma predição (por exemplo, “esta imagem é um gato tigrado”),
- um logit (logit) de uma classe,
- ou uma quantidade interna (por exemplo, ativação de um neurônio/canal em alguma camada).
Atribuições são explicações locais: elas explicam uma entrada por vez. Isso é diferente de interpretabilidade global, que tenta resumir o comportamento do modelo ao longo de uma distribuição.
O que “contribuição” significa?
Isso é sutil. Há múltiplas noções:
- Sensibilidade (infinitesimal): quanto a saída muda para uma mudança minúscula na entrada.
- Efeito marginal (finito): quanto a saída muda quando uma característica é removida ou alterada.
- Efeito causal (intervencional): como a saída muda sob uma intervenção que quebra correlações (frequentemente difícil sem um modelo causal).
A maioria dos métodos de atribuição aproxima uma dessas ideias, e confundi-las é uma fonte comum de uso indevido.
Principais famílias de métodos de atribuição
Métodos de atribuição costumam ser agrupados em:
- Métodos baseados em gradiente: rápidos, diferenciáveis; podem ser ruidosos e sofrer com saturação.
- Métodos de caminho / linha de base (baseline): integram gradientes de uma entrada de referência até a entrada real (por exemplo, Gradientes Integrados).
- “Regras” de retropropagação / métodos por camada: propagam relevância pela rede usando regras customizadas (por exemplo, DeepLIFT, LRP).
- Métodos de ativação + gradiente para redes neurais convolucionais: localizam evidências de classe em mapas de características convolucionais (por exemplo, Grad-CAM).
- Métodos de perturbação / oclusão: medem diretamente a mudança na saída ao modificar entradas; muitas vezes mais “causais”, porém mais lentos e podem induzir mudança de distribuição.
Na prática, as pessoas frequentemente aplicam vários métodos e os comparam, porque qualquer mapa de atribuição isolado pode ser enganoso.
Métodos de gradiente e saliência
Gradientes puros (“mapas de saliência”)
A atribuição mais simples para uma saída escalar (y = f(x)) é:
[ A_i(x) = \left|\frac{\partial y}{\partial x_i}\right| ]
Para imagens, isso produz um mapa de saliência por pixel; para texto, produz escores por token (tipicamente via gradientes em relação a incorporações (embeddings) em vez de IDs discretos de token).
Prós
- Muito rápido: uma passada para trás.
- Amplamente disponível em frameworks (PyTorch, TensorFlow).
Contras
- Saturação: se ativações saturam (por exemplo, sigmoide perto de 0/1), gradientes podem ficar perto de zero mesmo para características cruciais.
- Ruído / “gradientes estilhaçados”: gradientes brutos podem ser visualmente ruidosos e instáveis.
- Localidade: mede sensibilidade infinitesimal, não necessariamente importância finita de características.
Variantes: Gradiente × Entrada, Gradiente Suavizado
Aprimoramentos comuns incluem:
- Gradiente × Entrada (Gradient × Input): (A_i(x) = x_i \cdot \frac{\partial y}{\partial x_i}). Isso pode ser visto como um termo de aproximação de Taylor de primeira ordem e às vezes corresponde melhor à intuição do que gradientes brutos.
- Gradiente Suavizado (SmoothGrad): média de mapas de saliência sobre versões ruidosas da entrada: [ A(x) = \mathbb{E}_{\epsilon \sim \mathcal{N}(0,\sigma^2)} \left[ \nabla_x f(x+\epsilon) \right] ] Isso reduz o ruído visual, mas não corrige problemas conceituais como saturação.
Dica prática (visão): compute gradientes em relação ao logit da classe predita, em vez da probabilidade pós-softmax (softmax), já que o softmax pode introduzir saturação adicional.
Gradientes Integrados (IG)
Gradientes Integrados (Integrated Gradients) lidam com saturação ao acumular gradientes ao longo de um caminho de uma linha de base (x') até a entrada (x):
[ \mathrm{IG}_i(x) = (x_i - x'i)\int{\alpha=0}^{1} \frac{\partial f(x' + \alpha(x-x'))}{\partial x_i}, d\alpha ]
Na prática, a integral é aproximada com uma soma de Riemann sobre (m) passos.
Por que IG é popular: axiomas
IG é motivado por propriedades (axiomas) que muitos consideram desejáveis:
- Invariância de implementação (implementation invariance): redes funcionalmente equivalentes devem produzir as mesmas atribuições.
- Sensibilidade (sensitivity): se alterar uma característica muda a saída, essa característica deve receber atribuição não nula (sob certas condições).
- Completude (completeness) (também conhecida como “somar até o delta”): [ \sum_i \mathrm{IG}_i(x) \approx f(x) - f(x') ] Isso torna IG fácil de validar com verificações rápidas.
A escolha da linha de base importa
A linha de base (x') é a referência de “ausência de sinal”. Exemplos:
- Imagens: imagem preta, imagem desfocada, média do conjunto de dados ou múltiplas linhas de base.
- Texto: tokens de preenchimento, tudo-[MASK] ou um template neutro (mas isso pode ser pouco natural para modelos da Arquitetura Transformer (Transformer Architecture)).
- Tabular: média por característica, mediana ou um valor de “ausente” específico do domínio.
Uma linha de base ruim pode criar artefatos de linha de base (baseline artifacts): atribuições podem destacar características que diferem da linha de base, mas não são realmente causais.
Exemplo: Gradientes Integrados em PyTorch (esboço)
import torch
def integrated_gradients(model, x, baseline, target_index, steps=50):
# x, baseline: tensors with same shape, require_grad False
alphas = torch.linspace(0, 1, steps+1, device=x.device).view(-1, *([1]*x.ndim))
x_interp = baseline + alphas * (x - baseline) # (steps+1, ...) batch
x_interp = x_interp.requires_grad_(True)
logits = model(x_interp) # shape: (steps+1, num_classes)
target = logits[:, target_index].sum()
grads = torch.autograd.grad(target, x_interp)[0] # (steps+1, ...)
avg_grads = grads[:-1].mean(dim=0) # simple Riemann average
ig = (x - baseline) * avg_grads
return ig
Para imagens, você normalmente visualizaria ig.abs() (ou atribuições com sinal usando um colormap divergente). Para texto, você agregaria a atribuição ao longo das dimensões da incorporação por token (por exemplo, norma L2 ou soma).
DeepLIFT (e métodos por camada relacionados)
DeepLIFT (“Características Importantes em Aprendizado Profundo (Deep Learning Important FeaTures)”) atribui mudanças na saída a mudanças na entrada em relação a uma referência (linha de base), como IG, mas usa regras discretas de propagação de diferenças (discrete difference propagation rules) em vez de integrar gradientes.
Ideia central: comparar ativações com ativações de referência e propagar escores de contribuição para trás pela rede usando regras que lidam melhor com não linearidades do que gradientes brutos em regimes saturados.
Prós
- Frequentemente menos sensível à saturação do que gradientes puros.
- Pode ser mais rápido do que IG para qualidade semelhante (sem integração multi-passos ao longo do caminho).
Contras
- Detalhes de implementação variam por biblioteca; regras diferentes podem produzir resultados diferentes.
- Como IG, depende de uma entrada de referência significativa.
Abordagens relacionadas incluem Propagação de Relevância por Camadas (Layer-wise Relevance Propagation, LRP) e outras regras de retropropagação de “relevância”; esses métodos são populares em algumas comunidades, mas podem ser mais sensíveis a detalhes arquiteturais.
Grad-CAM (para redes convolucionais)
Grad-CAM (Mapeamento de Ativação de Classe Ponderado por Gradiente; Gradient-weighted Class Activation Mapping) foi projetado para produzir mapas de calor espaciais para modelos de visão baseados em redes neurais convolucionais combinando:
- gradientes de um escore da classe-alvo (y^c) em relação a um mapa de características convolucional (A^k),
- e então ponderando canais pela média de seus gradientes:
[ \alpha_k^c = \frac{1}{Z}\sum_{i,j}\frac{\partial y^c}{\partial A_{ij}^k} ] [ \mathrm{GradCAM}^c = \mathrm{ReLU}\left(\sum_k \alpha_k^c A^k\right) ]
Isso gera um mapa de calor grosseiro que destaca onde na imagem o modelo “olhou” para sustentar a classe (c).
Prós
- Em geral, é mais interpretável visualmente do que gradientes por pixel.
- Funciona bem para localização em redes neurais convolucionais.
Contras
- Requer mapas de características convolucionais (existem variantes para Transformers Visuais (Vision Transformers, ViTs), mas são menos canônicas).
- Pode produzir mapas plausíveis mesmo quando o modelo está errado ou usando pistas espúrias.
Exemplo prático: em imagens médicas, Grad-CAM pode destacar regiões que impulsionam uma predição de “pneumonia”, mas pode, na verdade, focar em artefatos específicos do hospital (marcadores de texto, bordas do scanner), ilustrando por que atribuição não deve ser tomada como prova de raciocínio correto.
Atribuição baseada em oclusão e perturbação
Métodos de perturbação estimam importância medindo mudanças na saída após alterar partes da entrada. Um escore simples de oclusão para a característica (i) é:
[ A_i(x) = f(x) - f(x_{\setminus i}) ]
em que (x_{\setminus i}) denota a entrada com a característica (i) removida, mascarada ou substituída.
Oclusão para imagens
Para imagens, a oclusão frequentemente usa uma janela deslizante (patch) substituída por:
- zeros,
- valor médio de pixel,
- um patch desfocado,
- ou o preenchimento (inpainting) gerado por um modelo.
Isso produz um mapa de calor de regiões cuja remoção mais reduz o escore da classe-alvo.
Prós
- Mais diretamente ligado a mudanças finitas na saída.
- Não depende de gradientes (funciona também para modelos não diferenciáveis).
Contras
- Caro: muitas passadas para frente.
- Mudança de distribuição (distribution shift): imagens mascaradas podem ficar muito fora da distribuição, causando mudanças enganosas.
- Interações: remover uma característica por vez pode perder dependências entre múltiplas características.
Perturbação para texto
Para texto, perturbações incluem deletar tokens, mascará-los ou substituí-los por sinônimos. Mas isso é delicado: remover um token pode mudar gramática e significado, criando entradas fora da distribuição para modelos de linguagem.
Uma abordagem mais cuidadosa é usar perturbações controladas (controlled perturbations) (por exemplo, mask-and-infill com um modelo de linguagem) para manter as entradas plausíveis, embora isso introduza dependência do modelo de preenchimento.
Interpretando mapas de atribuição
Mapas de atribuição são fáceis de interpretar incorretamente. Algumas diretrizes:
- Magnitude vs sinal:
- Atribuição positiva significa que uma característica aumenta a saída-alvo em relação à linha de base.
- Atribuição negativa significa que ela a reduz.
- Muitas visualizações mostram valores absolutos, o que esconde evidência inibitória.
- Apenas explicação local: o mapa explica (f) nesta entrada, não importância global de características.
- Características correlacionadas: a atribuição pode ser espalhada arbitrariamente entre entradas correlacionadas (por exemplo, dois pixels/características redundantes). “O modelo usou a característica X” pode ser indeterminado.
- Efeitos de tokenização (NLP): tokens de subpalavra podem quebrar unidades significativas; atribuição por token pode não se alinhar a conceitos humanos.
- Comparando exemplos: muitas vezes é mais informativo comparar mapas de atribuição entre:
- entradas classificadas corretamente vs incorretamente,
- dentro da distribuição vs fora da distribuição,
- edições contrafactuais (pequenas mudanças controladas).
Modos de falha e armadilhas comuns
Escolha da linha de base (IG, DeepLIFT)
- Linha de base não natural: uma imagem preta pode estar longe do manifold dos dados; um texto “só [PAD]” pode ser sem sentido.
- Conclusões dependentes da linha de base: linhas de base diferentes podem gerar explicações qualitativamente diferentes.
Mitigações:
- Use múltiplas linhas de base e faça média.
- Escolha referências significativas no domínio (por exemplo, imagem desfocada, prompt neutro).
- Relate explicitamente a linha de base em qualquer texto/relatório.
Saturação e mascaramento de gradiente
Gradientes podem ficar próximos de zero mesmo quando características importam, devido a:
- não linearidades saturadas,
- predições confiantes (saturação do softmax),
- mascaramento de gradiente (às vezes acidental, às vezes adversarial).
Mitigações:
- Prefira logits a probabilidades.
- Use IG/DeepLIFT em vez de gradientes brutos.
- Compare com métodos de perturbação.
Sensibilidade e instabilidade
Atribuições podem mudar drasticamente sob:
- perturbações minúsculas na entrada,
- pequenas mudanças nos parâmetros do modelo,
- sementes aleatórias diferentes.
Isso pode acontecer mesmo quando a predição permanece a mesma.
Mitigações:
- Use suavização (por exemplo, Gradiente Suavizado) com cautela.
- Faça verificações de estabilidade: perturbe levemente a entrada e veja se a explicação é robusta.
Falácia do “parece certo”
Mapas de calor de atribuição podem ser plausíveis mesmo quando não são fiéis. Humanos são bons em encontrar padrões em mapas de calor. Por isso, avaliação importa.
Atenção não é atribuição (confusão comum em transformers)
Pesos de atenção às vezes são apresentados como explicações, mas atenção não foi projetada para medir contribuição causal para a saída. Se você quer atribuições por token em modelos transformer, use métodos que meçam a sensibilidade das saídas às incorporações ou à remoção de tokens, em vez de ler mapas de atenção diretamente.
Avaliando a fidelidade da atribuição
“Fidelidade (faithfulness)” pergunta se as características destacadas realmente importam para o cálculo do modelo, e não se a explicação é plausível para humanos.
Estratégias comuns de avaliação:
Testes baseados em perturbação (deleção / inserção)
- Deleção (deletion): remova progressivamente as características com maior atribuição e meça quão rapidamente a confiança do modelo cai. Queda mais rápida sugere atribuições mais fiéis.
- Inserção (insertion): comece de uma linha de base e adicione características de volta na ordem de atribuição; ganho mais rápido de confiança sugere fidelidade.
Ressalva: esses testes dependem fortemente de como você remove/insere características (a estratégia de mascaramento pode criar artefatos).
Métricas de infidelidade e sensibilidade
- Infidelidade (infidelity) mede quão bem as atribuições predizem mudanças na saída sob perturbações aleatórias (maior concordância implica explicações mais fiéis).
- Sensibilidade (sensitivity) mede o quanto a atribuição muda sob pequenas perturbações na entrada (sensibilidade excessiva pode indicar ruído).
Elas fornecem métricas quantitativas, mas ainda dependem do desenho das perturbações.
Verificações de sanidade (aleatorização de parâmetros do modelo)
Um diagnóstico bem conhecido: se você aleatoriza os pesos do modelo camada por camada, um método de atribuição significativo deveria degradar. Se os mapas de atribuição parecem similares mesmo para um modelo aleatório, o método provavelmente está capturando estrutura da entrada em vez do raciocínio do modelo.
Testes de re-treinamento com remoção (ROAR / KAR)
- ROAR (RemOve And Retrain): remova características consideradas importantes, retreine o modelo e avalie a queda de desempenho.
- KAR: mantenha apenas as características importantes e retreine.
Esses testes são mais caros computacionalmente, mas podem avaliar melhor se as características identificadas são genuinamente informativas.
Tarefas com características de verdade de referência (quando disponíveis)
Algumas tarefas sintéticas fornecem características importantes “verdadeiras” conhecidas (por exemplo, imagens com um único patch inserido que determina o rótulo). Métodos de atribuição podem ser comparados com essa verdade de referência, embora resultados possam não se transferir para a complexidade do mundo real.
Aplicações práticas
Depuração de correlações espúrias
Atribuições podem revelar aprendizado por atalho (shortcut learning), como:
- um classificador de visão focando em marcas d’água ou bordas,
- um modelo de sentimento focando em nomes de usuário ou pontuação.
Fluxo de trabalho:
- Inspecione mapas de atribuição em uma amostra de predições corretas.
- Procure padrões não semânticos (cantos, fundos, tokens de formatação).
- Confirme com perturbação: remova a pista suspeita e veja se a predição muda.
Monitoramento e auditoria de modelos
Em domínios regulados (finanças, saúde), atribuição pode apoiar:
- explicação caso a caso,
- identificação de deriva (por exemplo, explicações mudam conforme a distribuição de dados se desloca),
- checar se atributos sensíveis (ou proxies) não estão sendo usados.
Importante: atribuição não é uma garantia legal de não discriminação; é uma ferramenta de diagnóstico.
Insight científico (com cautela)
Em bioinformática ou modelagem inspirada em neurociência, atribuições sobre posições em sequências (DNA/proteína) podem sugerir motivos, mas devem ser validadas com:
- perturbações controladas,
- replicação entre modelos/sementes,
- e idealmente acompanhamento experimental.
Escolhendo um método na prática
Uma heurística aproximada:
- Precisa de algo rápido e simples: comece com Gradiente × Entrada ou gradientes puros.
- Precisa de melhor comportamento sob saturação: use Gradientes Integrados ou DeepLIFT.
- Precisa de localização espacial para visão com redes neurais convolucionais: use Grad-CAM (frequentemente junto com IG).
- Precisa de sinais agnósticos ao modelo e mais parecidos com intervenção: use oclusão/perturbação, mas tenha cuidado com mudança de distribuição e custo computacional.
Uma prática robusta é triangular:
- um método de gradiente/caminho (IG),
- um método de perturbação (oclusão),
- e verificações de sanidade/fidelidade.
Limitações e questões de pesquisa em aberto
- Interações entre características: muitos métodos têm dificuldade em atribuir importância quando o efeito é inerentemente combinacional (por exemplo, dependências tipo XOR).
- Perturbações fora da distribuição: “remover” características pode criar entradas não naturais; avaliação fiel continua difícil.
- Interpretabilidade humana vs fidelidade ao modelo: mapas fiéis podem não ser significativos para humanos, e vice-versa.
- Atribuição para modelos de linguagem de grande porte (large language models): tokenização, contexto longo e dependência do prompt (prompt) complicam tanto a seleção de linha de base quanto o desenho de perturbações.
- Atribuição de ativação interna: atribuir a ativação de um neurônio a características de entrada pode ser útil para hipóteses mecanicistas, mas interpretar neurônios individuais costuma ser frágil devido a representações distribuídas (distributed representations).
Métodos de atribuição são melhor vistos como instrumentos: eles fornecem medições que exigem desenho experimental cuidadoso, calibração e validação — muito como ferramentas em outras ciências.
Leitura adicional dentro desta wiki
- Pesquisa em Interpretabilidade para o panorama mais amplo e objetivos
- Mapas de Saliência para um foco mais profundo em explicações visuais baseadas em gradiente
- Visualização de Características para métodos complementares que sintetizam entradas para entender unidades internas