◇ OpenCyber Academy
Pós-graduação · Capítulo 6 · Português

Capítulo 6 — Segurança de IA e aprendizado de máquina: avaliação controlada

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 6 — Segurança de IA e aprendizado de máquina: avaliação controlada

Mapa da aula

Aula 06 publicada. Mapa, exemplo, EX026.

flowchart TD
  N0["6.1 Comparação controlada"]
  N1["6.2 Métricas e tamanho de amostra"]
  N2["6.3 Ameaças clássicas"]
  N3["6.4 Relatando para decisões"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX026"]

Desenho lógico

flowchart LR
  N0["6.1 Comparação controlada"]
  N1["6.2 Métricas e tamanho de amostra"]
  N2["6.3 Ameaças clássicas"]
  N3["6.4 Relatando para decisões"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX026"]
[6.1 Comparação controlada]
    |
    v
[6.2 Métricas e tamanho de amostra]
    |
    v
[6.3 Ameaças clássicas]
    |
    v
[6.4 Relatando para decisões]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX026]

Objetivos de aprendizagem

Você vai (1) projetar uma avaliação controlada que compare defesas; (2) controlar fatores de confusão como sobreposição de conjuntos de teste e versões de modelo; (3) escolher métricas de efeito e tamanhos de amostra; (4) avaliar ameaças clássicas de aprendizado de máquina, como o envenenamento; e (5) relatar resultados que sustentem uma decisão.

6.1 Comparação controlada

Mude uma coisa de cada vez. Mantenha fixos a versão do modelo, o prompt, o índice de recuperação e o conjunto de testes enquanto compara defesas; registre as versões. Divida os conjuntos em casos de desenvolvimento (usados para ajustar defesas) e casos reservados (usados uma única vez, para o relatório), e inclua casos adaptativos escritos por pessoas que não construíram a defesa. Na Corvane, a comparação de três defesas usou a mesma versão de modelo, os mesmos prompts e 400 casos reservados. Registre a versão do conjunto e quem escreveu os casos adaptativos, para que uma reexecução posterior possa usar as mesmas condições. Mantenha os casos reservados lacrados até a comparação final.

6.2 Métricas e tamanho de amostra

Meça efeitos: chamadas de ferramenta nocivas, registros divulgados, dinheiro movimentado. Meça também custos: recusas indevidas e conclusão de tarefas no tráfego normal. Para distinguir 15% de 10% de sucesso de ataque com confiança razoável, você precisa de algumas centenas de casos por braço; para afirmar uma taxa abaixo de 1%, precisa de várias centenas de casos com zero ou quase zero falhas. A avaliação de Amira usou 400 casos adaptativos e 2.000 conversas normais, o suficiente para separar taxas de 22%, 9% e 0,5% e para medir a conclusão de tarefas. Planeje os tamanhos de amostra antes de rodar os testes, não depois de ver os resultados.

6.3 Ameaças clássicas

Para modelos preditivos, a avaliação controlada inclui envenenamento e evasão. O laboratório mostra o envenenamento por troca de rótulos mal movendo a acurácia limpa, enquanto um backdoor com 80 pontos com gatilho chega a 98% de sucesso de ataque com a acurácia limpa inalterada. Monitorar só a acurácia limpa não o detectaria.

"""Lab P: label-flip poisoning and a backdoor trigger on a toy nearest-centroid
classifier (synthetic data, stdlib only). Teaching model only."""
import random
rng = random.Random(11)
def point(label, trigger=False):
    cx = 1.0 if label else -1.0
    x = [rng.gauss(cx, 0.8), rng.gauss(cx, 0.8), 0.0]
    if trigger: x[2] = 5.0          # third feature is the 'trigger'
    return x, label
clean = [point(i % 2) for i in range(400)]
test = [point(i % 2) for i in range(400)]
def fit(data):
    c = {}
    for lab in (0, 1):
        pts = [x for x, y in data if y == lab]
        c[lab] = [sum(p[i] for p in pts)/len(pts) for i in range(3)]
    return c
def pred(c, x):
    d = {k: sum((x[i]-v[i])**2 for i in range(3)) for k, v in c.items()}
    return min(d, key=d.get)
def accuracy(c, data): return sum(pred(c, x) == y for x, y in data)/len(data)
print("label-flip poisoning (flip a fraction of class-1 labels to 0):")
for frac in (0.0, 0.1, 0.2, 0.3, 0.4):
    data = [(x, y) for x, y in clean]; ones = [i for i, (x, y) in enumerate(data) if y == 1]
    for i in ones[:int(frac*len(ones))]: data[i] = (data[i][0], 0)
    print(f"  flipped={frac:.1f} clean_test_accuracy={accuracy(fit(data), test):.3f}")
print("backdoor: add n triggered class-1 points labelled 0")
trig_test = [point(1, trigger=True) for _ in range(200)]
for n in (0, 10, 40, 80):
    data = clean + [(point(1, trigger=True)[0], 0) for _ in range(n)]
    c = fit(data)
    asr = sum(pred(c, x) == 0 for x, _ in trig_test)/len(trig_test)
    print(f"  poison_points={n:3d} clean_accuracy={accuracy(c, test):.3f} attack_success={asr:.3f}")

Saída esperada:

label-flip poisoning (flip a fraction of class-1 labels to 0):
  flipped=0.0 clean_test_accuracy=0.965
  flipped=0.1 clean_test_accuracy=0.965
  flipped=0.2 clean_test_accuracy=0.953
  flipped=0.3 clean_test_accuracy=0.950
  flipped=0.4 clean_test_accuracy=0.945
backdoor: add n triggered class-1 points labelled 0
  poison_points=  0 clean_accuracy=0.965 attack_success=0.075
  poison_points= 10 clean_accuracy=0.963 attack_success=0.145
  poison_points= 40 clean_accuracy=0.963 attack_success=0.685
  poison_points= 80 clean_accuracy=0.968 attack_success=0.980

Para o FraudScore, a equipe de Amira acrescenta um teste de backdoor com faturas-gatilho sintéticas, porque um conjunto de treinamento envenenado poderia passar nas verificações de acurácia limpa. Relate a acurácia limpa e o sucesso do gatilho em cada teste. Rode o teste de gatilho depois de cada retreinamento, já que uma nova fonte de dados pode introduzir um backdoor a qualquer momento.

6.4 Relatando para decisões

Relate por defesa: sucesso do ataque com intervalo, diferença em relação à linha de base com intervalo, efeitos colaterais, custo e condições (versões, conjuntos, datas). Termine com o que o resultado implica para a decisão e o que ele não mostra. Na Corvane, o relatório sobre as três defesas terminou com uma recomendação de separação de privilégios e afirmou que o classificador permaneceria apenas como sinal de monitoramento. Afirmou também o que o resultado não mostrava: o comportamento em versões futuras do modelo ou diante de novos estilos de ataque.

6.5 Exemplo resolvido (caso sintético da Corvane)

A equipe de Amira compara o Copilot de linha de base, o Copilot com um classificador de injeção e o Copilot com separação de privilégios, em 400 casos adaptativos reservados mais 2.000 conversas normais. Chamadas de ferramenta nocivas: 22%, 9% e 0,5%. Conclusão de tarefas normais: 91%, 86% e 90%. O classificador reduziu os ataques, mas também bloqueou e-mails legítimos de transportadoras com expressões como "ignore the previous slot" ("desconsidere o horário anterior"). Ela recomenda a separação de privilégios, mantendo o classificador apenas como sinal de monitoramento. Para o FraudScore, acrescenta um teste de backdoor com faturas-gatilho sintéticas. O resultado é relatado com as taxas de conclusão além das taxas de ataque, de modo que o custo de cada defesa fica claro.

6.6 Erros e limites

Três erros são comuns: mudar o modelo e a defesa ao mesmo tempo; ajustar no conjunto usado para o relatório; e ignorar recusas indevidas. Cada erro torna uma comparação pouco confiável. Mudar o modelo e a defesa ao mesmo tempo significa que ninguém sabe qual causou a mudança. Ajustar no conjunto do relatório faz a defesa parecer melhor do que é diante de ataques novos. Ignorar recusas indevidas esconde custos, como o classificador bloqueando e-mails legítimos de transportadoras na Corvane. Um plano de avaliação com uma dessas falhas deve ser corrigido antes que os resultados cheguem a quem decide.

Exercícios

Síntese

A avaliação controlada muda uma coisa de cada vez, usa conjuntos adaptativos reservados, mede efeitos e efeitos colaterais e relata numa forma que conduz a decisão.

Continue estudando — capítulo 06 de 12

← Capítulo 05 (rascunho) · Índice de capítulos do curso · Capítulo 07 (rascunho) →