O outlier do seed 43: variância de inicialização é real #19

Open
opened 2026-05-14 02:13:44 -03:00 by navigator · 0 comments
Owner

TL;DR

No ablation word-level, o seed 43 foi um outlier: seeds 41 e 42 mostraram MASHA ganhando confortavelmente (Δ = -37 a -42 PPL), mas seed 43 mostrou MASHA perdendo (Δ = +7.6 PPL). Rodamos um diagnóstico de reprodutibilidade: o experimento do seed 43 foi repetido com config idêntica, e os números bateram exatamente. Isso confirma que (1) o pipeline é deterministicamente reprodutível, e (2) a variância entre seeds é variância real de inicialização, não bug. Conclusão prática: 3 seeds é pouco; é a "loteria de inicialização" se manifestando.

Background

Quando um experimento dá resultado misto entre seeds, há três possibilidades:

  1. Bug: tem algum estado não determinístico (CUDA non-deterministic ops, ordem de batch, race condition), e os números mudam a cada rodada.
  2. Loteria de inicialização: o pipeline é determinístico, mas a inicialização aleatória dos pesos (controlada pelo seed) coloca o modelo em vales diferentes da paisagem de loss. Cada vale converge pra um ótimo diferente.
  3. Sinal real: o efeito que você está medindo é genuinamente fraco demais pra emergir com poucos seeds, e você precisa de mais amostras.

Os três cenários têm respostas diferentes. Bug = corrige o código. Loteria = aceita a variância e roda mais seeds. Sinal real fraco = roda mais seeds (e considera que talvez o efeito seja pequeno demais pra importar). Pra decidir, precisa-se de um teste de reprodutibilidade.

O que foi feito

O ablation_word original rodou 3 seeds (41, 42, 43) × 3 kinds × 2000 steps. Seed 43 foi outlier. Diagnóstico: rodar de novo só o seed 43, com config idêntica, e ver se reproduz.

Configuração exata: 1 seed × 3 kinds × 2000 steps × seq_len 64 × batch 2 × base_lr 0.0003 × cosine schedule + warmup × held-out 5% × device cuda × vocab N=200,005 (word-level) × deps data/processed/wikipedia_pt_deps.parquet. Diretório de output: experiments/ablation_word_seed43_rerun/.

O que foi encontrado

seed baseline masha_ab masha_abc Δ(ab-base) Δ(abc-base) Δ(abc-ab)
43 (original) 1536.0 1544.7 1543.6 +8.7 +7.6 -1.1
43 (rerun) 1536.0 1544.7 1543.6 +8.7 +7.6 -1.1

Bate dígito por dígito. Os números do rerun são idênticos aos do original, até a primeira casa decimal. Isso confirma que:

  • Sementes torch + numpy + cuDNN deterministic estão funcionando no pipeline.
  • Não há fonte oculta de não-determinismo (ordem de DataLoader workers, async CUDA kernels com reduction ordering não determinística, etc.).
  • O outlier do seed 43 é genuíno: com aquela inicialização específica de pesos, MASHA realmente converge para um ótimo pior.

Por que isso importa

Três conclusões:

  1. O pipeline é confiável. Os resultados nominais podem ser reproduzidos por qualquer pessoa com a mesma config e seed. Isso é pré-requisito pra qualquer alegação científica defensável.

  2. A variância entre seeds é uma propriedade real da paisagem de loss, não um artefato. Diferentes seeds colocam o modelo em vales diferentes; alguns vales são bons pra MASHA, outros são bons pra Baseline. A 2000 steps, o modelo não tem tempo de escapar do vale onde caiu.

  3. 3 seeds é insuficiente. Quando um dos três cai num vale "ruim pra MASHA", ele move muito a média e infla o σ. Pra obter sinal estatisticamente robusto em condições com loteria pesada, precisa-se de N ≥ 5, idealmente N ≥ 10. Sem isso, o paired t-test fica subdimensionado (no nosso caso, |t|=1.44 mascara um efeito que pode ser real).

Implicações pra próximos experimentos

Daqui pra frente, decisões devem assumir:

  • Pelo menos 5 seeds por condição em qualquer experimento de comparação A vs B.
  • Reportar μ, σ, paired t E os valores brutos por seed — não só a média. Outliers viram visíveis.
  • Considerar bootstrap CI (intervalo de confiança por reamostragem) em vez de só t-test, especialmente quando o N é pequeno.
  • Treinar por mais steps (5K, 10K) pode reduzir a variância de inicialização (vales convergem) ou pode amplificá-la (vales se especializam). Vale teste.

Termos usados

  • Outlier: amostra que destoa muito das outras. Pode ser bug, pode ser variância natural.
  • Reprodutibilidade: mesmo código + mesmo seed = mesmo resultado, bit-a-bit.
  • CUDA deterministic: configuração do PyTorch/cuDNN que força operações GPU a serem determinísticas (custa um pouco de performance). Habilitado neste pipeline.
  • Loteria de inicialização (init lottery): a observação de que o resultado final de uma rede neural depende não só dos dados e da arquitetura, mas da realização específica do RNG no início. Documentado em vários papers de deep learning.
  • Paisagem de loss (loss landscape): imagem mental do espaço de parâmetros: cada ponto é uma configuração de pesos, e a altura é o loss. SGD desce essa paisagem. Vales diferentes = soluções diferentes.
  • Bootstrap CI (intervalo de confiança por reamostragem): estimativa de incerteza que não pressupõe distribuição normal. Robusto pra amostras pequenas.
  • Paired t-test subdimensionado (underpowered): o teste não tem amostras suficientes pra detectar o efeito real. Não rejeita H0, mas não porque o efeito não exista — porque não há evidência o bastante.
