Espaço Latente
Um espaço latente é o espaço em que uma rede descreve de novo os seus dados: uma lista de números por entrada que ninguém rotulou, aprendida porque a perda precisava dela. Quase todo capítulo deste curso constrói um. O último mapa de features de uma CNN, o embedding de um token, o residual stream de um Transformer, o espaço compartilhado do CLIP, o código de um VAE, a grade 64 × 64 × 4 em que o Stable Diffusion roda, o estado de um modelo de mundo: todos são espaços latentes e cada um é moldado por uma perda diferente. Esta página reúne o que os capítulos dizem sobre eles e depois olha de perto os quatro capítulos que não tratam de outra coisa. A página de embedding olha os mesmos espaços pelo lado dos vetores.
O latente de cada capítulo
| Capítulo | O latente | Tamanho no curso | O que o molda |
|---|---|---|---|
| Dados · redução de dimensionalidade | coordenadas de PCA, t-SNE e UMAP | dígitos 64 → 2 | variância (PCA), vizinhanças (t-SNE, UMAP) |
| Redes Convolucionais | os mapas de features | 1 × 28 × 28 → 64 × 7 × 7 → 64 | a perda de classificação |
| Atenção · embeddings | uma linha por token | GPT-2: 50.257 × 768 | prever o próximo token |
| Transformers | o residual stream | \(n \times d\) em todo bloco | prever o próximo token |
| Vision Transformers | um token por patch | 197 × 768 no ViT-B/16 | classificação ou auto-supervisão |
| Transfer Learning | a saída de um encoder congelado | 768 no DistilBERT | o pré-treino de outra pessoa |
| CLIP | um espaço comum a imagens e textos | 512, vetores unitários | a perda contrastiva |
| Autoencoders Variacionais | uma gaussiana por entrada | 64 × 64 × 4 no SD 1.5 | reconstrução + β · KL |
| GANs | o ruído \(z\) que entra no gerador | 1 ou 2 no simulador, 64 no lab | o discriminador |
| Stable Diffusion | a grade do VAE, sem ruído | 4 × 64 × 64 | um autoencoder congelado |
| Diffusion Transformers | essa grade, cortada em tokens | 4.096 tokens em 1024² | o mesmo |
| Geração Autorregressiva | uma grade de índices de codebook | 16 × 16 inteiros | reconstrução + perdas do codebook |
| JEPA | o embedding da parte escondida | um vetor por patch | previsão no espaço de embeddings + um termo anticolapso |
| Modelos de Mundo | o estado do agente | \(z \in \mathbb R^{32}\) no V–M–C | reconstrução, recompensa ou previsão |
| TDWM | vetores unitários, um por quadro | a esfera unitária | o tempo |
Todas as técnicas num mapa só
Todas as técnicas que esta página cita, em cinco famílias. Clique numa caixa para ver o que é o latente dela, o tamanho e o que o molda, com um link para o capítulo. Avançar percorre as sete ligações numeradas entre VAE, JEPA, modelos de mundo e TDWM que as últimas seções da página destrincham.
Por que um latente pode ser pequeno e por que pode ser grande
Pequeno. Os dados não ocupam o espaço em que estão escritos. A página da maldição da dimensionalidade estima a dimensão intrínseca do MNIST em cerca de 12 a 15 (não 784) e o capítulo de redes profundas apresenta o autoencoder como a arquitetura que aposta que os dados vivem numa variedade de dimensão menor. Uma projeção reta não acompanha uma variedade curva: na mola da página de redução o PCA põe 72% dos vizinhos no lugar errado e o t-SNE 1%. É o argumento a favor de latentes aprendidos e não lineares.
Grande. O espaço de muitas dimensões é espaçoso. O cosseno entre duas direções aleatórias tem média zero e desvio padrão \(1/\sqrt d\): com \(d = 1000\), 99% dos pares têm \(|\cos\theta| < 0.082\) (A4 · Tudo fica ortogonal). Direções quase ortogonais saem baratas e é por isso que um embedding de 768 dimensões carrega muito mais do que 768 coisas distinguíveis.
Visto. Um latente só se vê por uma projeção e cada projeção mente de um jeito. O quadro "sete coisas que não se pode dizer sobre um gráfico de t-SNE ou UMAP", da página de redução, vale para qualquer gráfico de embeddings: em ruído uniforme de 20 dimensões a silhueta é 0.042 e no mapa do t-SNE ela vira 0.333.
Features: o espaço que um classificador constrói
Uma CNN troca resolução por canais: o tensor fica menor enquanto o que ele descreve fica mais rico (1 × 28 × 28 → 64 × 7 × 7, depois um vetor de 64 após o global average pooling). O que a última camada lê é um latente e o capítulo de transfer learning o mede com uma sonda linear: 1.538 parâmetros treináveis sobre um DistilBERT congelado, que só consegue traçar um hiperplano no espaço que o encoder já construiu. A sonda é o teste padrão de um latente no curso; ela volta no ViT, no CLIP, no JEPA e no TDWM. Features congeladas também economizam: podem ser calculadas uma vez e guardadas.
Embeddings: de nomes a vetores
Um id de token é um nome: o id 4 (␣climb) não é o dobro do id 2 (␣cat). A camada de embedding transforma cada nome numa linha aprendida de \(E \in \mathbb R^{V \times d}\) — 50.257 linhas de 768 números no GPT-2, 38.6 milhões de parâmetros, 31% do modelo. Numa tabela treinada nenhuma coluna se lê sozinha: o que uma dimensão quer dizer está espalhado por muitas. A linha é a mesma sejam quais forem os vizinhos e é essa a limitação que a atenção resolve: no exemplo de "banco" o embedding dá aos dois sentidos o mesmo vetor e a atenção devolve um vetor por token, agora com contexto.
Dentro do Transformer o latente mantém uma forma só (\(n \times d\)) do primeiro ao último bloco e cada bloco apenas soma uma correção a ele — o residual stream. No fim, o unembedding o lê com uma direção por token: a coluna \(j\) é uma direção do espaço de \(d\) dimensões que favorece o token \(j\). Amarrar essa matriz à tabela de embeddings funciona porque as duas falam do mesmo espaço. E o capítulo de LLMs explica por que o espaço tem estrutura: comprimir texto nessa escala obriga a modelar o que o produziu.
Espaços compartilhados: o CLIP
O CLIP põe imagens e frases num único espaço vetorial (512 números na esfera unitária) e esse espaço compartilhado é todo o compromisso da arquitetura. A classificação zero-shot vira um classificador linear cujos pesos foram digitados em vez de aprendidos. O espaço é menos compartilhado do que parece — o gap entre modalidades: o cosseno imagem–imagem é 0.755, prompt–prompt 0.671 e imagem–o próprio prompt só 0.258; um classificador linear separa imagens de legendas em 100% dos casos.
A mesma ideia mede geradores. O FID compara duas gaussianas ajustadas no espaço de features de 2048 dimensões do Inception; BERTScore e MAUVE comparam textos num espaço de embeddings; o CLIPScore compara uma imagem com o prompt no espaço do CLIP — e herda os pontos cegos dele: "um cubo vermelho sobre uma esfera azul" e "um cubo azul sobre uma esfera vermelha" viram quase o mesmo embedding.
Latentes generativos
- Um código com buracos. O latente de um autoencoder é cheio de buracos que não se veem; o VAE os preenche com uma gaussiana por entrada e puxa todas para \(\mathcal N(0, I)\). A sobreposição dessas gaussianas é o que preenche o espaço entre os exemplos de treino. Com β → 0, cerca de 90% das amostras do prior decodificam em nada (o β é a história inteira).
- Um latente com pontes. Uma GAN leva um espaço latente conexo num conjunto conexo, então precisa esticar pontes finas entre modos separados: com um latente de uma dimensão o gerador cobriu 2 de 8 modos e 57% das amostras caíram fora dos dados. O espaço \(\mathcal W\) do StyleGAN é o único lugar do curso em que direções querem dizer atributos — idade, pose, expressão — e editar vira aritmética de vetores (a linhagem).
- Um latente que é uma imagem pequena. A difusão latente roda na grade 4 × 64 × 64 de um VAE: 786.432 números viram 16.384, 48× menos (\(8 \times 8\) por lado, vezes 3/4 pelos canais). O autoencoder cuida do detalhe perceptual; o modelo de difusão cuida da semântica e da composição. Os 4 canais viraram 16 no SD3 e no FLUX (para que serve um VAE). O guidance mostra quanto custa sair da variedade dos dados no latente: 1% das amostras fora dela com \(w = 3\), 17% com \(w = 10\), 63% com \(w = 15\).
- Um latente cortado em tokens. O DiT faz o patchify da grade: 4 × 32 × 32 com \(p = 2\) dá 256 tokens; os 16 × 128 × 128 do SD3 dão 4.096. O vídeo acrescenta o tempo: um VAE 3-D comprime 4× no tempo e 8 × 8 no espaço. O flow matching move partículas nesse mesmo latente.
- Um latente de inteiros. A geração autorregressiva prende a grade a um codebook: 256 tokens de 14 bits são 3.584 bits, cerca de 450 bytes, para uma imagem de 196.608 números. A falha é um codebook quase sem uso — o VQGAN original usava 3.4% de 16.384 códigos (treinar um quantizador) — e o MAR dispensa o quantizador porque tudo o que fica entre as entradas do codebook é irrepresentável.
VAE, JEPA, modelos de mundo e TDWM de perto
Quatro capítulos só tratam do latente: o que ele deve guardar e o que o impede de não guardar nada? O VAE responde com pixels e um prior gaussiano. O JEPA responde com embeddings e uma defesa contra o colapso. Os modelos de mundo acrescentam a ação e usam o latente para planejar. O TDWM deixa o tempo decidir quais quadros devem se parecer. Três descendem uns dos outros e o VAE está na raiz de duas das ligações.
As ligações numeradas de 1 a 7 do mapa acima são as que esta seção destrincha.
Um esqueleto, quatro objetivos
Todo modelo do mapa tem um encoder, um latente e alguma coisa treinada em cima dele. O que muda é o que a perda compara e o que impede o latente de colapsar numa constante:
| VAE | JEPA (I-JEPA) | Modelo de mundo | TDWM | |
|---|---|---|---|---|
| Encoder | \(x \mapsto q_\phi(z \mid x)\), uma gaussiana | contexto \(\mapsto s_x\); uma cópia EMA codifica o alvo, \(s_y\) | \(o_t \mapsto z_t\) | \(o_t \mapsto z_t\), um vetor unitário |
| Preditor | nenhum: um decoder leva \(z\) de volta a \(x\) | \(s_x\) e as posições do alvo \(\mapsto \hat s_y\) | \((z_t, a_t) \mapsto \hat z_{t+1}\) | \((z_{t-2:t}, a_{t:t+k-1}, k) \mapsto \hat z_{t+k}\) |
| A perda compara | pixels | embeddings | pixels e recompensas (RSSM) ou embeddings (preditivos latentes) | cossenos com cada quadro do clipe |
| Contra um latente constante | a reconstrução | EMA e stop-gradient, ou VICReg / SIGReg | a reconstrução (RSSM); um encoder congelado ou SIGReg (DINO-WM, LeWM) | a própria perda |
| O que molda o latente | KL até \(\mathcal N(0, I)\), por entrada | SIGReg: o lote em direção a \(\mathcal N(0, I)\) (LeJEPA) | KL até um prior aprendido (RSSM) | norma unitária e tempo |
| Serve para | compressão, amostragem | features congeladas | planejamento, imaginação | planejamento |
Dois colapsos com um nome só
As duas famílias têm uma falha chamada colapso e nas duas ela quer dizer que o código deixa de depender da entrada. Não é a mesma falha:
| VAE: colapso do posterior | JEPA: colapso da representação | |
|---|---|---|
| O que acontece | \(q(z \mid x) = \mathcal N(0, I)\) para todo \(x\) | \(s_x = c\) para todo \(x\) |
| Quanto custa | a reconstrução cai para a média do dataset: a perda fica alta | a previsão fica exata: a perda é zero |
| Por que acontece | o β é grande ou o decoder não precisa do código | nada na perda de previsão proíbe |
| A correção | annealing da KL, free bits, um decoder mais fraco | um alvo EMA, VICReg, SIGReg — ou, no TDWM, uma perda que pede que quadros distantes difiram |
A assimetria é toda a diferença entre prever pixels e prever embeddings. Pixels não colapsam, então o VAE só colapsa quando o objetivo diz que o código não vale o preço. Um alvo de embedding anda junto com o encoder, então uma constante é o mínimo global da perda de previsão pura e todo JEPA precisa excluí-la explicitamente. O capítulo do JEPA mostra isso no CIFAR-10: sem o stop-gradient a dispersão dos embeddings cai de 0.803 para 0.009 (como saber se uma representação colapsou).
A gaussiana, duas vezes: a KL do VAE e o SIGReg
O VAE e o LeJEPA empurram um latente para \(\mathcal N(0, I)\), por motivos diferentes e com uma conta diferente. Tire a média da KL do VAE sobre os dados e separe em duas partes, com \(q(z) = \mathbb E_x\, q(z \mid x)\) o posterior agregado (a nuvem de todos os códigos juntos)1:
Sai em uma linha: dentro da esperança, \(\log q(z \mid x) - \log p(z) = \big[\log q(z \mid x) - \log q(z)\big] + \big[\log q(z) - \log p(z)\big]\) e a média dos dois colchetes dá os dois termos.
O VAE paga pelos dois. O SIGReg olha só para o lote de embeddings, projetado em direções aleatórias, então confere só o segundo termo: a informação sai de graça. O exemplo resolvido do capítulo do VAE (\(p(z) = \mathcal N(0, 1)\), \(p(x \mid z) = \mathcal N(2z, 1)\)) mostra a separação exata. Com o chute ótimo para cada β, \(q^*(z \mid x) = \mathcal N\big(\tfrac{2x}{4+\beta}, \tfrac{\beta}{4+\beta}\big)\), e \(x \sim \mathcal N(0, 5)\):
| β | KL média, o que o VAE paga | \(I(x; z)\) | \(\text{KL}(q(z) \,\|\, p(z))\), o que o SIGReg vê |
|---|---|---|---|
| 0.1 | 1.964 | 1.954 | 0.010 |
| 1 | 0.805 | 0.805 | 0.000 |
| 4 | 0.253 | 0.243 | 0.010 |
| 16 | 0.037 | 0.030 | 0.006 |
Com β = 1 o encoder é a posterior verdadeira, os códigos juntos são exatamente \(\mathcal N(0, 1)\) e os 0.805 nats inteiros são informação sobre \(x\) (\(\tfrac12 \log 5\), como no passo 4 do lab do VAE). O SIGReg não cobraria nada por esse código. Por isso um β-VAE troca informação por um latente regular enquanto um JEPA com SIGReg não troca — e por isso o TDWM procura a informação que o LeWM perde no termo de previsão, não no SIGReg.
A perda principal decide o que o latente guarda
A ligação tracejada do mapa é a mesma lição aprendida duas vezes. Um regularizador molda o latente; a perda principal decide o que entra nele.
- VAE. Na seção 6 do lab do VAE o decoder recebe uma dica, a própria imagem reduzida por average pooling, ao lado de \(z\). Com β = 1 a KL cai de 15.83 nats (sem dica) para 1.82 (7 × 7) e 0.02 (28 × 28): um decoder que faz o trabalho sozinho torna o código inútil e o prior vira o ótimo.
- LeWM. O MSE do próximo embedding é menor quando o futuro é fácil de prever e o jeito mais seguro de deixá-lo fácil é parar de representar o que é difícil de antecipar. No OGBench Scene uma sonda linear recupera a gaveta a partir dos embeddings do LeWM com \(R^2 = 0.95\), mas o cubo com 0.27 e o braço com 0.392. O SIGReg não tem como objetar: uma nuvem gaussiana pode ser feita só com a gaveta. A sonda do próprio TDWM chega a 0.56 no cubo e a 0.69 no braço.
Nos dois casos a correção está no objetivo, não no regularizador: free bits ou um decoder mais fraco no VAE; no TDWM, uma perda em que cada quadro do clipe precisa ser distinguido dos outros.
A geometria é o que o planejador usa
Um modelo de mundo planeja por distâncias no seu latente, então a geometria do latente é o mapa do planejador. No capítulo de modelos de mundo a distância no latente tem correlação de postos de 0.93 com a distância em linha reta e só 0.41 com o comprimento do caminho que o agente precisa percorrer de fato; o CEM resolve 1 tarefa em 10 com o primeiro custo e 10 em 10 com o segundo. A resposta do TDWM é tornar a geometria temporal: quadros a poucos passos ficam perto, quadros distantes ficam quase ortogonais (por que a geometria importa).
Quatro ideias que voltam em todo capítulo
- A perda decide o que o latente guarda. A reconstrução guarda cada detalhe e o VAE borra o que não consegue; uma perda contrastiva guarda o que distingue os pares e o CLIP lê legendas como um saco de palavras; prever o próximo embedding guarda o que é previsível e o LeWM esquece o cubo.
- Uma sonda linear é o teste. Transfer learning, ViT, CLIP, JEPA e TDWM julgam um latente pelo que um hiperplano consegue ler nele.
- A geometria é uma escolha de projeto. Uma gaussiana (VAE, SIGReg), uma esfera (CLIP, TDWM), uma grade com canais (difusão latente, DiT), um codebook (VQ). A escolha decide quais distâncias querem dizer alguma coisa.
- Fora da variedade, nada foi treinado. Os buracos do autoencoder, as pontes da GAN, o guidance forçado demais e uma política que explora o próprio modelo de mundo são a mesma falha: um ponto que o decoder ou o preditor nunca viu.
Ordem de leitura dos quatro
- VAE — o ELBO, um latente gaussiano e o colapso do posterior.
- JEPA — prever o embedding, não os pixels; o colapso e as quatro saídas, o SIGReg entre elas.
- Modelos de mundo — o V–M–C sobre um VAE, o ELBO ao longo do tempo do RSSM, a família preditiva latente e o planejamento com CEM.
- TDWM — um modelo de mundo JEPA em que o tempo, não um regularizador, mantém o latente vivo.
-
Hoffman, M. D., & Johnson, M. J. (2016). ELBO surgery: yet another way to carve up the variational evidence lower bound — NIPS Workshop on Advances in Approximate Bayesian Inference. A separação da KL em informação mútua e a KL do posterior agregado. ↩
-
Peng, W., & Molin, H. (2026). Temporal Discriminative World Models — página do projeto, Stanford University. As sondas citadas aqui; veja o capítulo do TDWM. ↩