Antevisão · Latent Rehearsal
16

O mínimo
e o volume

A palestra faz duas afirmações sobre energia que dá para conferir com régua: que a inferência é uma busca pelo mínimo, e que treinar um modelo de energia é impedir que a paisagem fique plana. Fomos medir as duas no nosso modelo. A primeira nos pegou onde dói: existe um ajuste em que o que chamávamos de busca por energia não achava o mínimo em nenhuma das 96 posições testadas — e outro em que ele acha sempre, mas só porque a energia virou a própria política.

Apostila 16 Pré-requisito: 05 (o leme e o modelo de mundo) e 13 §1 (energia de dependência)

1 As duas frases

Do trecho da palestra sobre modelos de energia, duas afirmações são checáveis e nunca tinham sido checadas aqui.

A primeira é sobre inferência. "Inference by optimization, not by forward propagation." Dado um x, os y compatíveis são os que minimizam a energia; achá-los é uma busca, não uma passada para a frente. E ele insiste no que isso implica: "there's no single y for a given x — it's a relation, not a function", e portanto "you can give me multiple answers".

A segunda é sobre treino. "To train an energy-based model you have to prevent collapse. The collapse problem would be manifested by the energy function being flat everywhere." E as duas saídas: a contrastiva, "you generate points outside the region of data and you push the energy up"; e a regularizada, que ele prefere, "minimizing the volume of space that can take low energy".

Por que isto vira apostila agora

A apostila 13 §1 montou a energia de dependência com o mínimo sobre as oito ações mais prováveis da política. Era uma escolha de custo, escrita como tal. Mas "as oito mais prováveis" saem da cabeça de tokens, que é propagação direta — exatamente o que a frase manda não usar. Enquanto ninguém calculou o mínimo verdadeiro, não dava para saber se o atalho era inofensivo ou se ele apagava o conceito inteiro. Agora dá: o vocabulário tem 16.392 entradas e o modelo tem 256 dimensões, então o mínimo exato cabe numa passada em lote na CPU.

2 O conjunto onde se procura

O planejador do modo energia (server/ours.py) fazia assim, a cada token: pegava os k tokens mais prováveis segundo a cabeça de tokens, imaginava cada um no espaço latente e os reordenava pela energia. A pergunta que faltava é simples: o mínimo verdadeiro da energia estava dentro dessa lista?

Se estava sempre, o atalho é inofensivo e a discussão acaba. Se não estava, o que chamávamos de "inferência por otimização" era uma reordenação de uma lista que a propagação direta já tinha fechado — e o nome estava errado.

O script model/inference.py responde isso com o argmin exato sobre o vocabulário inteiro, e mede três coisas: a cobertura (com que frequência o mínimo exato está no top-k), a energia perdida (quanto a aproximação deixa na mesa) e quantas respostas empatam perto do mínimo.

Protocolo

Modelo mini-moderno-reg1-wm1-sz1-duelo. Seis sequências de 64 tokens sorteadas do conjunto de validação com semente fixa, 16 posições por sequência: 96 buscas, cada uma sobre 16.392 ações. Nenhum texto escolhido a dedo. As duas energias são medidas separadamente porque respondem a perguntas diferentes, e o número de uma não vale para a outra.

3 Energia de dependência: a política erra o mínimo em 70% das posições

A energia de dependência é a da apostila 13: dado o par real (zt, zt+1), qual ação explica melhor o alvo. E(zt, z′) = mina ‖Pred(zt, ea) − z′‖² Não há termo de plausibilidade: é o modelo de mundo sozinho.

Cobertura do top-k da política sobre o argmin exato, energia de dependência. "Energia perdida" é quanto o mínimo do top-k fica acima do mínimo verdadeiro, em fração dele.
kcoberturaenergia perdida
111,5%+706,6%
830,2%+109,1%
3241,7%+34,9%
12853,1%+9,3%

