Antevisão · Latent Rehearsal
05

O leme
e o modelo de mundo

A peça central em três versões — a que só apontava, a que aponta melhor, e a que imagina — com o que cada uma custou e comprou. As células vazias esperam rodadas que estão na fila; nenhuma será preenchida de cabeça.

Apostila 05 Pré-requisito: 03 (geometria) e 09 (a arquitetura)

1 Três versões da mesma pergunta

A pergunta é uma só: o modelo sabe para onde vai antes de ir? Cada versão responde de um jeito, e cada uma foi medida contra a anterior no mesmo protocolo (apostila 06): mesmos dados congelados, 700 passos, semente 1337, melhor checkpoint, controle = cosseno 1,0 com validação 5,2706.

As três versões. "Ganho" é sempre sobre o piso de identidade — copiar o estado atual — e não sobre o acaso.
VersãoO que prevêSabe a ação?ChaveEstado
v1 · leme rasoo embedding do próximo token, a partir de ztnão--latentmedido
v2 · leme profundoo estado oculto seguinte zt+1, a partir de ztnão--latent --latent-target ocultomedido
v3 · modelo de mundozt+1 a partir de (zt, at[, ζ, m])sim--world --sigreg-zprimeira rodada medida; as demais na fila
Por que a v3 existe

Um preditor que não sabe qual ação foi tomada só consegue prever a média dos futuros possíveis. É o borrão da palestra — "o sistema prevê a média de tudo que pode acontecer" — e é o que a v1 mediu: cosseno 0,534 com o alvo, contra 0,46 de copiar o estado. Ganho de 0,07. O modelo de mundo recebe a ação: "se eu emitir este token, onde vou parar?". É essa pergunta, e não a anterior, que permite planejar.

2 O que a v1 e a v2 mediram

Rodada "duelo". A coluna do leme é o cosseno entre previsão e alvo na validação, com o piso de identidade ao lado.
Rodadavalidaçãovs controleleme (piso)Leitura
controle reg15,2706——
v1 reg1-lat15,3447+1,41%0,534 (0,46)ganho +0,07 sobre o piso; custa qualidade
v2 reg1-lat1o5,2233−0,90%0,716 (0,48)melhora o gerador; PPL 185,55, a melhor de todas
v2 + Barlow reg1-lat1o-bar0.55,2442−0,50%—segunda a bater o controle
v2 + DINO reg1-lat1o-dino15,3804+2,08%0,703 (0,48)professor EMA, centering, sharpening: o leme acerta, o gerador piora (apostila 04)
v2 sobre SigReg sig1-lat1o5,3856+2,18%0,719 (0,48)a base fraca contamina a peça: por isso o teste limpo é sobre o controle

O resultado que organiza a apostila: prever o estado seguinte no latente ajuda o gerador (−0,90%, uma semente), e prever o embedding do token não ajuda (+1,41%). A diferença entre as duas é o alvo: o estado oculto carrega contexto; a linha da tabela de embedding, não. É a auto-destilação do DINO com stop-gradient no lugar do professor EMA — e a rodada com o professor de verdade disse: o EMA não compra — custa 3 pontos contra o stop-gradient, numa semente (apostila 04).

O termo aditivo na geração: um resultado negativo limpo

A primeira ideia de usar o leme era somar aos logits um termo α · cos(E[v], Pred(h)). O teste (evaluate_compass.py --only-alpha) mediu a perda de validação com três direções no lugar de Pred: a do preditor, a identidade (o próprio h) e uma direção aleatória. O preditor foi pior que a identidade, e a identidade pior que o aleatório. Somar uma direção aos logits piora, qualquer direção — porque distorce uma distribuição calibrada. Foi isso que condenou a inferência aditiva e motivou a energia (apostila 09): a direção prevista serve para escolher entre candidatos, não para reponderar todos.

3 O modelo de mundo, peça por peça

Cada peça da v3, a chave que a liga e a rodada que a testa. Todas aditivas; o controle de cada uma é a linha de cima.
PeçaO que fazChaveRodada
Preditor condicionado à açãoPred(zt, at) → zt+1, ponta a ponta, sem EMA--world 1wm1-sz1
SigReg nos estadoso anticolapso: os z não podem virar constantes--sigreg-z 1idem; controle wm1det (stop-grad, sem SigReg-z)
Hierarquianível 2 sobre blocos de 8: abstrair() + mundo2--world-levels 2wm1n2-sz1
Encoder de nível 2 aprendidomédia do bloco + correção residual--world-enc2wm1n2e-sz1
Variável latente ζfuturos múltiplos; canal estreito regularizado a N(0, I)--world-latent 16wm1n2z16-sz1
Memória persistentevetor m dobrado pelo que sai da janela--world-memorywm1n2mem-sz1
Dois estágios (DINO-WM)modelo de mundo sobre o encoder auto-destilado, congelado--base … --freeze-encoderwm-sobre-dino

