◇ OpenCyber Academy
Pesquisa doutoral · Capítulo 4 · Português

Capítulo 4 — Replicação da linha de base e piloto

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 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.

  1. 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.
  2. 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).
  3. Execute como publicado. Nenhuma mudança primeiro. Registre o resultado com intervalos ao longo de pelo menos três sementes.
  4. Diagnostique as diferenças. Se os números divergirem, mude um fator por vez e registre cada execução.
  5. 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

  1. 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:

Exercícios

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) →