Com os oito candidatos que a apostila 13 usou, o mínimo verdadeiro estava fora da lista em 70% das posições, e a energia relatada era o dobro da real. Nem com 128 candidatos — dezesseis vezes mais caro — a cobertura passa de metade. Isso não invalida os números da 13, que mediam outra coisa (se a energia sobe numa violação, e sobe), mas invalida a leitura de que aquele mínimo era o mínimo.

4 Energia da tarefa: depende inteiramente do peso do guardrail

O gerador não usa a energia de dependência. Ele usa a da tarefa, que tem dois termos: o rumo e a plausibilidade. E(a) = 1 − cos(Pred(zt, ea), rumo) + γ · (−log p(a)) O segundo termo sai da mesma cabeça de tokens que produz o top-k. Então o peso γ decide se a pergunta faz sentido — e a resposta muda de ponta a ponta.

Cobertura do top-k sobre o argmin exato da energia da tarefa, rumo "futebol gol campeonato", por peso do guardrail. A última coluna é a energia perdida no top-8.
γk = 1k = 8k = 32k = 128perdida no top-8
0 (só o rumo)0,0%0,0%0,0%9,4%+35,9%
0,133,3%85,4%97,9%100,0%+1,2%
1 (o padrão)90,6%100,0%100,0%100,0%+0,0%

Leia as duas linhas extremas juntas, porque elas formam uma tesoura:

Entre os dois extremos não há um ponto confortável, há um preço: γ = 0,1, que a apostila 12 já apontava como "o valor que dá voz ao rumo", deixa 14,6% das posições sem o mínimo no top-8. Ou a energia é dominada pela plausibilidade e planejar não muda quase nada, ou o rumo tem voz e o conjunto de candidatos passa longe do mínimo. As duas pontas esvaziam a frase da palestra, por motivos opostos.

O que isto corrige do que já estava escrito

A apostila 12 registra que com γ = 1 "a plausibilidade domina a energia e a tarefa quase não pesa". Estava certo como observação sobre o resultado. O que não estava medido é a consequência para o método: com γ = 1 a busca é supérflua, e com γ baixo ela é insuficiente. O problema não era o peso; era o conjunto onde se procurava.

5 Relação, não função: quantas respostas empatam

A outra metade da frase é que não existe a resposta. Com o mínimo exato em mãos, dá para contar quantas ações ficam a menos de 1%, 5% e 10% dele.

Número médio de ações dentro de uma margem do mínimo, entre as 256 de menor energia. A mediana está entre parênteses.
energia≤ 1%≤ 5%≤ 10%
dependência (modelo de mundo)1,4 (1)12,9 (3)40,6 (6)
tarefa, γ = 02,2 (2)35,5 (28)136,9 (119)
tarefa, γ = 0,11,4 (1)4,1 (2)12,1 (6)
tarefa, γ = 11,1 (1)1,4 (1)1,9 (1)

A leitura é direta e é a da palestra: quanto mais a energia é só o rumo, mais ela descreve um conjunto; quanto mais ela é a política, mais ela vira função. Com γ = 1 há praticamente uma resposta única — o que é outro jeito de dizer que aquilo não é mais um modelo de energia, é um modelo probabilístico, que a própria fala classifica como o caso particular.

Um exemplo concreto, na mesma posição, mostra os dois lados. O contexto termina em our mindset,” e o token que de fato veio foi Ash. Pela energia de dependência, as cinco ações de menor energia são ro, pl, tr, pr, gl, todas entre 0,1628 e 0,1648 — cinco começos de sílaba que levam o estado quase ao mesmo lugar, e nenhum deles é o token real. Pela energia da tarefa com γ = 0, as cinco melhores são ac, oc, ú, v, í: fragmentos que apontam para o rumo em português e que nenhuma política escolheria. O mínimo do rumo, sozinho, é quase sempre um token implausível — e é por isso que o termo de plausibilidade existe. O erro não era tê-lo; era deixá-lo tão pesado que ele escolhe sozinho.

