Neste artigo

O que estou analisando

O registro 10.5281/zenodo.20798102 — ΨQRH Stack Corrigida — é incomum entre os trabalhos que já revisei: ele é, em boa parte, uma autocrítica. O documento analise_matematica.md desmonta as próprias reivindicações da stack, listando o que está implementado e o que é apenas metáfora. Isso merece ser dito antes de qualquer crítica: quem escreveu o registro já apontou contra si mesmo os problemas mais óbvios.

O que faço aqui é diferente. Não repito a autocrítica; verifico as afirmações matemáticas com cálculo independente e examino o que o benchmark efetivamente mede. Três coisas mudam de lugar nesse processo.

1. O que é exato, e por quê

A peça central é uma substituição do embedding wte + wpe por uma superfície paramétrica bidimensional:

$$f(\lambda, t) = I_0 \cdot \sin(\omega t + \alpha\lambda) \cdot \cos(\omega t - k\lambda + \beta\lambda^2) + 0{,}1\,\lambda$$

Aqui $\lambda$ é a dimensão do embedding do token e $t$ a do embedding posicional. A diferença estrutural em relação à soma clássica é mensurável, e não é a curvatura — é o acoplamento.

Uma soma de duas funções de uma variável,

$$g(\lambda, t) = L(\lambda) + P(t)$$

tem derivada mista identicamente nula:

$$\frac{\partial^2 g}{\partial\lambda\,\partial t} = 0 \quad \text{em todo ponto.}$$

Para $f$, derivando (conferi tudo contra sympy):

$$\frac{\partial^2 f}{\partial\lambda\,\partial t} = -I_0\,\omega\,(\alpha - k + 2\beta\lambda)\,\sin(\varphi_1 + \varphi_2),$$

com $\varphi_1 = \omega t + \alpha\lambda$ e $\varphi_2 = \omega t - k\lambda + \beta\lambda^2$. Como $\omega \neq 0$ e o fator $(\alpha - k + 2\beta\lambda)$ só se anula em um ponto isolado, a derivada mista é não-nula em praticamente todo o domínio.

Verifiquei numericamente numa grade de $200 \times 200$ sobre o domínio que o demo mostra: 100% dos pontos para $f$ e 0% para $g$. É uma separação limpa, e é a única que encontrei no registro inteiro com essa nitidez.

A curvatura não é o que separa

O registro afirma, na seção 6.3, que "K = 0 é uma propriedade de embeddings lineares (wte+wpe), não de embeddings paramétricos". Isso é falso, e o painel direito do demo é a contraprova.

A curvatura gaussiana de um gráfico $z = f(x,y)$ é

$$K = \frac{f_{xx}f_{yy} - f_{xy}^2}{\left(1 + f_x^2 + f_y^2\right)^2}.$$

Para $g(\lambda,t) = L(\lambda) + P(t)$ temos $g_{xy} = 0$, mas $g_{xx} = L''(\lambda)$ e $g_{yy} = P''(t)$ não são nulos. Logo

$$K = \frac{L''(\lambda)\,P''(t)}{\left(1 + L'^2 + P'^2\right)^2} \neq 0.$$

Medindo na mesma grade, o painel separável tem $K \neq 0$ em 100% dos pontos. O que se anula num embedding separável é a derivada mista, não a curvatura gaussiana. A distinção importa porque a afirmação publicada é mais forte do que a matemática permite — e porque ela é justamente o tipo de exagero que o resto do registro se esforça para evitar.

2. As fórmulas publicadas estão erradas

Este é o ponto mais concreto. A seção 5.4 do zenodo_benchmark_stack.md publica as derivadas segundas de $f$. Comparei cada uma com a derivação exata:

Derivada Status
$f_\lambda$ ✅ correta
$f_t$ ✅ correta
$f_{tt}$ ✅ correta
$f_{\lambda\lambda}$ ❌ errada
$f_{\lambda t}$ ❌ errada

A fórmula publicada para $f_{\lambda\lambda}$ é

$$-\left(\alpha^2 + (-k + 2\beta\lambda)^2\right) I_0 \sin\varphi_1 \cos\varphi_2,$$