A tabela que a fila vai preencher

Modelo de mundo, melhor checkpoint de cada rodada. "wm ganho" = piso − MSE (positivo: prever com a ação acerta mais do que copiar o estado). "n2" é o mesmo no nível 2. "custo" é a validação contra o controle: o modelo de mundo pode ajudar ou atrapalhar o gerador.
Rodadacusto (vs ctrl)wm ganhowm ganho n2memLeitura
wm1-sz1+9,59%+0,80——o mapa prevê (MSE 0,150 contra piso 0,948; cos 0,93 contra 0,58) e o gerador paga caro
wm1det (controle)+1,11%+0,87——stop-grad, sem SigReg-z: MSE 0,535 contra piso 1,406, cos 0,79 contra 0,51 — quase o mesmo mapa por oito pontos a menos
wm0.1-sz1 (peso 0,1)+3,25%+1,17——o peso explica a maior parte do custo: de +9,59% para +3,25%, com o mapa em MSE 0,670 contra piso 1,842 (cos 0,71 contra 0,33); ainda dois pontos acima do stop-grad
wm0.1n2-sz1-lat1o (a combinação)+3,05%+1,17+0,15—leme profundo (ganho +0,29 sobre o piso) + modelo de mundo hierárquico com peso 0,1: as três cabeças aprendem juntas, mas o gerador fica em +3,05% — o leme sozinho dava −0,90%; o modelo de mundo, mesmo leve, não devolve o que o leme comprava
wm1n2-sz1+8,78%+0,94+0,07—o nível 2 prevê o bloco seguinte: MSE 0,089 contra piso 0,160 — e prevê mais longe que o nível 1 rolado (apostila 11)
wm1n2e-sz1+6,93%+0,87+0,006 (piso 0,013)—colapso de escala no nível 2: o encoder aprendido encolheu os estados abstratos 13× (piso do bloco 0,160 → 0,013) e o acerto virou trivial — o risco previsto na apostila 09, realizado
wm1n2e-sz1-ss1 (+ SigReg nos estados abstratos)+11,32%+0,84+0,035 (piso 0,068)—o piso do bloco subiu de 0,013 para 0,068 (a média crua dá 0,160), mas os blocos consecutivos ficaram quase ortogonais (cos 0,07) e o gerador pagou o pior custo de todas: gaussianizar os estados abstratos não é o anticolapso certo para o nível 2
wm1n2en-sz1 (+ anticolapso só de escala)+6,22%+0,82+0,004 (piso 0,009)—colapso pela outra porta: com a norma fixada, o encoder mandou todos os blocos para a mesma direção (cosseno 1,000 entre blocos consecutivos). O encoder de nível 2 aprendido colapsa em escala, em direção, ou perde a continuidade — a média crua é a abstração honesta neste orçamento
wm1n2z16-sz1+7,00%+1,66 (com ζ do alvo)+0,24 (idem)—o canal vazou: com ζ inferido do alvo o mapa erra 0,038 (cos 0,98); com ζ amostrado, como na inferência, 1,258 (cos 0,28) — quase o piso de 1,671
wm1n2z16zd0.5-sz1 (ζ-dropout)+7,60%+0,96——o canal fechou: com ζ amostrado o mapa erra 0,222 (cos 0,88) contra piso 1,110 — o mapa passa a existir na inferência
wm1n2mem-sz1+7,77%+0,93+0,07+0,014a memória certa prevê melhor que a de outro texto, e a que atravessou uma janela inteira vale tanto quanto a recente (apostila 11)
wm-sobre-dino (dois estágios)= base
(+2,08%)
+0,80+0,024 (piso 0,062)—modelo de mundo sobre o encoder DINO congelado, 11 min de treino: MSE 0,665 contra piso 1,462 (cos 0,73 contra 0,49). Prevê menos que o ponta a ponta (0,15) e não custa nada ao gerador — o custo é o da base, por construção

A primeira rodada, lida