6 O conserto, e o que ele custa

Duas mudanças, as duas aditivas — o comportamento antigo continua sendo o padrão.

O que mudou no código. Nenhum parâmetro novo: só inferência.
ondeo que passou a existir
Transformer.energia_dependenciak=None busca sobre todas as ações do vocabulário, em pedaços dimensionados por um orçamento de memória; respostas=N devolve as N ações de menor energia em vez de uma só — as "multiple answers" da fala
server/ours.pya origem dos candidatos aceita todos: cada token do vocabulário é imaginado um passo e pontuado pela energia, e o top-k sai dessa ordenação, não da política
model/inference.pyo script desta apostila: cobertura, energia perdida e contagem de respostas, nas duas energias e em qualquer γ
server/ours.py, _todos_por_energiacorreção posterior (apostila 18): a ordenação do vocabulário passou a usar a energia inteira, com o termo γ · (−log p), como no inference.py. Antes ela ordenava só pelo rumo
model/collapse.py--only-volume, --volume-seed e --sample-scale: medir só o volume, com outra semente e com outra norma dos pontos sorteados (§10)

O custo é uma passada em lote de 16.392 × 256 por token gerado, contra 8 × 256 antes. É cara, e por isso não virou padrão: ela existe para medir quanto o atalho custa em cada configuração, e para ser ligada quando o rumo importa mais que a velocidade.

7 A paisagem é plana?

A segunda frase. Colapso, na definição da palestra, não é o modelo errar: é a energia ficar igual em todo lugar. Um modelo assim passa em qualquer teste de "energia baixa nos dados", porque ela é baixa em tudo — e não serve para nada, porque não distingue.

O teste é direto: medir a energia nos pares reais e em alvos fora da região dos dados. Não precisamos inventar pontos: os negativos mais duros são estados reais no lugar errado — mesma norma, mesma geometria, só não são o alvo daquele zt.

Energia média, modelo mini-moderno-reg1-wm1-sz1-duelo, 16 sequências de 96 tokens da validação. "Condicional" usa a ação que de fato veio; "dependência" já procurou a melhor ação possível entre as 16.392, então o que sobra não é o token errado, é um alvo que nenhuma ação alcança. A identidade (prever que nada muda) está ao lado como piso.
alvocondicionalvs realdependênciavs realidentidade
par real (dentro)0,1583—0,1252—0,8916
alvo 7 posições à frente1,2315+677,9%0,4876+289,6%1,4512
alvo de outra sequência1,9020+1.101,5%1,3863+1.007,6%2,0783
alvo embaralhado no lote1,9116+1.107,6%1,1403+811,0%2,0739
ruído do mesmo tamanho dos estados reais2,0545+1.197,9%1,5433+1.132,9%2,2344

Não é plana. O vale dos dados está dez vezes abaixo da borda, e a graduação faz sentido sozinha: sete posições à frente é o alvo menos errado de todos (+289,6%), porque o texto ainda é o mesmo; ruído puro é o mais caro. Uma paisagem colapsada daria a mesma coluna inteira.

8 O volume de energia baixa

Aqui está a grandeza que a família regularizada diz minimizar, e que até aqui não medíamos: quanto do espaço consegue energia baixa. A medida é feita em quatro passos.

  1. Os destinos possíveis. Escolhemos uma posição do texto. Para cada um dos 16.392 tokens do vocabulário, o modelo de mundo prevê para onde o estado iria se aquele token fosse escrito ali. São 16.392 destinos.
  2. O que é energia baixa. Um ponto do espaço tem energia baixa quando fica perto de algum desses destinos. A região de energia baixa é, então, um pequeno vale em volta de cada destino — um vale por token.
  3. A referência. O texto real diz qual estado veio de fato a seguir. A energia desse estado verdadeiro, ou seja, o quão perto ele chega do destino mais próximo, é a referência: é o nível de energia que um alvo legítimo consegue.
  4. Os pontos sorteados. Sorteamos pontos ao acaso, com o mesmo tamanho dos estados reais, para não comparar coisas de escalas diferentes. Para cada um, medimos a energia e contamos quantos ficam abaixo de uma, duas, cinco e dez vezes a referência.

