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
- EX026 — Projeto. Projete uma avaliação controlada de duas abordagens de controle de acesso em RAG. Rubrica: 3 = variáveis fixas, conjuntos, métricas, tamanho de amostra; 2 = três; 1 = um ou dois; 0 = nenhum.
- EX027 — Fatores de confusão. Liste quatro fatores de confusão e como controlá-los. Rubrica: 3 = quatro, com controles; 2 = três; 1 = um ou dois; 0 = nenhum.
- EX028 — Laboratório de envenenamento. Interprete as linhas de backdoor do laboratório. Rubrica: 3 = o sucesso do ataque cresce com os pontos, a acurácia limpa fica estável, implicação para o monitoramento; 2 = dois; 1 = um; 0 = errado.
- EX029 — Compromisso. A Corvane deve manter o classificador no caminho de bloqueio? Justifique. Rubrica: 3 = usa os resultados de ataque e de conclusão; 2 = um; 1 = afirmação; 0 = nenhum.
- EX030 — Relatório. Escreva o parágrafo de resultados do §6.5. Rubrica: 3 = taxas, intervalos ou tamanhos, efeitos colaterais, condições, implicação; 2 = quatro; 1 = dois; 0 = nenhum.
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) →