mas a derivada real contém dois termos que ela omite, ambos vindos de $\frac{\partial}{\partial\lambda}\left(-k + 2\beta\lambda\right) = 2\beta$:

$$-2\alpha\left(-k+2\beta\lambda\right)\cos\varphi_1\sin\varphi_2 \;-\; 2\beta\,\sin\varphi_1\sin\varphi_2.$$

E a fórmula publicada para $f_{\lambda t}$ usa $\cos(\varphi_1-\varphi_2)$ onde o cálculo dá $\sin(\varphi_1+\varphi_2)$.

O erro não é cosmético. Avaliando com os próprios parâmetros treinados que o registro reporta na Tabela 5.6 ($I_0 = 0{,}871$, $\omega = 2{,}011$, $\alpha = 1{,}423$, $k = 1{,}635$, $\beta = 0{,}348$):

Ponto $(\lambda, t)$ $f_{\lambda\lambda}$ exato $f_{\lambda\lambda}$ publicado erro
$(0{,}7;\ 1{,}3)$ $-2{,}698$ $-0{,}105$ $2{,}593$

Isso contamina a conclusão central da seção 5.5. Recalculei $K$ numa grade $60\times60$ com os dois conjuntos de fórmulas:

$K$ médio $\lvert K\rvert$ médio $K$ mín $K$ máx
Fórmulas exatas $+0{,}014$ $2{,}818$ $-48{,}11$ $+48{,}33$
Como o registro publica $+1{,}637$ $1{,}744$ $-0{,}98$ $+52{,}42$
Registro afirma (§5.5) $0{,}845$ $1{,}022$ $-1{,}18$ $38{,}99$

Nenhuma das duas colunas reproduz os números publicados. O $K$ médio de $0{,}845$ não sai das fórmulas do próprio documento. A boa notícia: o sinal qualitativo sobrevive — $K$ é genuinamente não-nulo e assume ambos os sinais, com metade da grade em curvatura negativa pela fórmula exata. A conclusão "a superfície é genuinamente curvada" está certa. Os números que a sustentam estão errados, e precisariam ser recalculados antes de qualquer citação.

3. O benchmark não mede o que a conclusão afirma

O registro conclui que o FullStack tem "a pior loss de treino mas a melhor PPL em todos os 5 domínios — evidência de que a stack geométrica atua como regularizador". Examinei o script que produz essa tabela (kaggle_script_final.py). Três problemas independentes.

3.1 Os dados não têm estrutura para aprender

O corpus sintético é gerado com

tokens = rng.randint(4, VOCAB, 50000).tolist()

São inteiros uniformes e independentes em ${4, \dots, 99}$. A entropia de Shannon de uma uniforme sobre 96 símbolos é

$$H = \ln 96 = 4{,}564 \text{ nats},$$

e nenhum modelo — por melhor que seja — consegue ficar abaixo disso. É o piso de perplexidade da distribuição, não uma limitação de arquitetura.

O baseline reportado tem loss $4{,}60$. Ele está a $0{,}036$ nats do ótimo teórico. A 0,8% do piso. Não existe margem para "regularização geométrica" melhorar coisa alguma: o que resta ali é ruído de inicialização.

3.2 O laço de treino treina 3 batches

for ep in range(3):
    for x, y in dl:
        l, _ = model(x, labels=y); l.backward(); ...
        break          # <- sai após a PRIMEIRA batch

Com batch_size=16, o modelo vê 48 sequências no total. O DataLoader tem 3125 batches por época; ele usa 3. A diferença entre as arquiteturas A–D não pode ser atribuída a convergência — nenhuma delas convergiu.

Reproduzi o protocolo com 5 seeds diferentes:

Config loss por seed média desvio
A. Baseline 4,759 4,767 4,771 4,775 4,771 4,769 0,005
B. +Riemann 4,759 4,766 4,771 4,774 4,772 4,768 0,005
C. +Surface 17,93 17,91 18,20 18,39 18,54 18,193 0,249
D. FullStack 17,80 17,79 18,13 18,30 18,48 18,101 0,272