A leitura é intuitiva. Num modelo colapsado, os destinos se amontoam e cobrem o espaço inteiro: quase qualquer ponto sorteado cai perto de algum deles, e a fração é alta. Num modelo que separa bem, os vales são estreitos: um ponto ao acaso fica longe de todos os destinos, e a fração é baixa.

Contar só os pontos abaixo da própria referência não serve: em 256 dimensões, um ponto sorteado ao acaso praticamente nunca chega tão perto de um destino quanto o estado verdadeiro, e todo modelo marcaria zero. Por isso contamos em vários múltiplos da referência. A curva mostra o formato do vale e, por ser medida em múltiplos, permite comparar modelos cujas energias têm escalas diferentes.

Volume de energia baixa, e as medidas de colapso de representação ao lado. wm1-sz1 treina o modelo de mundo ponta a ponta com SigReg nos estados (o regularizador por dimensão); wm1det usa o atalho de cortar o gradiente no alvo, sem regularizador no estado. Seis posições sorteadas, 256 alvos por posição. É um sorteio só; a §10 mede quanto esses números variam.
medidawm1-sz1 (regularizado)wm1det (atalho)
energia do par real (dependência)0,12520,4179
ruído vs real (dependência)+1.132,9%+358,6%
energia mediana de um ponto sorteado15,0× a referência4,6× a referência
fração do espaço abaixo de 5× a referência0,00%82,49%
fração do espaço abaixo de 10× a referência53,12%99,93%
linhas diferentes (cosseno entre amostras)+0,0738+0,1352
colunas diferentes (|correlação| fora da diagonal)0,24840,1841
colunas diferentes (posto efetivo, de 1 a 256)75,7135,5
perda de validação (melhor checkpoint)5,77615,2653

As duas linhas em negrito são o resultado desta apostila. No modelo regularizado, nenhum ponto sorteado consegue energia abaixo de cinco vezes a referência; no atalho, 82% conseguem. É a frase "minimizing the volume of space that can take low energy" saindo como número, confirmando o que a palestra descreve.

Mas o resto da tabela é desconfortável, e por isso está inteira aqui:

A conclusão que isso força

Colapso de representação e colapso de energia são coisas diferentes, e as nossas medidas de rotina só viam a primeira. Um espaço bem espalhado, com dimensões independentes e posto alto, pode estar apoiado numa paisagem de energia rasa — porque o que define o volume não é como os estados se distribuem, e sim quão longe o preditor leva ações diferentes. Enquanto a curva de volume não entrar na avaliação do treino, "não colapsou" continua sendo uma afirmação sobre a matriz, não sobre a energia.

9 Linhas e colunas: a taxonomia bate?

A palestra organiza as duas famílias pela matriz do lote, uma linha por amostra e uma coluna por variável: "one way is to make sure all the rows are different; another way is to make sure all the columns are different". Fazer as linhas diferentes é o método por amostra (InfoNCE, CLIP); fazer as colunas diferentes é o método por dimensão (VICReg, SigReg), o preferido dele.

Temos um controle contrastivo por amostra na fila desde a apostila 13 — a rodada wm1-nce1, com InfoNCE no lugar do SigReg. O resultado dela, pelo histórico de treino:

Melhor checkpoint de cada rodada. Atenção à régua: estas colunas são medidas na tabela de embedding, que é o que o treino registra, e não na matriz de estados do lote usada na tabela anterior. São matrizes diferentes; os números não se misturam.
rodadavalidaçãolinhascolunas |r|posto
wm1-nce1 (contrastivo por amostra)6,51290,11930,1065242,5
wm1-sz1 (regularizado por dimensão)5,77610,04850,0894243,5
wm1det (atalho)5,26530,05270,0663244,6
reg1 (controle sem modelo de mundo)5,25770,04850,0640245,2