O wm1-sz1 fechou com os dois lados da moeda. O modelo de mundo funciona: erro 0,150 contra 0,948 de copiar o estado, cosseno 0,93 contra 0,58 — e entende sequência, como mostra a violação de expectativa abaixo. Mas a validação foi a 5,7761, +9,59% sobre o controle: o pior custo de qualidade de todas as rodadas. A hipótese, escrita antes do controle fechar: com peso 1,0 e treino ponta a ponta, o encoder molda os estados para serem previsíveis a partir da ação — um atalho — e perde o que a entropia cruzada precisa. O wm1det (alvo com stop-gradient, sem SigReg-z) separa as duas coisas; no passo 99 já estava 0,63 nats abaixo do wm1-sz1 no mesmo passo. Pela regra da casa, a resposta não é descartar: duas rodadas com peso 0,1 (wm0.1-sz1 e wm0.1n2-sz1-lat1o, a combinação com o leme profundo) entraram na fila.

Violação de expectativa (surprise.py), wm1-sz1: 48 sequências de 128 tokens, a violação começa no token 64; erro do modelo de mundo só na segunda metade. A última coluna é o que importa: quanto o erro sobe além do que a identidade sobe.
Continuaçãoerro do mapavs realidentidadevs realmapa − identidade
real (coerente)0,145—0,943——
2ª metade de outro documento0,172+18,6%0,953+1,0%+17,6%
embaralhada0,205+40,9%0,987+4,7%+36,3%
invertida (mesmos tokens, ordem errada)0,192+32,3%0,914−3,1%+35,3%

É a bola que some do vídeo, em texto: a mesma frase de trás para a frente faz o erro do mapa subir 32% enquanto a identidade nem nota (−3%). O modelo de mundo aprendeu algo sobre a dinâmica do texto que copiar o estado não captura — o primeiro "senso comum" medido neste projeto, e ele veio na rodada que mais custou ao gerador.

A variável latente, lida

O wm1n2z16-sz1 teve o menor custo das rodadas ponta a ponta (+7,00%) e o maior ganho de mapa da tabela — e o ganho é falso. O ζ é lido do alvo por um canal de 16 dimensões, regularizado por SigReg para ser N(0, I); a aposta era que um canal estreito e gaussiano só carregasse "qual futuro", não "o futuro inteiro". Medido na validação, com os mesmos estados:

O mesmo mapa, quatro fontes de ζ. 32 sequências de 256 tokens. A linha da inferência é a que vale.
ζMSEcos
inferido do alvo (como no treino)0,0380,984
zero0,8890,521
amostrado de N(0, I) (como na inferência)1,2580,278
de outra sequência1,6820,203
piso: copiar zt1,6710,289

Com o ζ que a inferência tem, o mapa é o piso. O canal carregou o alvo — e o SigReg nos ζ não fechou o canal: a média ficou em 0,00 mas o desvio em 1,44 e a norma em 5,7 (N(0, I) daria 1,0 e 4,0). O sintoma aparece em tudo que usa ζ = 0: a violação de expectativa some (+3 / −4 / −1 além da identidade, contra +25 / +41 / +39 do wm1n2-sz1) e o nível 2 fica pior que copiar o bloco. É o colapso da palestra por outra porta: não a representação constante, mas a predição trivial por um atalho. A correção está na fila: ζ-dropout (--world-latent-dropout 0.5) — metade dos lotes com ζ amostrado, para o preditor ter que funcionar sem o alvo, e ζ só poder carregar o que uma amostra também carregaria. Enquanto isso, o leme desse modelo governa mesmo assim (apostila 12: 0,383 contra 0,265 da livre), porque o planejador amostra ζ e o custo no estado real não depende do mapa.

A correção, medida: wm1n2z16zd0.5-sz1, metade dos lotes com ζ amostrado. Mesmas 32 sequências, mesmas quatro fontes de ζ.
ζsem dropout: MSE (cos)com dropout 0,5: MSE (cos)
inferido do alvo0,038 (0,984)0,144 (0,925)
zero0,889 (0,521)0,201 (0,892)
amostrado de N(0, I)1,260 (0,280)0,222 (0,879)
de outra sequência1,682 (0,203)0,214 (0,884)
piso1,671 (0,289)1,110 (0,430)
ζ: desvio / norma1,44 / 5,700,70 / 2,75