A separação A/B versus C/D é grande e reprodutível. Mas repare no que ela significa: C e D têm a mesma loss (18,19 vs 18,10, dentro do desvio), e A e B são indistinguíveis (4,769 vs 4,768). A RiemannSphere não move nada. O que separa os grupos é a presença do ParametricSurface — e ela piora a loss por um fator de quase quatro, o oposto do que a narrativa de "regularizador" sugere.

Isso também explica a inversão entre loss e PPL que o registro lê como regularização: as configurações com Surface estão em regime numérico diferente, não em regime melhor.

3.3 Os "5 domínios" são o mesmo dado

Os prompts de teste são

'code':     [4,12,8,10,4,30,20,...]
'poetry':   [4,30,8,10,24,10,22,...]
'math':     [4,10,15,30,8,4,8,10,...]

Todos são sequências de inteiros uniformes na mesma faixa, no mesmo vocabulário, geradas pelo mesmo processo. "code", "poetry" e "math" são rótulos, não distribuições distintas. Dizer que o FullStack venceu "nos 5 domínios" é dizer que venceu cinco recortes da mesma amostra aleatória — uma evidência, contada cinco vezes.

O que um teste honesto exigiria

  1. Dados com estrutura. Sequências onde o próximo token dependa do anterior; caso contrário a loss fica presa no piso de entropia e nenhuma arquitetura pode se distinguir.
  2. Treinar até convergência, ou pelo menos reportar a curva. Três batches não é treino, é inicialização.
  3. Múltiplas seeds com desvio, não uma seed fixa. A seed 42 é declarada como "controle de confundidores", mas com uma só realização ela é uma variável aleatória, não um controle.
  4. Domínios com distribuições distintas de verdade — outro vocabulário, outra entropia, outra estrutura de dependência.
  5. Baselines de parâmetros equivalentes e, idealmente, um controle negativo: a mesma arquitetura com a componente geométrica desligada por inicialização aleatória em vez de identidade.

4. Onde a autocrítica do registro acerta

Volto ao começo. O próprio analise_matematica.md é honesto em pontos que eu não teria como contestar:

E acrescento uma observação que o registro não faz. A RiemannSphere inicializa sua matriz de Möbius na identidade ($a=1, b=0, c=0, d=1$), o que é correto para $w = z$. Mas a saída do módulo não é $x$: é $x + \text{projeção}(z)$. Medi: a norma do que o módulo acrescenta é cerca de 55% da norma do próprio embedding na inicialização. O teste do registro chama isso de "identidade mantida (diff < 100)" — um limiar tão largo que qualquer coisa passaria. A RiemannSphere é uma perturbação não-linear grande, não uma transformação próxima da identidade, e o teste não verifica o que o nome sugere.

4b. O benchmark que eu rodei — e que me contradisse

Escrevi um benchmark separado, de escopo estreito: apenas o núcleo geométrico. Fora dele ficam a RiemannSphere, a atenção espectral e o weight tying, porque aquelas são decisões de arquitetura e já foram medidas sem conclusão por falta de dados com estrutura. O que sobra para testar com rigor é a superfície $f(\lambda,t)$.

Cinco experimentos, cada um com hipótese e critério de falsificação declarados antes da execução. Rodei em RTX 5060 Ti, 127 segundos no total.

# Pergunta Resultado
E1 O acoplamento é real e estrutural? PASSOU — $f_{\lambda t}\neq0$ em 100% vs 0%
E2 A curvatura separa este embedding? Registro refutado — separável tem $K\neq0$ em 99,7%
E3 O acoplamento sobrevive ao treino? PASSOU — 100% do domínio, $\beta$ até cresceu
E4 Ajuda onde a tarefa não saturou? Nenhuma das três tarefas separou
E5 Efeito fora do ruído em 10 seeds? ICs não se sobrepõem — mas ver E5b
E5b A causa é o acoplamento? NÃO — o controle linear também resolve

E1 — o resultado sólido

Grade de 160 000 pontos sobre $\lambda\in[-3,3]$, $t\in[0,6]$, avaliação analítica (sem diferenças finitas, que foi o erro do benchmark original):