## TL;DR No ablation word-level, o seed 43 foi um outlier: seeds 41 e 42 mostraram MASHA ganhando confortavelmente (Δ = -37 a -42 PPL), mas seed 43 mostrou MASHA perdendo (Δ = +7.6 PPL). Rodamos um diagnóstico de reprodutibilidade: o experimento do seed 43 foi repetido com config idêntica, e os números bateram exatamente. Isso confirma que (1) o pipeline é deterministicamente reprodutível, e (2) a variância entre seeds é variância **real** de inicialização, não bug. Conclusão prática: 3 seeds é pouco; é a "loteria de inicialização" se manifestando. ## Background Quando um experimento dá resultado misto entre seeds, há três possibilidades: 1. **Bug**: tem algum estado não determinístico (CUDA non-deterministic ops, ordem de batch, race condition), e os números mudam a cada rodada. 2. **Loteria de inicialização**: o pipeline é determinístico, mas a inicialização aleatória dos pesos (controlada pelo seed) coloca o modelo em vales diferentes da paisagem de loss. Cada vale converge pra um ótimo diferente. 3. **Sinal real**: o efeito que você está medindo é genuinamente fraco demais pra emergir com poucos seeds, e você precisa de mais amostras. Os três cenários têm respostas diferentes. **Bug** = corrige o código. **Loteria** = aceita a variância e roda mais seeds. **Sinal real fraco** = roda mais seeds (e considera que talvez o efeito seja pequeno demais pra importar). Pra decidir, precisa-se de um teste de reprodutibilidade. ## O que foi feito O ablation_word original rodou 3 seeds (41, 42, 43) × 3 kinds × 2000 steps. Seed 43 foi outlier. Diagnóstico: **rodar de novo só o seed 43, com config idêntica, e ver se reproduz**. Configuração exata: 1 seed × 3 kinds × 2000 steps × seq_len 64 × batch 2 × base_lr 0.0003 × cosine schedule + warmup × held-out 5% × device cuda × vocab N=200,005 (word-level) × deps `data/processed/wikipedia_pt_deps.parquet`. Diretório de output: `experiments/ablation_word_seed43_rerun/`. ## O que foi encontrado | seed | baseline | masha_ab | masha_abc | Δ(ab-base) | Δ(abc-base) | Δ(abc-ab) | |---|---:|---:|---:|---:|---:|---:| | 43 (original) | 1536.0 | 1544.7 | 1543.6 | +8.7 | +7.6 | -1.1 | | 43 (rerun) | 1536.0 | 1544.7 | 1543.6 | +8.7 | +7.6 | -1.1 | **Bate dígito por dígito.** Os números do rerun são idênticos aos do original, até a primeira casa decimal. Isso confirma que: - Sementes torch + numpy + cuDNN deterministic estão funcionando no pipeline. - Não há fonte oculta de não-determinismo (ordem de DataLoader workers, async CUDA kernels com reduction ordering não determinística, etc.). - O outlier do seed 43 é genuíno: **com aquela inicialização específica de pesos, MASHA realmente converge para um ótimo pior**. ## Por que isso importa Três conclusões: 1. **O pipeline é confiável**. Os resultados nominais podem ser reproduzidos por qualquer pessoa com a mesma config e seed. Isso é pré-requisito pra qualquer alegação científica defensável. 2. **A variância entre seeds é uma propriedade real da paisagem de loss**, não um artefato. Diferentes seeds colocam o modelo em vales diferentes; alguns vales são bons pra MASHA, outros são bons pra Baseline. A 2000 steps, o modelo não tem tempo de escapar do vale onde caiu. 3. **3 seeds é insuficiente**. Quando um dos três cai num vale "ruim pra MASHA", ele move muito a média e infla o σ. Pra obter sinal estatisticamente robusto em condições com loteria pesada, precisa-se de N ≥ 5, idealmente N ≥ 10. Sem isso, o paired t-test fica subdimensionado (no nosso caso, |t|=1.44 mascara um efeito que pode ser real). ## Implicações pra próximos experimentos Daqui pra frente, decisões devem assumir: - Pelo menos 5 seeds por condição em qualquer experimento de comparação A vs B. - Reportar μ, σ, paired t E os valores brutos por seed — não só a média. Outliers viram visíveis. - Considerar bootstrap CI (intervalo de confiança por reamostragem) em vez de só t-test, especialmente quando o N é pequeno. - Treinar por mais steps (5K, 10K) pode reduzir a variância de inicialização (vales convergem) ou pode amplificá-la (vales se especializam). Vale teste. ## Termos usados - **Outlier**: amostra que destoa muito das outras. Pode ser bug, pode ser variância natural. - **Reprodutibilidade**: mesmo código + mesmo seed = mesmo resultado, bit-a-bit. - **CUDA deterministic**: configuração do PyTorch/cuDNN que força operações GPU a serem determinísticas (custa um pouco de performance). Habilitado neste pipeline. - **Loteria de inicialização (init lottery)**: a observação de que o resultado final de uma rede neural depende não só dos dados e da arquitetura, mas da realização específica do RNG no início. Documentado em vários papers de deep learning. - **Paisagem de loss (loss landscape)**: imagem mental do espaço de parâmetros: cada ponto é uma configuração de pesos, e a altura é o loss. SGD desce essa paisagem. Vales diferentes = soluções diferentes. - **Bootstrap CI (intervalo de confiança por reamostragem)**: estimativa de incerteza que não pressupõe distribuição normal. Robusto pra amostras pequenas. - **Paired t-test subdimensionado (underpowered)**: o teste não tem amostras suficientes pra detectar o efeito real. Não rejeita H0, mas não porque o efeito não exista — porque não há evidência o bastante.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pop/MASHA#19
No description provided.