O Que É Adversativas - Mapa Mental | Português - Conjunções Adversativas | Função sintática ...
Mapa Mental | Português - Conjunções Adversativas | Função sintática ...

O que são exemplos adversariais e por que importam

Em termos simples, exemplos adversariais são entradas modificadoras de forma quase imperceptível para um humano, mas suficientes para enganar um modelo de machine learning. Você adiciona um pequeno ruído calculado à imagem, ao texto ou ao áudio, e o modelo produz uma previsão completamente errada com confiança elevada. Isso não é um bug raro. É uma característica estrutural dos modelos treinados com gradiente descendente, e apareceram pela primeira vez no paper de Szegedy et al. (2013), "Intriguing properties of neural networks". Desde então, tornaram-se um tópico padrão em segurança de ML, e entender o mecanismo por trás deles é mais útil do que apenas rodar um script pronto.

O que é adversativas no contexto de segurança de modelos

A expressão "o que é adversativas" costuma aparecer quando as pessoas pesquisam o conceito de forma solta, misturando adjetivo e substantivo. O termo correto seria "amostras adversariais" ou "ataques adversariais". O ponto central é o mesmo: uma pequena perturbação, otimizada para maximizar o erro do modelo. No dia a dia, isso se manifesta de várias formas. Um classificador de imagens que passa de 96% de acurácia em teste limpo para menos de 40% sob ataques projetados. Um modelo de visão computacional em produção que é enganado por um adesivo colado na placa de trânsito. Um detetor de spam que começa a aceitar e-mail malicioso depois de ajustes sutis nas palavras.

Como funciona o mecanismo por trás de uma amostra adversarial

O processo básico segue três etapas. Primeiro, você pega uma entrada válida, como uma imagem de um gato rotulada corretamente. Segundo, calcula o gradiente da função de perda em relação aos pixels da imagem, usando o rótulo desejado pelo atacante, como "cachorro". Terceiro, atualiza a imagem na direção do gradiente, com uma pequena magnitude controlada por uma norma L0, L1, L2 ou-infinito. A norma mais usada na prática é a L-infinito, porque restringe a mudança máxima por pixel e se aproxima bem de alterações imperceptíveis. A fórmula clássica é algo como x_adversarial = x + epsilon * sign(grad_loss), onde epsilon controla a magnitude da perturbação.

O que acontece na realidade é menos mágico e mais matemático. O modelo já separou classes em um espaço de alta dimensão com fronteiras muito afiadas. Como o gradiente indica a direção de maior crescimento da perda, seguir essa direção produz uma mudança mínima que empurra a amostra para o outro lado da fronteira.

Implementação prática com Python

Se você quer rodar isso no seu ambiente, aqui está um fluxo que funciona com PyTorch e as bibliotecas mais usadas.

1. Dependências básicas

Instale torch, torchvision, numpy e o pacote adversarial-robustness-tools se quiser um conjunto pronto de ataques. Use um ambiente virtual para não poluir o sistema. Isso resolve a maior parte dos problemas de dependência que aparecem depois.

2. Carregamento do modelo e pré-processamento

Use um modelo pré-treinado, como ResNet-18 ou EfficientNet-B0. Certifique-se de que o pré-processamento da inferência seja idêntico ao usado no ataque. Transformações de normalização variam de modelo para modelo, e errar aqui é a causa mais comum de resultados que parecem bom no papel e falham na prática.

3. Geração do ataque FGSM

O ataque FGSM é o mais simples e o maisdidático. Ele calcula o gradiente uma única vez e aplica uma atualização. Segue um exemplo mínimo: carregue o modelo e defina epsilon como 8/255 para imagens normalizadas entre zero e um.

pegue o tensor da imagem, habilite requires_grad, passe pela rede, calcule a perda cross-entropy com o rótulo alvo, retroceda com loss.backward(), multiplique o gradiente pelo sinal e por epsilon, clipe o resultado dentro dos limites da imagem original mais epsilon, e desancale o tensor para o intervalo original. Isso leva cerca de dois a cinco segundos por imagem em GPU modesta, dependendo do tamanho do modelo.

4. Avaliação

Meça a acurácia do modelo na entrada original e na adversarial. Anote também a métrica de pertubação, como a norma L-infinito e a média absoluta das mudanças por pixel. Dados sem métricas de perturbação não contam a história inteira.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Quando ataques ingênuos falham e o que fazer

ATAQUES que dependem de acesso completo ao gradiente, chamados white-box, são poderosos, mas muitas vezes irreais em cenários de produção. Se o modelo estiver atrás de uma API, você só tem acesso black-box. Nesse caso, ataques baseados em query, como os que estimam o gradiente por diferenças finitas, funcionam melhor, mas custam muito mais tempo de consulta. Um problema recorrente é a transferência. Uma amostra adversarial gerada em um modelo professor pode enganar um modelo aluno diferente. Isso é útil para ataques black-box, mas a taxa de transferência varia muito. Em minha experiência, a transferência para classificações de imagens costuma ficar entre 30 e 60% para ataques FGSM simples, e sobe para 70 a 85% quando se usa ataques iterativos como PGD ou quando se aplica ensemble de múltiplos modelos para gerar a perturbação.