Configuração $f_{\lambda t}\neq0$ $\lvert f_{\lambda t}\rvert_{\max}$
ΨQRH ($\alpha{=}1{,}423$, $\beta{=}0{,}348$) 100,00% 4,028
ΨQRH ($\alpha{=}0$) 100,00% 6,521
ΨQRH ($\beta{=}0$) 100,00% 0,371
separável ($wte{+}wpe$) 0,00% 0,000

Este é o achado que sustenta o registro. O acoplamento é propriedade algébrica da função, não artefato de medição, e não depende de treino. Note também que $\alpha{=}0$ não desliga o acoplamento — o termo $\omega t$ aparece dentro dos dois fatores.

E3 — o acoplamento não colapsa

Treinei a superfície isolada numa tarefa que exige distinguir token de posição, até 100% de acurácia (600 passos). Os parâmetros convergiram para longe de zero:

Parâmetro Inicial Após treino Razão
$I_0$ 1,000 1,374 1,37×
$\omega$ 1,618 1,990 1,23×
$\alpha$ 0,618 0,927 1,50×
$k$ 1,618 2,051 1,27×
$\beta$ 0,382 0,785 2,06×

$f_{\lambda t}\neq0$ em 100% do domínio depois do treino. O gradiente não empurrou a geometria para o caso separável — pelo contrário, ampliou o acoplamento. Isso responde à preocupação de que a curvatura fosse decorativa.

E4 — onde o benchmark se recusa a dar razão

Montei três tarefas com estrutura determinística e alvo causalmente alcançável (a versão anterior deste texto tentava prever um alvo que dependia do token atual a partir do contexto anterior — impossível, e o modelo ficava preso em perplexidade aleatória). As três têm regra exata:

Resultado: ambas as arquiteturas batem 100% de acurácia nas três. A diferença de loss é de $10^{-4}$ nats — ruído de ponto flutuante, não evidência. Quando as duas chegam ao teto, a tarefa não separa nada. Marquei as três como saturadas em vez de reportar uma vitória de 0,0004 nats.

E5 e E5b — o controle que derrubou minha própria conclusão

Em orçamento apertado (T2, 500 passos, 10 seeds), o acoplado mostrou $0{,}0061$ de loss contra $0{,}0214$ do separável, com IC 95% bootstrap sem sobreposição: $[0{,}0059;\ 0{,}0062]$ contra $[0{,}0165;\ 0{,}0281]$. Um resultado que eu teria publicado como "efeito real do acoplamento".

Antes de publicar, rodei um controle: troquei a codificação senoidal do braço separável por uma soma linear de embeddings de token e posição — mesma capacidade de parâmetros, mas sem periodicidade.

Braço Loss Acurácia
acoplado ΨQRH 0,0061 100,00%
separável senoidal 0,0030 100,00%
separável linear 0,0041 100,00%

O controle linear resolve a tarefa tão bem quanto o acoplado. O efeito de E5 não é do acoplamento — é da capacidade de representar 200 tokens distintos. A codificação senoidal colidia por periodicidade, e era isso que quebrava o braço separável, não a falta de acoplamento.

Se eu tivesse parado em E5, teria publicado a conclusão errada com significância estatística. O controle é o que separa um efeito de uma coincidência bem medida.

O que este benchmark estabelece

Provado: o acoplamento $\lambda$–$t$ existe, é algébrico, sobrevive ao treino e é o que distingue estruturalmente este embedding de um separável. A curvatura gaussiana não é esse critério, e o registro erra ao dizer que é.

Não provado: que o acoplamento compra desempenho. Nas tarefas que consegui montar, ou as duas arquiteturas saturam, ou a vantagem se explica por capacidade de representação. A hipótese permanece aberta — e testá-la exige um alvo onde a estrutura $\lambda$–$t$ seja o gargalo, não a memorização do vocabulário.

Fora de escopo, declarado: que ΨQRH seja melhor que $wte{+}wpe$ em linguagem natural. Para isso seria preciso treinar em corpus real com orçamento de compute comparável — o que o registro original não fez e este benchmark também não faz.

Rodar você mesmo

O notebook já está montado no Colab — abra, dê Runtime → Run all e ele imprime todos os resultados e baixa o JSON ao final:

▶ Abrir o notebook no Colab