A taxonomia não apareceu. O método contrastivo por amostra deveria ganhar justamente na coluna das linhas, e perdeu: 0,1193 contra 0,0485, o dobro e meio de cosseno entre amostras. Perdeu também nas colunas, e custou 0,74 nats de validação. No nosso teste, a vantagem esperada do método por amostra não apareceu — o que, pelas ressalvas abaixo, diz mais sobre os limites do teste do que sobre a taxonomia.

Em 17/09 a rodada foi refeita guardando os pesos, e deu os mesmos números de validação até a quarta casa. Com os pesos, a medida sai na matriz certa — a dos estados do lote — e com a paisagem de energia ao lado, no mesmo protocolo da §8 (24 sequências, 12 posições no volume):

Matriz de estados do lote e paisagem de energia (model/collapse.py), as três famílias. "Ruído vs real": quanto a energia de dependência de um alvo de ruído fica acima da do par real. "Mediana": energia de um ponto sorteado, em múltiplos da referência (a §10 mostra que é a medida estável).
rodadavalidaçãolinhas (cos)colunas |r|postoruído vs realmediana
wm1-nce1 (contrastivo por amostra)6,51290,09160,170170,5+2.302,7%33,6×
wm1-sz1 (regularizado por dimensão)5,77610,05410,240378,8+915,6%21,9×
wm1det (atalho)5,26530,11990,1831139,4+312,7%5,4×

Na matriz certa, a taxonomia continua sem aparecer do jeito esperado: o método por amostra fica atrás do regularizado nas linhas (0,0916 contra 0,0541) e à frente na correlação entre colunas (0,170 contra 0,240), o inverso do que a divisão prevê. O que ele tem de próprio aparece na paisagem: a energia fora dos dados sobe mais que em qualquer outra rodada — ruído 23 vezes acima do par real, ponto sorteado 33,6 vezes a referência. É a descrição da família contrastiva na fala, "push the energy up" fora da região dos dados, medida. E é também a rodada que mais custa ao gerador (+23,87%): a paisagem mais funda não veio de graça.

Isso merece três ressalvas, porque é o resultado de uma rodada só e vai contra o esperado:

10 O volume, medido de novo

A primeira versão desta apostila fechou com quatro perguntas que só uma rodada responderia. As duas sobre inferência — se buscar no vocabulário inteiro melhora o texto e se existe um γ com rumo e cobertura ao mesmo tempo — viraram a apostila 18, porque a resposta mudou de assunto: o que decide o texto é a energia, não a busca. No caminho apareceu um defeito no modo todos, que a 18 descreve. As duas perguntas sobre o volume estão aqui. Rodaram na CPU, no wm1-sz1 e no wm1det.

Quantas posições bastam para o volume?

Volume de energia baixa (model/collapse.py --only-volume), 256 alvos por posição, três sementes (7, 8, 9) para cada número de posições; cada célula lista as três medidas. "Mediana" é a energia mediana de um ponto sorteado, em múltiplos da referência.
posiçõeswm1-sz1: ≤ 5×wm1det: ≤ 5×wm1-sz1: medianawm1det: mediana
30 / 0 / 0%67 / 49 / 33%19,5 / 24,3 / 31,7×4,2 / 5,5 / 7,0×
617 / 17 / 0%71 / 77 / 83%14,2 / 16,9 / 21,4×3,8 / 4,4 / 3,3×
120 / 0 / 0%53 / 31 / 70%20,5 / 19,5 / 17,0×5,4 / 6,3 / 4,7×

