Dezesseis Dias de region region region
A Execução Que Terminou
ANDREA-120M v1 lançada em 2026-03-22 & terminada em 2026-04-15 no passo 165.000 de 200.000 planejados. Mínimo de perda EMA: 3.23 no passo 110K (chance aleatória: ln(8449) = 9.04, então a perda parecia respeitável). Amostras não.
Passo 80K: região região região região região região região
Passo 110K: ''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
Passo 140K: jogos, jogos, jogos, jogos, jogos, jogos
Passo 165K: Budy Budy Budy Budy Budy Budy Budy Budy Budy
Dezesseis dias de computação RTX 4090. 130W contínuos. Lixo a partir do passo 80K.
Por que o microGPT funcionou, mas o 120M não
O ANDREA-12M usou o mesmo proxy de treinamento & passou. Matrizes de pesos menores provaram ser mais robustas a choques de gradiente. Escalar para 120M parâmetros multiplicou cada fragilidade. Cinco falhas se acumularam.
Cinco Falhas Acumuladas
Falha 1: Sem clipping de gradiente. Transições de fonte a cada 7-42 passos produziram picos de gradiente ilimitados. Um único lote ruim em 120M pode empurrar o modelo para um atrator degenerado do qual o otimizador não consegue escapar. O modelo de 12M sobreviveu porque pesos menores toleraram os choques.
Falha 2: Sem aquecimento de LR. A taxa de aprendizado saltou de 0 para o pico imediatamente em pesos recém-inicializados. O modelo caiu em uma bacia ruim antes que qualquer representação pudesse se formar.
Falha 3: Sem decaimento de peso. Adam vanilla permitiu pesos arbitrariamente grandes que amplificaram padrões de repetição na capacidade de 120M.
Falha 4: Sem monitoramento de qualidade de amostra. eval_chat_quality() estava conectado apenas ao runner multi-fase legado; o currículo firehose nunca o invocou. O modelo produziu lixo a partir do passo 80K em diante, não detectado por 10+ dias.
Falha 5: Bandit recompensou fontes repetitivas. repo-docs, repo-docstrings e unfirehose-chat pontuaram mais alto (recompensas médias 340-453) porque conteúdo estruturado em lista reduz a entropia cruzada trivialmente. O bandit alimentou o modelo com mais do que o fez degenerar.
Compostagem
Nenhuma falha isolada teria colapsado a v1. Cada uma amplificou as outras. Choques de gradiente (1) sem aquecimento (2) atingiram um modelo recém-inicializado com pesos arbitrariamente grandes (3), produzindo repetição que o bandido recompensou (5), enquanto ninguém estava observando a saída (4). Cinco causas interseccionais, um colapso.
Por Que Cinco Falhas, Não Uma
Uma Correção Por Falha
Configuração v2 (2026-04-15)
| Correção | Visa falha | Implementação |
|---|---|---|
| Clipagem de gradiente | F1 (sem clipagem) | Norma L2 global, max_norm=1.0; três kernels CUDA (k_grad_norm_partial, k_grad_norm_final, k_grad_scale) computam e aplicam pré-Adam |
| Aquecimento de LR | F2 (sem aquecimento) | Rampa linear de 0 ao pico em 2000 passos. lr(t) = lr_scheduled(t) * min(1, (t+1)/warmup_steps) |
| AdamW | F3 (sem weight decay) | Decoupled weight decay (Loshchilov & Hutter 2019), weight_decay=0.01. p -= lr (m_hat/(sqrt(v_hat)+eps) + weight_decayp) |
| Coherence-gated early stopping | F4 (sem monitoramento) | Pontuar cada amostra (diversidade bigram/trigram/palavra/char). Parada automática após 5 amostras consecutivas com pontuação abaixo de 30 |
| Curriculum warmup | F5 (bandit come repetição) | Primeiros 20K passos restritos a 7 fontes de chat/prosa; firehose ativa depois; repo-docstrings excluídos inteiramente |
Além disso, sample_every reduzido de 200 para 100 passos (cadência de auditoria dobrada), & limite de repo-docs reduzido de 0.5 para 0.3.
Back-Test
Coherence gate back-testado na v1: teria disparado no passo 132K, economizando 3.8 dias de compute. O gate sozinho teria cortado ~30% do compute desperdiçado da v1; as outras quatro correções impedem que a v1 chegue a disparar o gate.
O que o v2 NÃO Consertou
Contaminação de dados. O v2 confiou em fontes hermes3-* como 'pré-limpos' porque vinham de um professor LLM. DEEP_CLEAN_SKIP no Makefile excluiu hermes3-general, hermes3-creative e hermes3-roleplay de make deep-clean. unfirehose-chat capturou prompts de sistema de agente como turnos de usuário. Esses dois defeitos esperavam na camada de dados, prontos para emergir.
Mapeando Consertos às Falhas
Passo 15K: Dois Defeitos de Dados Surgem
O que a v2 Viu
A v2 foi lançada em 2026-04-15. No passo ~15K de 200K (7,5% completo), as amostras produziram ornamentos de agente-harness (○ ●) & fallback de dominância de artigo (a = 26% das palavras no passo 14.966; the = 21% no passo 14.798). As cinco correções de estabilidade da v2 estavam funcionando corretamente. A falha havia se movido da arquitetura para os dados.
Dois Defeitos Independentes de Pipeline
Defeito A: unfirehose-chat capturou prompts de sistema de agente como turnos de usuário. O unfirehose-chat constrói a partir de arquivos JSONL de sessão de harness em ~/.claude/, ~/.fetch/, ~/.uncloseai/. O pipeline de ingestão converteu prompts de sistema de agente multi-seção (# Agent X, ## Identity, ## Rules, etc.) no slot de turno de usuário de pares > user / < assistant. O modelo aprendeu que 'usuários' falam em markdown multi-seção, & reproduziu esses ornamentos em suas próprias saídas.
Defeito B: hermes3-* contornou todos os filtros. DEEP_CLEAN_SKIP no Makefile excluiu hermes3-general, hermes3-creative e hermes3-roleplay do make deep-clean sob a falsa suposição de que dados destilados de LLM estavam pré-limpos. Uma varredura exaustiva mostrou que os filtros existentes, quando aplicados, rejeitariam 87-93% das linhas hermes3 (parágrafos oversized >2000 chars transbordando block_size=1024; respostas de tradução em CJK/Cyrillic/Árabe; execuções de baixa diversidade bigram).
Patch v2.5 (commit de24332, 2026-04-18)
Duas mudanças estruturais.
Mudança 1: has_system_prompt_shape() em filter-dataset.c. Detecta prompts de sistema vazados por FORMA, não por correspondência de caracteres. Três sinais combinados:
1. 3+ cabeçalhos markdown em um turno = descartar.
2. 2+ cabeçalhos com comprimento de turno >=500 caracteres = descartar.
3. Frases de impressão digital de shard do agente (# Agent , Shadow Clone, Your shard, Read it. Become it, This file defines) combinadas com qualquer cabeçalho ou comprimento >=400 = descartar.
Regra de isolamento: verifique o primeiro turno do usuário na separação / (com espaços, não / simples que fragmenta caminhos de URL) para evitar falsos positivos em markdown legítimo nas respostas do assistente.
Mudança 2: hermes3-* movido para fora de DEEP_CLEAN_SKIP. Não confie em nada não filtrado.
Taxas de Descarte Após o Patch
| fonte | in-lines | out-lines | descartadas |
|---|---|---|---|
| hermes3-general | 536,858 | 67,395 | 87.7% |
| hermes3-roleplay | 35,191 | 2,481 | 93.0% |
| hermes3-creative | 14,258 | 1,373 | 90.4% |
| unfirehose-chat | 3,816 | 2,653 | 30.5% |
| chat | 45.257 | 44.538 | 1,6% (ruído) |
| smoltalk | 11.812 | 11.812 | 0,0% |
Os filtros de linha de base já capturavam 87-93% da contaminação hermes3; DEEP_CLEAN_SKIP era o defeito estrutural principal. O novo detector de forma adiciona ~0,1% de rejeição adicional no geral, concentrado em unfirehose-chat, onde remove vazamentos específicos de agent-shard que os filtros existentes não detectam.
Por Que a Forma Supera o Caractere
Os ornamentos evoluem. Um filtro de correspondência de caractere que remove ○ não faz nada sobre ◇ na próxima semana. Um filtro baseado em forma (contar cabeçalhos, contar caracteres, reconhecer frases de impressão digital) generaliza entre variantes de ornamentos. Padrão: a detecção de contaminação deve usar heurísticas estruturais.
Por Que Filtrar Por Forma
Um Braço de Bandido sem Dados
v3 Lançado em 2026-04-18
Mesma arquitetura & hiperparâmetros que v2; dados limpos após o patch v2.5. Zero vazamentos de ornamentos em auditorias de amostra. v3 rodou limpo até o passo 112K.
Passo 112,619: Auditoria de Amostra Detecta um Padrão
A auditoria de amostra revelou turnos conversacionais coerentes (haiku, Q&A, diálogo), mas fases periódicas focadas em braços de conhecimento (gutenberg, repo-docstrings, repo-docs) vazaram fragmentos semelhantes a código e ruído de tokenização de repositório. Uma amostra no passo 112.080 atingiu perda 0.13: anormalmente baixa, sinalizando substrings memorizados de repo-docs em vez de distribuição de chat aprendida.
O Braço Zumbi
Diagnóstico: exclude_sources removeu corretamente repo-docstrings no início do treinamento, mas o estado persistente do bandit carregava um braço residual repo-docstrings com peso 1.546 de uma execução anterior. A recarga do estado o reintegrou ao pool UCB, mesmo sem um .btok existente para amostrar, produzindo uma puxada zumbi que distorceu a contabilidade de exploração.
Lições: arquivos de estado do bandit (.state.json) derivam de maneiras surpreendentes entre reinicializações. Exclusões de configuração não apagam memória residual de braços. Cinto e suspensórios necessários: cap = 0.0 junto com exclude.
Configuração Polonesa
Perturbação apenas no currículo. Arquitetura, estado do otimizador, cronograma de taxa de aprendizado e histórico de perda todos preservados de step_112600.bin.
| Fonte | v3 base | v3 polish |
|---|---|---|
| repo-docs | cap 0.3 | excluído (cap 0.0) |
| repo-docstrings | excluído | excluído + cap 0.0 |
| repo-commits | cap 0.4 | cap 0.2 |
| dictionary | cap 0.5 | cap 0.25 |
| gutenberg | cap 0.8 / floor 0.3 | cap 0.7 / floor 0.4 |
| irc-qa-strict | -- | cap 0.3 |
| unweapon | -- | cap 0.3 |
| synthetic-chat | -- | cap 0.4 |
| hermes3-general | floor 0.5 | floor 0.7 |
| hermes3-creative | floor 0.4 | floor 0.55 |
| hermes3-roleplay | floor 0.4 | floor 0.5 |
| chat | floor 0.4 | floor 0.6 |
| smoltalk | floor 0.3 | floor 0.5 |
| oasst | floor 0.3 | floor 0.5 |
| dolly | -- | floor 0.4 |
| curriculum_warmup_steps | 20000 | 0 |
Protocolo Polonês
1. SIGUSR1 para CUDA força checkpoint imediato na próxima fronteira de 100 passos.
2. Proxy para.
3. .samples.json & .state.json arquivados (log de amostras & estado do bandit salvos como registro histórico).
4. .loss.json retido -- histórico cumulativo de treinamento; nunca arquivado.
5. Proxy reinicia. Configuração Polish enviada.
6. CUDA retoma de step_112600.bin com estado fresco do bandit sob novos limites & pisos.
Histórico de perda continua ininterrupto.
Por que Polir, Não Reiniciar
O que o Polimento Produziu
Auditoria de Amostra, Horas Após o Pivô
Em poucas horas após a virada polonesa, a auditoria de amostra confirmou a convergência nos quatro objetivos originais do ANDREA-120M.
Recordação factual (biologia), passo 112.584, perda 0.30, ppl 1.
> [extinction prompt]
> < black spider montano is alive, carolina parakeet is extinct.
Dois fatos corretos. Avaliação externa: 9.5/10.
Recordação factual (processamento de sinal), passo 112.668, perda 0.74, ppl 2.
> [Prompt da transformada de Fourier]
> < A transformada de Fourier decompõe sinais em componentes de frequência, permitindo a análise das características do sinal & filtragem no domínio da frequência.
Definição de um frase do livro didático. Avaliação externa: 9.5/10.
Seguimento de restrições (haiku), passo 112,248, perda 1.05, ppl 3.
> Escreva um haiku sobre chuva usando três palavras que começam com 'r'.
> < Refrão rítmico da chuva, Riachos na janela, Respiro da dor da vida.
Conhecimento de ferramentas (Python), passo 112.500, perda 1,94, ppl 7.
> Como encontro pacotes desatualizados em um projeto Python?
> < Use pip list --outdated names to see the pip packages list in your project management...
Ferramenta correta emerge; formulação imprecisa.
Seis Domínios em 700 Passos
Biologia, processamento de sinais, poesia, ferramentas python, diálogo conversacional, diálogo de operações. Seis domínios não relacionados em 700 passos nos diz que o bandit & modelo estão trabalhando em conjunto. A amplitude de domínios É o sinal de convergência.
Avaliação Externa
Revisor independente classificou amostras como 'sólidas para um modelo de 120M parâmetros -- coerência impressionante & retenção de conhecimento nessa escala', com as amostras do periquito-da-carolina & transformada de Fourier classificadas 9.5/10 & 'superando seu peso em tarefas de conhecimento'.
O Que Cada Fase Ensinou
v1 ensinou: cinco falhas compostas colapsam o treinamento. Nenhuma correção isolada salva; todas as cinco devem acertar de uma vez.
v2 ensinou: correções arquiteturais são necessárias, mas não suficientes. A camada de dados pode derrotá-las silenciosamente.
v2.5 ensinou: filtrar contaminação por forma, não por caractere. Padrões são estáveis; símbolos evoluem.
v3 base ensinou: o estado de bandido deriva entre reinicializações de maneiras surpreendentes. Exclusões isoladas não bastam; limite 0.0 cinto-e-suspensórios é necessário.
v3 polish ensinou: quando a falha está na política & o modelo está saudável, perturbe a política. Mantenha os pesos. Mantenha o histórico de perda. Avance.
Uma Verdade
A convergência não é um evento único; é uma cadeia de correções. Cada fase expôs um defeito, corrigiu-o e revelou o próximo. ANDREA-120M lê 9.5/10 no passo 112.584 porque v1, v2, v2.5, v3 base e v3 polish cada um fez seu trabalho.