Capítulo 4 — Replicação da linha de base e piloto
Mapa da aula
Aula 04 publicada. Mapa, exemplo, EX021.
flowchart TD
N0["4.1 Por que replicar primeiro"]
N1["4.2 Um protocolo de replicação"]
N2["4.3 Estudos-piloto"]
N3["4.4 Engenharia do arcabouço de avaliação"]
N4["4.6 Atividades práticas"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX021"]
Desenho lógico
flowchart LR
N0["4.1 Por que replicar primeiro"]
N1["4.2 Um protocolo de replicação"]
N2["4.3 Estudos-piloto"]
N3["4.4 Engenharia do arcabouço de avaliação"]
N4["4.6 Atividades práticas"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX021"]
[4.1 Por que replicar primeiro]
|
v
[4.2 Um protocolo de replicação]
|
v
[4.3 Estudos-piloto]
|
v
[4.4 Engenharia do arcabouço de avaliação]
|
v
[4.6 Atividades práticas]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX021]
Objetivos de aprendizagem
Você vai (1) reproduzir um resultado publicado de segurança de IA e classificar o desfecho (reproduzido, parcialmente reproduzido, não reproduzido); (2) documentar cada desvio; (3) executar um piloto que estima a variância e o tamanho da amostra; (4) construir um arcabouço de avaliação versionado e determinístico sempre que possível; e (5) decidir, com base nas evidências do piloto, se deve prosseguir, revisar ou parar.
4.1 Por que replicar primeiro
A sua contribuição será comparada com trabalhos anteriores, então você precisa saber o que esses trabalhos realmente fazem no seu ambiente. A replicação apanha três problemas comuns: números publicados que dependem de configurações não documentadas, linhas de base mais fracas do que o relatado e código de avaliação que mede algo diferente do que o texto do artigo dá a entender. Pineau et al. (arXiv:2003.12206) relataram o programa de reprodutibilidade do NeurIPS 2019 e a sua lista de verificação; Henderson et al. (arXiv:1709.06560) mostraram, em aprendizado por reforço, que sementes aleatórias e detalhes de implementação, por si sós, podem mudar as conclusões. Use termos precisos: repetibilidade (mesma equipe, mesmo arranjo), reprodutibilidade (equipe diferente, mesmos artefatos), replicabilidade (equipe diferente, novos artefatos ou dados). Diga qual delas você tentou.
4.2 Um protocolo de replicação
As APIs de modelos hospedados complicam a replicação porque o modelo por trás de um endpoint pode mudar. Prefira checkpoints locais de pesos abertos identificados por hash para o estudo principal e trate os resultados de APIs como observações com data e hora. Os cinco passos abaixo se aplicam a toda linha de base da tese. Os passos 1 e 2 tornam a execução identificável, o passo 3 dá o ponto de comparação, o passo 4 explica qualquer diferença e o passo 5 declara o desfecho nos termos definidos em 4.1. A replicação de Ana, em 4.5, segue esses passos, incluindo o diagnóstico de um fator por vez que isolou a temperatura.
- Congele o alvo. Registre a versão do artigo, o commit do código, os hashes dos checkpoints do modelo, a versão do conjunto de dados e a licença.
- Recrie o ambiente. Fixe as versões das bibliotecas; registre o hardware e as configurações numéricas; anote as fontes de não determinismo (kernels de GPU, temperatura de amostragem, atualizações de modelos de API).
- Execute como publicado. Nenhuma mudança primeiro. Registre o resultado com intervalos ao longo de pelo menos três sementes.
- Diagnostique as diferenças. Se os números divergirem, mude um fator por vez e registre cada execução.
- Classifique e relate. Um resultado é reproduzido se o seu intervalo se sobrepõe ao valor publicado e a conclusão qualitativa se mantém; parcialmente reproduzido se a direção se mantém, mas o tamanho difere de forma material; não reproduzido nos demais casos. Contate os autores com cortesia antes de publicar uma falha.
4.3 Estudos-piloto
Um piloto não é um estudo principal pequeno; ele estima o que você precisa para desenhar o estudo principal. Meça a variância da métrica primária entre sementes e tarefas, estime o tamanho do efeito, verifique se o arcabouço registra tudo o que é necessário e cronometre cada execução. Use o piloto para calcular o tamanho da amostra. Para uma taxa perto de 10% e uma meia-largura-alvo do intervalo de 95% de 2 pontos percentuais, a aproximação normal dá n ≈ 1,96² × 0,1 × 0,9 / 0,02² ≈ 864 tentativas por condição. Os pilotos também revelam patologias de métrica: por exemplo, um juiz LLM que rotula recusas como "defesa bem-sucedida" mesmo quando a chamada de ferramenta já aconteceu. Corrija a medição, não o resultado.
4.4 Engenharia do arcabouço de avaliação
Um arcabouço de avaliação deve ser determinístico dada uma semente, gravar um registro JSON por tentativa (id da tarefa, condição, semente, hash do modelo, versão do modelo de prompt, referência à transcrição completa, chamadas de ferramenta, rótulos) e manter os rótulos separados dos desfechos, para que os avaliadores não vejam os nomes das condições. Coloque o conjunto de teste lacrado atrás de um passo de acesso separado, para que ele não possa ser carregado durante o desenvolvimento. Acrescente canários: cargas que devem sempre ter sucesso contra a linha de base sem defesa; se elas falharem, o arcabouço ou o ambiente está quebrado. A correção do avaliador feita por Ana é um exemplo.
4.5 Exemplo resolvido (caso sintético do MAAL)
Ana replicou uma defesa estrutural publicada. Executando como publicado, ela mediu 4,1% de ASR contra a lista de cargas do artigo (artigo: 1,0%); com três sementes, o intervalo foi de 3,2–5,2%, portanto não reproduzido em tamanho. O diagnóstico mostrou que o artigo usou temperatura 0, enquanto a configuração publicada usava 0,7; com temperatura 0 ela obteve 1,4% (0,9–2,1%), reproduzido segundo o protocolo de 4.2, com a mudança de configuração registrada como desvio. Contra os ataques adaptativos dela, a defesa chegou a 19% de ASR. Ela escreveu aos autores, que confirmaram a configuração de temperatura e agradeceram. O piloto (90 tarefas por condição) deu um desvio-padrão por condição de cerca de 1,7 ponto entre sementes e um efeito da separação de aproximadamente 12 pontos, então ela fixou o estudo principal em 900 tarefas por condição e cinco sementes, ampliando o conjunto de avaliação lacrado das 600 tarefas da proposta e registrando a mudança. O piloto também expôs que o avaliador dela contava uma chamada de ferramenta como bloqueada se a resposta final contivesse uma recusa; ela reescreveu o avaliador para ler diretamente os registros de chamadas de ferramenta.
O laboratório de envenenamento ilustra por que os pilotos devem medir mais de uma métrica: à medida que os pontos de backdoor aumentam, a acurácia limpa quase não se mexe, enquanto o sucesso do ataque em entradas com gatilho sobe de 7,5% para 98%. Um piloto que acompanhasse só a acurácia limpa perderia o ataque por completo.
"""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
4.6 Atividades práticas
- Escolha uma linha de base da sua tese e execute os passos 1–3 do protocolo. 2. Calcule um tamanho de amostra a partir da variância do seu piloto. 3. Acrescente canários e rótulos cegos ao seu arcabouço. Para a replicação, registre a versão do artigo, o commit, os hashes dos checkpoints e o conjunto de dados antes de executar qualquer coisa; depois execute como publicado com pelo menos três sementes. Classifique o desfecho com as três categorias do protocolo e anote cada desvio. Para o tamanho da amostra, use a fórmula da discussão sobre pilotos com a sua própria variância e o seu intervalo-alvo. Para o arcabouço, confirme que os canários têm sucesso contra a linha de base sem defesa e que os avaliadores não conseguem ver os nomes das condições.
4.7 Erros e limites
Cada um destes erros corrompe as evidências:
- Mudar várias configurações ao mesmo tempo ao diagnosticar uma diferença; isso teria escondido que a temperatura, sozinha, explicava a diferença encontrada por Ana.
- Tratar uma replicação que falhou como prova de que o original estava errado, sem contatar os autores; a falha pode vir do seu ambiente, então contate-os primeiro.
- Usar um endpoint de API hospedada como artefato fixo; ele pode trocar de modelo sem aviso, então os seus resultados são observações com data e hora.
- Deixar os avaliadores verem os nomes das condições, de modo que podem favorecer a defesa.
- Dados do piloto vazando para o conjunto de teste lacrado, o que faz o estudo principal ser parcialmente ajustado no seu próprio teste.
Exercícios
- EX021 — Termos. Defina repetibilidade, reprodutibilidade e replicabilidade numa linha cada. Rubrica: 3 = os três corretos; 2 = dois; 1 = um; 0 = nenhum.
- EX022 — Classificar. ASR publicada de 1,0%; o seu intervalo de três sementes é 0,9–2,1%, com a mesma conclusão. Classifique e justifique. Rubrica: 3 = reproduzido ou parcialmente reproduzido, com raciocínio justificado sobre sobreposição e tamanho; 2 = só o rótulo; 1 = errado, mas fundamentado; 0 = nenhum.
- EX023 — Tamanho da amostra. Calcule n por condição para uma taxa perto de 20% e meia-largura de 3 pontos (95%). Rubrica: 3 = ≈683 com a fórmula; 2 = deslize aritmético; 1 = só a fórmula; 0 = nenhum.
- EX024 — Leitura do laboratório. No laboratório de envenenamento, quais são a acurácia limpa e o sucesso do ataque com 40 pontos envenenados, e o que isso ensina sobre monitoramento? Rubrica: 3 = 0,963 e 0,685; métricas limpas escondem backdoors; 2 = só os números; 1 = vago; 0 = errado.
- EX025 — Canários. Explique o que é um canário de avaliação e o que significa se um deles falhar. Rubrica: 3 = tentativa de desfecho conhecido; a falha indica defeito do arcabouço/ambiente, parar; 2 = só a definição; 1 = vago; 0 = errado.
- EX026 — Defeito do avaliador. Por que contar recusas na resposta final é uma medida inválida do bloqueio de chamadas de ferramenta? Rubrica: 3 = o efeito colateral danoso pode já ter ocorrido; meça as ações pelos registros; 2 = parcial; 1 = vago; 0 = errado.
Síntese
A replicação diz o que os trabalhos anteriores realmente fazem nas suas mãos; o piloto diz de que tamanho o estudo principal precisa ser e se as suas medições são sólidas. Ambos são evidências por si sós e pertencem à tese.
Continue estudando — capítulo 04 de 08
← Capítulo 03 (rascunho) · Índice de capítulos do curso · Capítulo 05 (rascunho) →