A ordem entre os dois modelos vale nas 18 medidas: nenhuma do atalho fica abaixo de nenhuma do regularizado. O número absoluto, não. Com 12 posições o atalho ainda vai de 31% a 70% abaixo de 5× a referência, e o 0,00% contra 82,49% da §8 é um sorteio dentro dessas faixas. As frações redondas (16,67% é uma posição em seis) mostram o motivo: cada posição tende a contar tudo ou nada, porque a referência muda muito de uma posição para outra. A variação está entre posições, não entre os alvos sorteados.

A mediana é mais estável. Com 12 posições ela fica entre 17,0× e 20,5× no regularizado e entre 4,7× e 6,3× no atalho: faixas estreitas e longe uma da outra. Para entrar na avaliação do treino, a medida a guardar é a mediana com 12 posições — cerca de 15 segundos por posição nesta CPU, três minutos por avaliação. A fração abaixo de 5× serve para ilustrar, não para comparar rodadas.

O volume depende do tamanho dos pontos sorteados?

Mesmas 6 posições (semente 7), variando a norma dos pontos sorteados em múltiplos da norma média dos estados reais (1 = o protocolo da §8).
normawm1-sz1: ≤ 5×≤ 10×medianawm1det: ≤ 5×≤ 10×medianarazão das medianas
0,533,3%81,1%6,6×100,0%100,0%1,6×4,1
0,816,7%46,2%10,6×99,4%100,0%2,7×3,9
116,7%33,1%14,2×71,0%100,0%3,8×3,7
1,255,4%16,7%19,9×37,5%100,0%5,4×3,7
20,0%0,1%44,5×0,0%33,3%12,4×3,6

Depende muito, e de um jeito que separa as duas coisas que a pergunta queria separar. A fração é escolha de amostragem: o mesmo atalho vai de 100% a 0% abaixo de 5× só mudando onde se sorteia, e com norma 2 os dois modelos marcam zero. A comparação é forma do vale: a razão entre as medianas fica entre 3,6 e 4,1 numa faixa de quatro vezes na norma. O atalho oferece energia cerca de quatro vezes mais barata que o regularizado, onde quer que se olhe.

O que as duas respostas mudam

A afirmação da §8 continua de pé — o regularizado deixa bem menos espaço com energia barata —, mas o número a carregar adiante é a razão das medianas, perto de 4, e não 0,00% contra 82,49%.

11 O que muda no projeto

Saldo desta apostila. Nenhuma peça nova no caminho de geração; três medidas novas, uma correção de nome e uma correção no modo todos.
afirmação da palestraestado aqui
inferência por otimização, não por propagação diretaera falso no nosso código quando o rumo tinha voz: 0% de cobertura até o top-32 com γ = 0. Agora existe a busca sobre o vocabulário inteiro, e o custo dela está medido. Ela não melhora o texto: com γ = 0,1 chega ao mesmo ponto de afinidade e perplexidade que a política com γ = 0, e a busca exata dentro do núcleo da política também (apostila 18)
relação, não função; múltiplas respostasconfirmado e quantificado: 12,9 ações a menos de 5% do mínimo na energia de dependência, 35,5 no rumo puro, 1,4 com γ = 1
colapso é a energia ficar plananão estamos colapsados: vale dez vezes abaixo da borda, com graduação coerente entre os quatro tipos de alvo
a família regularizada minimiza o volume de energia baixaconfirmado na ordem, nas 18 medidas da §10: o atalho deixa cerca de quatro vezes mais energia barata (razão das medianas entre 3,6 e 4,1). A fração abaixo de 5× varia com o sorteio e com a norma dos pontos
linhas diferentes × colunas diferentesnão apareceu como esperado, nem na tabela de embedding nem na matriz de estados: o contrastivo por amostra fica atrás nas linhas e à frente nas colunas. O que ele tem de próprio é a paisagem mais funda (ponto sorteado a 33,6× a referência), com o maior custo ao gerador (+23,87%)
Perguntas em aberto