O notebook é autossuficiente (só torch e numpy, ambos nativos no Colab) e leva cerca de 2 minutos em GPU. Para rodar local ou versionar o script:

Cada experimento imprime o critério de falsificação que declarou, para que qualquer número possa ser contestado nos seus próprios termos.

5. O que sobra de pé

Separando o que resistiu à verificação:

Exato e verificado. A superfície paramétrica tem acoplamento genuíno entre token e posição: $f_{\lambda t} \neq 0$ em 100% do domínio amostrado, contra zero no embedding separável. A projeção estereográfica e a transformada de Möbius em $PSL(2,\mathbb{C})$ estão corretas como construções matemáticas. O weight tying entre lm_head e token_lambda está implementado e verificado por identidade de ponteiro.

Real, mas não medido. A questão interessante — se uma topologia de embedding mais rica ajuda um transformer — permanece aberta. Este registro não a responde, nem a favor nem contra. Meu benchmark (seção 4b) também não: nas tarefas que montei, o acoplamento não se distinguiu da capacidade bruta de representação. O que ficou provado é a existência e a robustez da estrutura, não o seu valor preditivo.

Errado e corrigível. As fórmulas de $f_{\lambda\lambda}$ e $f_{\lambda t}$ precisam ser rederivadas e o $K$ da seção 5.5 recalculado. O $0{,}845$ publicado não é reprodutível a partir das fórmulas do documento.

A conclusão que me parece defensável é mais estreita do que o título do registro sugere, e mais interessante do que "a stack funciona". A contribuição real do ΨQRH, no estado atual, é uma construção geométrica correta e verificável — uma superfície paramétrica com acoplamento demonstrável, e um demonstrador de que a curvatura de um embedding não é o critério certo para julgá-la. O acoplamento é. Essa distinção vale mais do que a tabela de perplexidade que a acompanha.

Reproduzir

O demo acima roda a forma fechada das duas superfícies. Todo o resto deste artigo sai de três scripts curtos:

Arquivos do registro: zenodo.org/records/20798102.

O demo

Os dois embeddings lado a lado. À esquerda a superfície paramétrica do registro, com acoplamento λ–t. À direita uma soma separável, o análogo de wte+wpe. A cor é altura, a luz vem da normal analítica.

A única coisa que a curvatura de fato separa

f(λ,t) · duas famílias de embedding na mesma escala
EXACT superficie-acoplada.glsl
Como ler a imagem

Repare na direita: as cristas correm sempre na horizontal e na vertical. É uma chapa ondulada, soma de duas curvas 1D, e a derivada mista f_λt é exatamente zero em todo ponto. Na esquerda as cristas se inclinam e se cruzam em diagonais — isso é acoplamento: mover λ muda a fase em t. O slider α deforma essas diagonais, mas não as apaga: mesmo com α = 0 a derivada mista continua não-nula em 100% dos pontos, porque ωt aparece dentro dos dois fatores. Não há posição do slider em que a esquerda vire a direita.

O que ainda não está provado

Duas correções a afirmações do próprio registro, ambas verificáveis por sympy. (1) A seção 6.3 diz que "K=0 é propriedade de embeddings lineares" — é falso: o painel da direita tem K≠0 em 100% dos pontos que amostrei. O que se anula no embedding separável é a derivada mista f_λt, não a curvatura gaussiana. (2) As fórmulas de f_λλ e f_λt publicadas na seção 5.4 estão erradas: trocam seno por cosseno e omitem termos cruzados, e o K médio de 0,845 da seção 5.5 não é reproduzível a partir delas. Este shader usa as derivadas corrigidas, diferenciadas à mão e conferidas contra sympy.

O que já é exato

Forma fechada, sem diferenças finitas. O erro do benchmark original foi justamente usar torch.diff ao longo do índice da sequência, o que mede a curvatura de uma curva 1D — e a curvatura gaussiana de uma curva é zero por definição, não por medição.

superficie-acoplada.glsl Um contexto WebGL2 é criado só ao clicar. O código é buscado de ../shaders/superficie-acoplada.glsl.

Continue lendo

Mais recenteA geometria localiza; ela não infereAnteriorA superposição é uma característica, não um bug

← todos os artigos