O ζ-dropout fechou o canal. Com ζ amostrado, como na inferência, o mapa erra 0,222 contra 1,110 do piso — antes errava 1,260 contra 1,671, isto é, nada. A diferença entre ζ inferido e ζ amostrado caiu de 33× para 1,5×: o que ζ ainda carrega é a escolha entre futuros, não o futuro. O custo ao gerador ficou o mesmo (+7,60% contra +7,00%). E o ζ chegou mais perto de N(0, I) (desvio 0,70, norma 2,75) — o SigReg nos ζ passa a ter efeito quando o preditor não pode mais depender deles. A violação de expectativa voltou junto: com ζ = 0, +22,6 / +31,4 / +30,4 além da identidade (contra +3 / −4 / −1 no canal vazado) — o mapa entende sequência de novo. E a apostila 12 fecha o ciclo: nesse mapa o leme governa nos dois eixos (0,324 contra 0,243, PPL 51,7 contra 62,6).

Os dois estágios, lidos

A receita da fala — "use o DINO como encoder, depois treine um modelo de mundo e planeje" — é o wm-sobre-dino: o encoder da rodada reg1-dino1-lat1o congelado, só as cabeças do modelo de mundo aprendendo, 532 mil parâmetros, onze minutos. O mapa sai pior que o ponta a ponta (MSE 0,665 contra 0,15; cosseno 0,73 contra 0,93) e melhor que o piso com folga (+0,80). O que ele compra é o que nenhuma rodada ponta a ponta comprou: custo zero ao gerador, porque o gerador não é tocado. É o par oposto do wm1-sz1: lá o mapa é excelente e o gerador paga 9,59%; aqui o mapa é bom e o gerador não paga nada. Entre os dois, o wm1det (+1,11%, cosseno 0,79). A escolha entre eles é a escolha entre um mapa mais preciso e um gerador intacto — e a apostila 12 diz que, para governar, o mapa não precisa ser o mais preciso: neste, o leme dá 0,436 contra 0,281 da livre, o maior efeito de todos os mapas. A violação de expectativa também está lá (+10,1 / +31,6 / +32,7 além da identidade): o mapa treinado em onze minutos sobre um encoder que nunca viu um modelo de mundo entende sequência.

O controle, lido

O wm1det — o mesmo modelo de mundo com o alvo sem gradiente e sem SigReg nos estados, o "atalho antigo" que a receita do LeWorldModel dispensa — fechou em 5,3291, +1,11%, com ganho do mapa +0,87 sobre o piso (MSE 0,535 contra 1,406; cosseno 0,79 contra 0,51). Contra o wm1-sz1: oito pontos percentuais a menos de custo, e um mapa que prevê quase tão bem. O critério (2) da caixa abaixo disparou: o treino ponta a ponta com SigReg-z, com peso 1,0, não paga o que custa neste modelo. O que ele compra é um espaço mais previsível (cosseno 0,93 contra 0,79) — e a apostila 12 mostra que esse espaço governa quando o custo tem escala; o que ele cobra é o gerador. Duas leituras honestas cabem ao mesmo tempo: o stop-gradient não colapsou (o piso de identidade continua longe do erro do mapa, e o SigReg dos estados, medido sem treinar, ficou em 10× o piso gaussiano contra 12,8× do wm1-sz1), e a receita ponta a ponta pode estar certa com o peso errado. O wm0.1-sz1 disse: com peso 0,1 o custo cai de +9,59% para +3,25%, e o mapa continua ganhando do piso (+1,17, cosseno 0,71 contra 0,33). O peso era a maior parte da conta; os dois pontos que sobram entre 0,1 ponta a ponta e o stop-grad são o preço do SigReg nos estados, que ainda não se pagou em nenhuma rodada. A violação de expectativa no wm1det dá o mesmo desenho, um pouco mais fraco: outro documento +10,7%, embaralhada +26,0%, invertida +27,7% além da identidade (contra +17,6 / +36,3 / +35,3 do wm1-sz1, +25,0 / +41,3 / +39,3 do wm1n2-sz1 e +16,0 / +41,4 / +39,4 do wm1n2e-sz1). Com peso 0,1 (wm0.1-sz1): +9,4 / +20,1 / +22,8 — o mapa mais leve entende menos sequência, na mesma ordem. Todos os mapas de nível 1 entendem sequência; só o do ζ vazado, com ζ amostrado, não.

O que invalidaria a v3

Três resultados, qualquer um deles: (1) wm ganho ≈ 0 em todas as rodadas — o modelo de mundo não prevê melhor que copiar o estado, e a ação não acrescenta nada em texto; (2) wm1det igual ou melhor que wm1-sz1 — o SigReg nos estados não faz o papel que a receita do LeWorldModel lhe dá; (3) um custo de qualidade acima do que o leme profundo devolve (−0,90%) — aí o modelo de mundo paga para existir, e a apostila 00 muda a linha "a única peça que melhorou o gerador". Os três estão escritos antes do número, para o número não escolher a pergunta.

