Exemplos Adversariais

Exemplos adversariais (adversarial examples) são entradas deliberadamente construídas que fazem um modelo de aprendizado de máquina (machine learning) cometer um erro — muitas vezes enquanto parecem inalteradas ou apenas minimamente alteradas para um humano. Eles expõem uma tensão central no aprendizado de máquina moderno: alta acurácia (accuracy) em dados naturais de teste não implica robustez (robustness) a pequenas perturbações de pior caso. Tanto em visão computacional (computer vision) quanto em processamento de linguagem natural (NLP), exemplos adversariais tornaram-se uma preocupação prática de segurança e uma ferramenta conceitual para entender o que os modelos de fato aprendem.

O que é um exemplo adversarial?

Dado um modelo treinado (f(\cdot)) (por exemplo, um classificador de Redes Neurais) e uma entrada legítima (x) com rótulo verdadeiro (y), um exemplo adversarial é uma entrada perturbada (x' = x + \delta) tal que:

  • (x') está “próximo” de (x) sob alguma restrição (por exemplo, (|\delta|_\infty \le \varepsilon)), mas
  • a predição do modelo muda: (f(x') \ne y) (não direcionado (untargeted)) ou (f(x') = y_{\text{target}}) (direcionado (targeted)).

A restrição de proximidade codifica uma capacidade do atacante e, muitas vezes, um proxy para similaridade perceptual (perceptual similarity) humana. Em imagens, pequenas perturbações limitadas por norma podem ser praticamente invisíveis; em texto, proximidade é mais difícil porque as entradas são tokens discretos, então ataques frequentemente preservam significado ou gramática em vez de preservar distância por norma.

Exemplos adversariais são, em sua maioria, um fenômeno de tempo de inferência (inference-time) (tempo de teste (test-time)). Eles diferem de ataques em tempo de treinamento (training-time) como Envenenamento de Dados (Data Poisoning) e Portas dos Fundos (Backdoors), embora os dois possam interagir em sistemas em produção.

Modelos de ameaça (threat models): o que exatamente o atacante tem permissão para fazer?

Alegações de robustez e segurança só são significativas em relação a um modelo de ameaça.

Suposições sobre conhecimento

  • Ataques de caixa branca (white-box attacks): o atacante conhece a arquitetura e os parâmetros do modelo e pode computar gradientes via Retropropagação (Backpropagation). Este é o cenário mais forte e mais estudado.
  • Ataques de caixa preta (black-box attacks): o atacante pode apenas consultar o modelo (possivelmente com probabilidades/logits (logits)) e observar saídas.
    • Baseado em pontuação (score-based): o atacante vê probabilidades/logits.
    • Baseado em decisão (decision-based): o atacante vê apenas o rótulo final da classe.

Objetivos

  • Não direcionado: causar qualquer classificação incorreta.
  • Direcionado: forçar uma saída incorreta específica (frequentemente mais difícil).

Restrições de perturbação

Restrições comuns para imagens:

  • (\ell_\infty): cada pixel pode mudar no máximo (\varepsilon).
  • (\ell_2): a energia total da perturbação é limitada.
  • (\ell_0): um número limitado de pixels pode mudar (ataques esparsos).

Outras restrições:

  • Restrições do mundo físico (physical-world constraints): impressão, ruído de câmera, mudanças de ponto de vista, iluminação, desfoque de movimento.
  • Restrições semânticas (semantic constraints): preservar significado (comum em PLN) em vez de preservar distância por norma.

Uma formulação matemática padrão

Para uma função de perda (loss function) (L(\theta, x, y)) (por exemplo, entropia cruzada (cross-entropy)), um adversário não direcionado frequentemente resolve:

[ \max_{|\delta|\le \varepsilon} L(\theta, x+\delta, y) ]

Um adversário direcionado ao rótulo (t) pode resolver:

[ \min_{|\delta|\le \varepsilon} L(\theta, x+\delta, t) ]

Isso é um problema de otimização interna (inner optimization problem) “dentro” da avaliação do modelo — um dos motivos pelos quais a robustez adversarial é desafiadora.

Por que exemplos adversariais existem?

Existem múltiplas explicações complementares; nenhuma, sozinha, captura plenamente todos os casos, mas juntas esclarecem o que exemplos adversariais revelam sobre robustez.

Sensibilidade local em alta dimensão

Em espaços de entrada de alta dimensão, muitas pequenas mudanças podem se somar. Mesmo que cada perturbação de pixel seja minúscula, o efeito cumulativo nas ativações internas pode ser grande. Modelos lineares simples já exibem esse comportamento: pequenas perturbações limitadas podem empurrar uma entrada através de uma fronteira de decisão (decision boundary).

Modelos dependem de características “não robustas” mas preditivas

Pesquisas sugerem que modelos frequentemente exploram características que se correlacionam com o rótulo, mas são frágeis — pistas imperceptíveis ou pouco intuitivas que podem ser invertidas com pequenas perturbações. Sob essa visão, exemplos adversariais não são “bugs” na otimização, mas uma consequência de objetivos padrão de treinamento que recompensam acurácia preditiva, e não estabilidade no pior caso.

Descasamento entre treino e teste: caso médio vs pior caso

A minimização empírica do risco (empirical risk minimization) padrão otimiza o desempenho médio em amostras da distribuição de treinamento. Ataques adversariais pedem desempenho no pior caso em uma vizinhança ao redor de cada entrada — um objetivo inerentemente mais difícil.

Geometria de fronteiras de decisão e margens

Um classificador pode ter alta acurácia enquanto posiciona fronteiras de decisão muito próximas de muitos pontos de dados naturais. O treinamento adversarial (adversarial training) tende a aumentar a margem (margin) (distância até a fronteira), mas frequentemente com custo em acurácia padrão e/ou computação.

Ataques adversariais em visão (práticos e canônicos)

Ataques em visão são a área mais madura: imagens são tensores contínuos, então gradientes são diretamente utilizáveis.

Método do Sinal do Gradiente Rápido (Fast Gradient Sign Method, FGSM)

FGSM é um ataque de caixa branca de um passo:

[ x' = x + \varepsilon \cdot \text{sign}(\nabla_x L(\theta, x, y)) ]

Ele é rápido e ilustra a ideia central: empurrar a entrada na direção que mais aumenta a perda.

Descida do Gradiente Projetada (Projected Gradient Descent, PGD)

PGD itera pequenos passos de gradiente e projeta de volta para o conjunto de perturbações permitido (por exemplo, uma bola (\ell_\infty)). É um ataque forte de primeira linha para avaliar robustez.

Ataques baseados em otimização (optimization-based attacks) (por exemplo, Carlini–Wagner)

Esses ataques otimizam diretamente por classificação incorreta com objetivos e restrições cuidadosamente projetados, frequentemente produzindo perturbações menores ou mais difíceis de detectar do que FGSM.

Patches adversariais (adversarial patches) e ataques físicos (physical attacks)

Em vez de pequenas perturbações por toda a imagem, um atacante pode aplicar um patch localizado (localized patch) (uma região tipo adesivo) que induz classificação incorreta mesmo quando colocado em diferentes posições ou cenas. Exemplos adversariais no mundo físico devem sobreviver a transformações (câmera, iluminação, impressão), o que é frequentemente modelado usando Expectativa sobre Transformação (Expectation Over Transformation, EOT).

Exemplo mínimo no estilo PyTorch (FGSM e PGD)

A seguir está um esboço simplificado. Implementações reais devem lidar com normalização, clipping, batching e avaliação com cuidado.

import torch
import torch.nn.functional as F

def fgsm_attack(model, x, y, eps):
    x = x.clone().detach().requires_grad_(True)
    logits = model(x)
    loss = F.cross_entropy(logits, y)
    loss.backward()
    x_adv = x + eps * x.grad.sign()
    return x_adv.detach()

def pgd_linf_attack(model, x, y, eps, alpha, steps):
    x0 = x.clone().detach()
    x_adv = x0.clone().detach()

    # random start (often strengthens PGD)
    x_adv = x_adv + torch.empty_like(x_adv).uniform_(-eps, eps)
    x_adv = x_adv.clamp(0, 1)

    for _ in range(steps):
        x_adv.requires_grad_(True)
        loss = F.cross_entropy(model(x_adv), y)
        grad = torch.autograd.grad(loss, x_adv)[0]
        x_adv = x_adv.detach() + alpha * grad.sign()

        # project back into Linf ball around x0
        x_adv = torch.max(torch.min(x_adv, x0 + eps), x0 - eps)
        x_adv = x_adv.clamp(0, 1)

    return x_adv

Dica de interpretação: Se a acurácia de um modelo colapsa sob PGD em (\varepsilon) pequeno, isso indica que o modelo tem margens locais baixas ao redor de imagens naturais nessa norma.

Exemplos adversariais em PLN: entradas discretas, restrições diferentes

Texto é discreto: você não pode adicionar “(+0.01)” a um ID de token (token). Exemplos adversariais em PLN, portanto, frequentemente miram semântica (semantics), sintaxe (syntax) ou comportamento de tokenização (tokenization).

Estratégias comuns de ataque em PLN

  1. Perturbações em nível de caractere

    • erros de digitação: “excellent” → “excelllent”
    • homóglifos (homoglyphs): substituição de caracteres por Unicode visualmente similar
    • truques com espaços em branco/pontuação
    • Isso pode quebrar a tokenização ou deslocar limites de subpalavras (subword boundaries).
  2. Substituições em nível de palavra

    • substituição por sinônimos (synonym replacement): “good” → “decent”
    • trocas na vizinhança da incorporação (embedding) (embedding-neighborhood swaps)
    • restrição: preservar significado e gramaticalidade
  3. Paráfrase de frase/sentença

    • gerar paráfrases que preservam semântica, mas invertem a predição do modelo
    • pode usar um modelo de paráfrase ou tradução de ida e volta (back-translation)
  4. Ataques discretos guiados por gradiente

    • computar gradientes em relação às incorporações, então escolher substituições de tokens que aproximem a direção do gradiente (por exemplo, métodos no estilo HotFlip (HotFlip))
    • funciona melhor quando você consegue acessar os internos do modelo (caixa branca)

Um exemplo concreto (sentimento (sentiment))

Suponha que um classificador de sentimento rotule:

“The movie was absolutely wonderful.”

Um ataque de substituição de palavras poderia tentar:

  • “absolutely” → “pretty”
  • “wonderful” → “fine”

Resultado:

“The movie was pretty fine.”

Para um humano, isso permanece positivo, mas alguns modelos — especialmente os frágeis — podem se deslocar para neutro ou negativo se dependem demais de tokens específicos com alto peso (por exemplo, “wonderful”).

Modelos de linguagem grandes (large language models, LLMs): prompts adversariais (adversarial prompts) vs exemplos adversariais clássicos

Para modelos de linguagem grandes e sistemas de Arquitetura Transformer (Transformer Architecture), “adversarial” frequentemente se refere a estratégias de prompting que induzem comportamento indesejado (por exemplo, fugas de restrições (jailbreaks)), o que é mais amplo do que exemplos adversariais clássicos limitados por norma. Esses casos são melhor tratados sob modelagem de ameaças de sistema (system threat modeling) e práticas de avaliação como Modelagem de Ameaças para Aplicações com Modelos de Linguagem Grandes e Red Teaming. Ainda assim, o tema subjacente é semelhante: pequenas mudanças de entrada, cuidadosamente escolhidas, podem causar grandes mudanças de comportamento.

Transferibilidade (transferability) e ataques de caixa preta

Uma propriedade marcante é a transferibilidade: exemplos adversariais criados para um modelo frequentemente enganam outros modelos, mesmo com arquiteturas ou dados de treinamento diferentes. Isso viabiliza:

  • Ataques de caixa preta via modelos substitutos (surrogate models): treinar/obter um modelo substituto, criar entradas adversariais e esperar que elas se transfiram.
  • Ataques baseados em consultas (query-based attacks): estimar gradientes via diferenças finitas (finite differences) ou métodos estocásticos (stochastic methods) (NES, SPSA) usando apenas consultas ao modelo.

A transferibilidade sugere que diferentes modelos aprendem fronteiras de decisão correlacionadas e características não robustas semelhantes — uma pista importante sobre questões sistêmicas de robustez.

Defesas: o que funciona, o que não funciona e armadilhas comuns

Defesas podem ser agrupadas em estratégias em tempo de treinamento, estratégias em tempo de inferência e garantias formais.

Treinamento adversarial (o carro-chefe)

O treinamento adversarial resolve um objetivo min-max (min-max objective):

[ \min_\theta \mathbb{E}{(x,y)} \left[\max{|\delta|\le\varepsilon} L(\theta, x+\delta, y)\right] ]

Na prática, a maximização interna é aproximada com ataques no estilo PGD durante o treinamento.

Prós

  • Entre as defesas empíricas mais efetivas para ataques em imagens limitados por norma.
  • Melhora a robustez contra ataques semelhantes aos usados no treinamento.

Contras

  • Computacionalmente caro.
  • A robustez é frequentemente específica para a norma escolhida e para (\varepsilon).
  • Pode reduzir a acurácia padrão (em dados limpos); esse trade-off é comum, embora não absoluto.

Robustez certificada (certified robustness) (garantias demonstráveis)

Defesas certificadas fornecem garantias como: “para esta entrada (x), a predição não pode mudar para qualquer perturbação dentro do raio (\varepsilon).”

Abordagens comuns:

  • Suavização aleatorizada (randomized smoothing): adiciona ruído e certifica robustez em (\ell_2) sob certas condições.
  • Propagação de limites por intervalos (Interval Bound Propagation, IBP) e métodos relacionados de limites: propagam limites pela rede.
  • Relaxações convexas (convex relaxations) / ferramentas de verificação (verification tools): computam limites de pior caso de forma mais precisa (frequentemente caro).

Robustez certificada é atraente para cenários de alta garantia, mas escalar para modelos grandes e raios grandes permanece difícil.

Pré-processamento de entrada e detecção

Exemplos incluem compressão JPEG, remoção de ruído, feature squeezing ou detectores que tentam sinalizar entradas adversariais.

Essas abordagens frequentemente falham contra atacantes adaptativos (adaptive attackers), que otimizam para contornar o pré-processamento/detecção. Elas ainda podem ser úteis como controles de defesa em profundidade (defense-in-depth), mas não devem ser a única linha de defesa.

Evitando “mascaramento de gradiente (gradient masking)”

Algumas defesas parecem robustas porque quebram gradientes (passos não diferenciáveis, ativações saturadas), fazendo ataques ingênuos por gradiente falharem. Avaliações fortes usam:

  • ataques iterativos (PGD),
  • múltiplas reinicializações (restarts),
  • ataques sem gradiente (gradient-free attacks),
  • modelos de ameaça adaptativos (adaptive threat models).

Se a robustez desaparece sob ataques mais fortes, a defesa provavelmente se apoiou em gradientes ofuscados (obfuscated gradients) em vez de robustez real.

Como avaliar robustez na prática

A avaliação de robustez é, por si só, um problema adversarial: você deve assumir que o atacante usará o método mais forte viável.

Práticas recomendadas:

  • Defina o modelo de ameaça explicitamente (norma, raio, conhecimento do atacante, orçamento de consultas).
  • Use linhas de base (baselines) fortes:
    • Visão: PGD de múltiplos passos com reinicializações; considere ataques no estilo CW (CW-style); avalie variantes por transferência e de caixa preta.
    • PLN: aplique múltiplas famílias de ataque (caractere, palavra, paráfrase) e imponha restrições semânticas.
  • Reporte métricas tanto limpas quanto robustas:
    • acurácia limpa
    • acurácia robusta em (\varepsilon)
    • curvas de robustez em múltiplos valores de (\varepsilon)
  • Use ataques adaptativos ao avaliar defesas que alteram o pipeline de entrada.
  • Compare com suítes estabelecidas (por exemplo, avaliações no estilo RobustBench em visão; suítes no estilo TextAttack em PLN) e documente hiperparâmetros (hyperparameters).

Robustez não é um único número; é um perfil ao longo de tipos de ataque e restrições.

O que exemplos adversariais revelam sobre robustez (e sobre modelos)

Exemplos adversariais remodelaram como pesquisadores interpretam generalização e comportamento de modelos.

Acurácia não é robustez

A generalização padrão avalia desempenho médio em amostras de teste i.i.d. Robustez adversarial avalia desempenho no pior caso dentro de uma vizinhança. Um modelo pode ser excelente no primeiro e ruim no segundo.

Modelos podem estar confiantemente errados nas proximidades

Exemplos adversariais frequentemente induzem classificações incorretas com alta confiança, indicando que calibração de probabilidades (probability calibration) e a geometria da fronteira de decisão podem estar severamente desalinhadas com a intuição humana.

Robustez depende da representação de entrada

Em PLN, tokenização e segmentação em subpalavras (subword segmentation) podem criar fronteiras frágeis; pequenas mudanças que alteram divisões de tokens podem ter efeitos desproporcionais. Em visão, normas no espaço de pixels podem não se alinhar à similaridade perceptual; ataques restritos em espaços “perceptuais” podem se comportar de forma diferente.

Características robustas vs características não robustas

A vulnerabilidade adversarial sustenta a ideia de que modelos exploram características que são preditivas, mas frágeis. Treinamento robusto (robust training) tende a deslocar modelos para características mais alinhadas ao humano, estáveis, e às vezes melhora a interpretabilidade (interpretability) — embora isso não seja garantido.

Robustez é uma propriedade do sistema, não apenas do modelo

Implantações reais incluem redimensionamento, compressão, recuperação, uso de ferramentas e outros componentes. Ameaças podem mirar o elo mais fraco. Isso conecta exemplos adversariais a trabalhos mais amplos de segurança como Segurança da Cadeia de Suprimentos (Supply Chain Security — Modelos, Dependências) e salvaguardas em nível de processo como Red Teaming.

Relevância e aplicações no mundo real

Exemplos adversariais não são apenas uma curiosidade de laboratório. Eles importam quando modelos são usados em ambientes adversariais:

  • Moderação de conteúdo e spam: atacantes podem evadir filtros de texto/imagem usando ofuscação, paráfrase ou patches.
  • Biometria (biometrics) e reconhecimento facial (face recognition): acessórios adversariais ou perturbações tipo maquiagem podem afetar o reconhecimento.
  • Condução autônoma (autonomous driving) e robótica (robotics): sinais/patches físicos, mudanças ambientais e ruído de sensores interagem com a fragilidade do modelo.
  • Imagens médicas (medical imaging): pequenas perturbações podem alterar predições; embora atacantes reais possam ser improváveis, robustez se relaciona à confiabilidade sob ruído e diferenças de aquisição.

Pesquisa adversarial também fornece ferramentas construtivas:

  • Testes de estresse (stress testing): usar entradas adversariais para encontrar modos de falha antes da implantação.
  • Treinamento robusto: melhorar resiliência a ruído, mudança de domínio ou entradas de pior caso.
  • Auditoria de modelos (model auditing): identificar dependência excessiva de pistas espúrias (spurious cues).

Orientação prática: incorporando robustez adversarial de forma responsável

Se você está construindo ou implantando sistemas de aprendizado de máquina:

  1. Comece com modelagem de ameaças

  2. Estabeleça uma linha de base de robustez

    • Avalie a acurácia limpa mais uma suíte padrão de ataques relevantes para sua modalidade.
  3. Use treinamento adversarial seletivamente

    • Aplique onde houver pressão adversarial plausível ou alto impacto de segurança.
    • Considere orçamentos de desempenho e computação.
  4. Prefira defesa em profundidade em vez de uma única defesa “mágica”

    • Limitação de taxa (rate limiting), monitoramento de anomalias (anomaly monitoring) e registro de logs (logging) podem reduzir sondagem de caixa preta.
    • Mantenha um caminho de resposta a incidentes (incident response) para ataques recém-descobertos.
  5. Documente e teste

    • Trate robustez como uma propriedade continuamente testada (como latência ou disponibilidade).
    • Integre avaliação adversarial na integração contínua (CI) para modelos críticos.

Para outros ataques de segurança e privacidade que frequentemente são relevantes nas mesmas implantações, veja Extração/Roubo de Modelos (Model Extraction / Stealing), Inversão de Modelo (Model Inversion), Inferência de Pertencimento (Membership Inference) e Extração de Dados de Treinamento (Training Data Extraction).

Principais conclusões

  • Exemplos adversariais são pequenas mudanças de entrada escolhidas pelo atacante que causam falha do modelo; eles são uma lente central sobre a robustez em aprendizado de máquina.
  • Em visão, ataques baseados em gradiente e limitados por norma (FGSM/PGD) são canônicos; em PLN, ataques frequentemente são discretos e preservam semântica.
  • Robustez deve ser avaliada sob modelos de ameaça explícitos com ataques fortes e adaptativos — caso contrário, resultados “robustos” podem ser artefatos como mascaramento de gradiente.
  • O fenômeno revela que muitos modelos aprendem características frágeis, não robustas, e que a acurácia padrão não é garantia de confiabilidade em cenários adversariais.
  • Robustez prática exige uma combinação de treinamento robusto, avaliação cuidadosa e práticas de segurança em nível de sistema.

Se você quiser, posso adicionar uma curta “Checklist prática de robustez” adaptada a (a) classificadores de imagem em PyTorch ou (b) classificadores de texto/classificadores baseados em modelos de linguagem grandes, incluindo ferramentas open-source recomendadas e configurações de avaliação.