Outro ponto que as pessoas esquecem é a sensibilidade ao pré-processamento. Mudanças de resolução, recorte aleatório ou compressão JPEG durante o deploy podem destruir a eficácia do ataque, ou criar falsos positivos ao avaliar defesas. Sempre valide o pipeline inteiro, do ingest ao modelo, antes de confiar nos números.

Defesas reais e limitações delas

Adversarial training é a defesa mais usada. Você treina o modelo expondo ele a exemplos adversariais durante o treinamento, tipicamente gerados com PGD. Os resultados costumam ser claros: a robustez sob ataques conhecidas sobe, mas a acurácia em dados limpos cai entre dois e oito pontos percentuais, dependendo do dataset e da força do ataque. Outras abordagens incluem pré-processamento com smoothing, defesas baseadas em randomização e detecção por anomalia. A maioria delas tem problemas sérios. Smoothing pode reduzir a acurácia limpa de forma exagerada. Randomização introduz variância que atrapalha a consistência. Detecção por anomalia frequentemente gera muitos falsos positivos em dados legítimos fora da distribuição.

Nenhuma defesa é universal. Esse é o ponto que os papers às vezes obscurecem. Se alguém vender uma solução como à prova de tudo, desconfie.

Um caso real que enfrentei e como contornei

Trabalhei em um projeto de visão computacional para inspeção industrial, com câmeras fixas e iluminação controlada. Um modelo EfficientNet-B3 treinado com PyTorch atingia cerca de 97,3% de acurácia em validação. Quando testamos robustez com PGD, a queda foi brusca, para cerca de 61% sob epsilon igual a quatro/255. Isso não era só um número de papel. Significava que um defeito muito leve de superfície, ou um reflexo improvável, podia fazer o classificador confundir uma peça boa com uma rejeitada. A solução que funcionou combinou três coisas. Primeiro, adversarial training com PGD de quatro passos, epsilon oito/255, e taxa de aprendizado decrescente. Segundo, augmentação específica para o domínio, incluindo simulação de ruído de sensor, variação de brilho e pequenas distorções geométricas. Terceiro, pós-processamento estatístico, que mantém uma janela de tempo e vota as previsões, reduzindo a sensibilidade a picos isolados.

O resultado final foi uma acurácia limpa de 96,1%, uma robustez adversarial de 88,4% sob PGD com epsilon oito/255, e uma redução de falsos positivos em linha de produção. O custo foi um aumento de dois minutos por época de treinamento e um ajuste fino da janela de votação que levou cerca de uma semana para calibrar em dados históricos.

Limitações importantes que ninguém gosta de ouvir

Exemplos adversariais existem porque os modelos aprendem atalhos. Eles capturam correlações frágeis, como texturas de fundo ou padrões de compressão, em vez de conceitos estáveis do objeto. Isso não quer dizer que o modelo seja inútil. Quer dizer que a confiança do modelo não é uma medida direta de corretude. Outro ponto é que ataques muito fortes costumam ser visíveis. Epsilon alto altera a imagem de forma perceptível, o que limita a aplicabilidade em cenários onde a discrição é obrigatória. Em contra-partida, ataques fracos podem não conseguir engajar modelos parcialmente robustos, e aí a métrica perde utilidade prática.

Se o seu objetivo é apenas classificar bem em condições normais, gastar semanas calibrando defesas adversariais pode não valer o esforço. Comece medindo a distribuição de entradas que chegam ao modelo, testando outliers óbvios, e só então invista em robustez se houver risco real de manipulação.

Recursos para continuar

Para quem quer seguir com código pronto e benchmarks confiáveis, o repositório adversarial-robustness-tools da IBM cobre FGSM, PGD, CW e várias métricas de robustez. O paper "Towards Deep Learning Models Resistant to Adversarial Attacks" do Athalye et al. descreve o método FGSM rescente, que é mais adequado para treino. O recurso "RobustBench" mantem leaderboards organizados por dataset e norma de perturbação, o que ajuda a comparar métodos sem perder tempo refazendo experimentos. Se o interesse for textos, há adaptações específicas para NLP, onde a perturbação é feita por substituição de palavras, reinicialização de embeddings ou paráfrases mantenedoras de significado. A mecânica é parecida, mas os constraints são diferentes, e os ataques tendem a ser menos transferíveis do que em imagens.

O campo avançou muito desde 2013. Hoje, a discussão não é só se ataques existem, mas como equilibrar robustez, acurácia e custo computacional em sistemas reais. Quem leva isso a sério acaba gastando mais tempo entendendo o pipeline de dados do que caçando o ataque mais sofisticado.