4 Inferência: como o leme vira leme

Com o modelo de mundo treinado, a geração muda de natureza: em vez de somar um viés (o resultado negativo do §2), o sistema imagina cada candidato e escolhe pela energia. Os modos, todos selecionáveis no painel «Antevisão · leme» (apostila 09 e 10):

Os modos de inferência. A energia sempre tem a forma guardrail + tarefa; o que muda é onde a busca acontece.
ModoOnde buscaCusto por token (fumaça, CPU)O conceito que realiza
additivenão busca: soma β·cos aos logits~0o controle negativo
energyfeixe no latente, ramificando por tokens0,05 sMPC em miniatura; "gerar muitas sequências e escolher"
gradientuma ação contínua, um passo0,4 sinferência por otimização, forma literal
mpcsequência de H ações contínuas; compromisso por energia sobre os candidatos0,8 s"raciocinar no espaço mental, não no de saída"

E por cima dos modos, três chaves da leitura de LeCun: o custo da tarefa e os guardrails podem ser cabeças aprendidas com três frases (costs.py); o nível 2 pode planejar a própria ação abstrata (plan2_steps); e o planejador pode ficar quieto quando o modelo não tem dúvida (plan_if_entropy). A comparação de tudo isso num modelo treinado é a apostila 12.

A tabela do teste cruzado

O teste de evaluate_compass.py: três rumos × quatro prompts. Para cada geração, a afinidade com cada rumo (vizinhança nos 400 tokens mais próximos) e a perplexidade do texto gerado. Um leme funciona se a diagonal da matriz de afinidade domina e a perplexidade não explode.

wm1-sz1, modo energy, β = 8, horizonte 3. Linhas: rumo pedido. Colunas: afinidade medida com cada rumo (vizinhança nos 400 tokens mais próximos, no próprio embedding). Última coluna: PPL do gerado.
Rumo pedidoafinidade: códigofutebolhistóriaPPL
código0,1460,0020,17911,0
futebol0,1290,0000,25013,5
história0,1290,0020,25213,7

Efeito (diagonal − fora da diagonal): +0,017 com β = 8; 0,000 com β = 16. O leme, com o custo de cosseno ao rumo, não governa este modelo: as três linhas são quase iguais, e com β = 16 são idênticas — o planejador escolhe sempre o mesmo candidato, o de maior probabilidade, porque a energia da tarefa não distingue os candidatos. O mapa prevê bem e o custo não aponta. É exatamente a lacuna que a cabeça de custo aprendida (apostila 12) foi feita para fechar; a tabela dos modos, com o juiz independente, diz se fecha.

5 A correção do mapa

Quando o plano não dá o resultado previsto, o que se corrige é o modelo de mundo (apostila 09, §3.3). O teste de fumaça, num modelo de mundo de dois passos, deu razão surpresa/piso de 0,907 → 0,719 num conjunto separado. O número que vale é o mesmo teste num modelo treinado, onde o mapa já é bom e a margem é pequena:

correct_world.py --finetune sobre wm1n2-sz1, 16 sequências reais + 16 geradas, 300 passos só nas cabeças do mapa. Razão surpresa/piso: menor que 1 = o mapa prevê melhor que copiar o estado. (No wm1-sz1, antes: real 0,177, gerado 0,165, teste 0,167.)
Conjuntoantesdepois
texto real0,161—
texto gerado (visto na correção)0,1490,095
teste separado0,1610,159

O que a fumaça previu, aconteceu: com o mapa já em 0,16, a correção decorou as próprias trajetórias (0,149 → 0,095 no gerado) e não generalizou (0,161 → 0,159 no teste). É o "overfitting do crítico" que a fala manda vigiar, e ele aparece exatamente onde a margem é pequena. O laço está certo e o critério de leitura também; o que este mapa não tem é erro sistemático para corrigir.

Analogia

O leme raso é um cata-vento: mostra para onde o vento sopra, e só. O leme profundo é um cata-vento que conhece o barco: mostra para onde o barco vai. O modelo de mundo é o piloto que pergunta "e se eu virar para bombordo?" antes de virar — e que, quando o barco não vai para onde ele previu, corrige a carta, não o timão.

Perguntas em aberto

A apostila 06 conta como todos esses números foram medidos — e os onze erros que o método pegou no caminho.