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.
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.
| Versão | O que prevê | Sabe a ação? | Chave | Estado |
|---|---|---|---|---|
| v1 · leme raso | o embedding do próximo token, a partir de | não | --latent | medido |
| v2 · leme profundo | o estado oculto seguinte | não | --latent --latent-target oculto | medido |
| v3 · modelo de mundo | sim | --world --sigreg-z | primeira rodada medida; as demais na fila |
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.
| Rodada | validação | vs controle | leme (piso) | Leitura |
|---|---|---|---|---|
controle reg1 | 5,2706 | — | — | |
v1 reg1-lat1 | 5,3447 | +1,41% | 0,534 (0,46) | ganho +0,07 sobre o piso; custa qualidade |
v2 reg1-lat1o | 5,2233 | −0,90% | 0,716 (0,48) | melhora o gerador; PPL 185,55, a melhor de todas |
v2 + Barlow reg1-lat1o-bar0.5 | 5,2442 | −0,50% | — | segunda a bater o controle |
v2 + DINO reg1-lat1o-dino1 | 5,3804 | +2,08% | 0,703 (0,48) | professor EMA, centering, sharpening: o leme acerta, o gerador piora (apostila 04) |
v2 sobre SigReg sig1-lat1o | 5,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).
A primeira ideia de usar o leme era somar aos logits um termo α · cos(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
| Peça | O que faz | Chave | Rodada |
|---|---|---|---|
| Preditor condicionado à ação | Pred( | --world 1 | wm1-sz1 |
| SigReg nos estados | o anticolapso: os | --sigreg-z 1 | idem; controle wm1det (stop-grad, sem SigReg-z) |
| Hierarquia | nível 2 sobre blocos de 8: abstrair() + mundo2 | --world-levels 2 | wm1n2-sz1 |
| Encoder de nível 2 aprendido | média do bloco + correção residual | --world-enc2 | wm1n2e-sz1 |
| Variável latente ζ | futuros múltiplos; canal estreito regularizado a N(0, I) | --world-latent 16 | wm1n2z16-sz1 |
| Memória persistente | vetor | --world-memory | wm1n2mem-sz1 |
| Dois estágios (DINO-WM) | modelo de mundo sobre o encoder auto-destilado, congelado | --base … --freeze-encoder | wm-sobre-dino |
| Rodada | custo (vs ctrl) | wm ganho | wm ganho n2 | mem | Leitura |
|---|---|---|---|---|---|
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,014 | a 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 |
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.
| Continuação | erro do mapa | vs real | identidade | vs real | mapa − identidade |
|---|---|---|---|---|---|
| real (coerente) | 0,145 | — | 0,943 | — | — |
| 2ª metade de outro documento | 0,172 | +18,6% | 0,953 | +1,0% | +17,6% |
| embaralhada | 0,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.
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:
| ζ | MSE | cos |
|---|---|---|
| inferido do alvo (como no treino) | 0,038 | 0,984 |
| zero | 0,889 | 0,521 |
| amostrado de N(0, I) (como na inferência) | 1,258 | 0,278 |
| de outra sequência | 1,682 | 0,203 |
| piso: copiar | 1,671 | 0,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.
| ζ | sem dropout: MSE (cos) | com dropout 0,5: MSE (cos) |
|---|---|---|
| inferido do alvo | 0,038 (0,984) | 0,144 (0,925) |
| zero | 0,889 (0,521) | 0,201 (0,892) |
| amostrado de N(0, I) | 1,260 (0,280) | 0,222 (0,879) |
| de outra sequência | 1,682 (0,203) | 0,214 (0,884) |
| piso | 1,671 (0,289) | 1,110 (0,430) |
| ζ: desvio / norma | 1,44 / 5,70 | 0,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).
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 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.
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.
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):
| Modo | Onde busca | Custo por token (fumaça, CPU) | O conceito que realiza |
|---|---|---|---|
additive | não busca: soma β·cos aos logits | ~0 | o controle negativo |
energy | feixe no latente, ramificando por tokens | 0,05 s | MPC em miniatura; "gerar muitas sequências e escolher" |
gradient | uma ação contínua, um passo | 0,4 s | inferência por otimização, forma literal |
mpc | sequência de H ações contínuas; compromisso por energia sobre os candidatos | 0,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.
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.
| Rumo pedido | afinidade: código | futebol | história | PPL |
|---|---|---|---|---|
| código | 0,146 | 0,002 | 0,179 | 11,0 |
| futebol | 0,129 | 0,000 | 0,250 | 13,5 |
| história | 0,129 | 0,002 | 0,252 | 13,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.
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:
| Conjunto | antes | depois |
|---|---|---|
| texto real | 0,161 | — |
| texto gerado (visto na correção) | 0,149 | 0,095 |
| teste separado | 0,161 | 0,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.
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.
wm0.1n2-sz1-lat1o) ficou em +3,05%: o modelo de mundo, mesmo leve, come o ganho do leme. A pergunta que sobra é o peso: 0,01, ou o modelo de mundo treinado em dois estágios sobre o leme profundo congelado (--base … --freeze-encoder), que não toca o gerador por construção.A apostila 06 conta como todos esses números foram medidos — e os onze erros que o método pegou no caminho.