1 pontos por GN⁺ 2025-09-16 | 1 comentários | Compartilhar no WhatsApp
  • Em espaços de embedding de alta dimensionalidade, é possível representar inúmeros conceitos usando quase-ortogonalidade (quasi-orthogonality) em vez de ortogonalidade perfeita
  • O lema de Johnson-Lindenstrauss garante que dados arbitrários de alta dimensão podem ser projetados em dimensões menores com quase nenhuma perda de informação
  • No processo de otimização, o desenho da função de perda é importante, pois uma função de perda básica pode gerar distribuições de vetores ineficientes ou enviesadas
  • Os resultados experimentais mostram que a capacidade real do espaço de embeddings é muito maior do que se supunha teoricamente, e que de milhões a bilhões de conceitos podem coexistir naturalmente
  • Essas descobertas têm grande significado prático em aplicações de machine learning, como representação de dados e redução de dimensionalidade no projeto de embeddings

Introdução: a pergunta sobre a capacidade do espaço de embeddings de modelos de linguagem

Na recente série de vídeos sobre modelos Transformer do 3Blue1Brown, Grant Sanderson levantou uma pergunta interessante: como o espaço de embeddings de 12.288 dimensões do GPT-3 consegue conter centenas de milhões de conceitos do mundo real
Essa dúvida se conecta à geometria de alta dimensão e a um resultado matemático chamado lema de Johnson-Lindenstrauss (JL)
Ao explorar isso, surgiram novos insights sobre propriedades fundamentais de espaços vetoriais e otimização, o que acabou levando até a uma colaboração com Grant

Quase-ortogonalidade de vetores e capacidade do espaço de embeddings

  • Em um espaço N-dimensional, existem apenas N vetores totalmente ortogonais
  • Na prática, se permitirmos relações quase-ortogonais (quasi-orthogonal) com pequenos desvios de 90 graus (por exemplo, ângulos entre 85 e 95 graus), o número de vetores representáveis no mesmo espaço cresce exponencialmente
  • No vídeo de Grant, é mostrada uma visualização em que 10 mil vetores unitários são dispostos em um espaço de 100 dimensões de forma quase ortogonal
  • Porém, ao reproduzir o mesmo experimento, foi descoberta uma armadilha sutil no desenho da função de perda de otimização

Problemas e padrões da função de perda

  • Função de perda básica:
    loss = (dot_products.abs()).relu().sum()
  • Sobre a esfera unitária real, essa função de perda apresenta dois problemas
    1. Gradient Trap: quando o ângulo entre vetores se aproxima de 90 graus, o gradiente atua com força, mas perto de 0 ou 180 graus o gradiente fica quase em 0, bloqueando melhorias
    2. Solução de 99%: a técnica de otimização minimiza a perda total encontrando uma disposição em que, entre 10 mil vetores, cada vetor é corretamente ortogonal a 9.900 deles, mas fica quase paralelo a 99 outros (ou seja, cópias de um vetor de referência)
  • Essa solução, vista no conjunto, é fundamentalmente diferente do esperado, o que exige uma função de perda mais sofisticada
  • Por isso, a função de perda foi alterada para aplicar uma penalidade exponencial: loss = exp(20*dot_products.abs()**2).sum()
  • Esse método produz resultados mais próximos da distribuição desejada (o maior ângulo par a par fica em cerca de 76,5 graus)

Lema de Johnson-Lindenstrauss (JL): garantia geométrica

  • O lema JL garante que, mesmo ao projetar aleatoriamente um conjunto arbitrário de pontos de dados de alta dimensão em uma dimensão menor, as distâncias euclidianas são quase preservadas
  • Para de 1 a N pontos, fator de erro ε e dimensão de projeção k:
    (1-ε)||u-v||² ≤ ||f(u)-f(v)||² ≤ (1+ε)||u-v||²
  • A dimensão mínima necessária k é: k ≥ (C/ε²) * log(N)
    em que C é uma constante que ajusta a probabilidade de sucesso
  • Em geral, o valor de C costuma ser tomado de forma conservadora entre 4 e 8, mas em métodos especiais de projeção (por exemplo, matriz de Hadamard, métodos de otimização) é possível atingir valores menores de C

Áreas de aplicação prática

  1. Redução de dimensionalidade:
    • Ex.) transformar de forma eficiente preferências de clientes de e-commerce de dezenas de milhares de dimensões de produtos para alguns milhares de dimensões
    • Pode ser aplicado em análise em tempo real de dados de alta dimensão, recomendações etc.
  2. Análise do limite de capacidade do espaço de embeddings:
    • Em vez de ortogonalidade perfeita, o espaço representa naturalmente um espectro de similaridades e diferenças entre conceitos
    • Exemplos reais de palavras: "archery", "fire", "gelatinous", "green" etc., cujos significados físicos e abstratos podem se sobrepor em um espaço de alta dimensão

Análise experimental da capacidade de embeddings

  • Em resultados otimizados com transformações como a matriz de Hadamard, o valor de C fica entre 2,5 e 4, e em otimização baseada em GPU pode cair ainda mais
  • Método experimental: projetar sucessivamente N vetores da base padrão em um espaço k-dimensional e repetir a otimização 50 mil vezes
  • Observações:
    1. O valor de C sobe até um pico (~0,9) à medida que N aumenta e depois cai gradualmente
    2. Quanto maior a razão N/k, mais C cai para abaixo de 0,2
  • Isso se deve à eficiência do sphere packing em espaços de alta dimensão
  • Na prática, isso sugere que há margem para representar mais conceitos do que o limite superior teórico indicava

Significado prático para embeddings de modelos de linguagem

  • Dependendo do número de dimensões do embedding k, do ângulo de ortogonalidade aproximada F (90° - ângulo real) e do valor de C, o número de conceitos que podem ser acomodados é: Vectors ≈ 10^(k * F² / 1500)
    • k=12,288, F=1(89°) → 10^8
    • F=2(88°) → 10^32
    • F=3(87°) → 10^73
    • F=5(85°) → mais de 10^200 vetores podem ser armazenados
  • Apenas 86° já supera o número de átomos observáveis no universo (10^80)
  • Em outras palavras, modelos de linguagem reais preservam de forma rica milhões de significados mesmo com dimensões relativamente pequenas

Aplicações práticas e direções futuras

  1. Redução de dimensionalidade eficiente:
    • Ao combinar transformadas de Hadamard, codificação BCH e abordagens baseadas em projeção aleatória, é possível reduzir a dimensionalidade de grandes volumes de dados e acelerar cálculos sem otimização complexa
  2. Projeto de espaços de embedding:
    • O insight sobre a capacidade do espaço ajuda a explicar como grandes modelos de linguagem, como Transformers, conseguem preservar simultaneamente relações semânticas até para conceitos sutis como "Canadian" e "Muppet-like"
  • Em conclusão, os padrões atuais de embedding (1.000 a 20.000 dimensões) são suficientes para representar o conhecimento humano; o ponto crucial é aprender uma disposição ideal dentro desse espaço

Conclusão

  • O ponto de partida foi a investigação de um problema sutil de otimização na função de perda, que levou a insights profundos sobre a geometria de alta dimensão e a estrutura fundamental do machine learning
  • O lema JL, publicado em 1984, hoje fornece uma base central para embeddings em machine learning, representação de informação e princípios de redução de dimensionalidade
  • O texto encerra agradecendo a colaboração de Grant Sanderson, do canal 3Blue1Brown, e de Suman Dev, além de compartilhar o prazer da experiência de pesquisa e escrita

Leitura adicional

  1. Sphere Packings, Lattices and Groups – Conway & Sloane
  2. Database-friendly random projections: Johnson-Lindenstrauss with binary coins – Achlioptas
  3. Hadamard Matrices, Sequences, and Block Designs – Seberry & Yamada

1 comentários

 
GN⁺ 2025-09-16
Comentários no Hacker News
  • As implicações dessa propriedade geométrica são realmente chocantes. Dá para imaginar uma forma simples de estimar quantos vetores quase ortogonais entre si cabem em um espaço de k dimensões. Se você focar apenas no ângulo mínimo entre os vetores, no fim está analisando códigos esféricos (spherical codes). Mesmo assim, o texto não cita nenhuma pesquisa anterior sobre códigos esféricos e, em grande parte, parece ter sido escrito por um modelo de linguagem. Além disso, inúmeras inconsistências básicas reduzem a confiabilidade da conclusão. Por exemplo, no gráfico que mostra o valor de C em função de K e N, o eixo x é K ou N? A legenda diz que o eixo x é N (número de vetores), mas depois o texto explica que C=0.2 apareceu em um "espaço muito grande", enquanto no gráfico C=0.2 só é atingido quando N=30.000 e K=2 — ou seja, 30.000 vetores em um espaço bidimensional! Por outro lado, se o eixo x for K, então o texto está extrapolando um resultado medido com 2 vetores em 30.000 dimensões para o caso de 10^200 vetores em 12.888 dimensões, o que não faz sentido. Quero abordar o trabalho dos outros de forma positiva e amigável, mas a enxurrada de textos escritos por LLM no Hacker News está ficando realmente avassaladora ultimamente

    • Dizer que algo foi gerado por LLM não é algo que dê para provar, e apontar simplesmente que "há erros" é mais direto e mais útil. De todo modo, foi útil você ter apontado erros reais. Naquela figura, parece mais correto interpretar o eixo x como N

    • Eu não conhecia códigos esféricos, o que já mostra como a terminologia dessa área parece pouco familiar. Nem a Wikipédia parece saber muito, e os resultados do Google acabam sendo majoritariamente sobre empacotamentos ótimos, tipo golfe esférico, em menos de 32 dimensões. Às vezes acontece de uma matemática já existente ser redescoberta escondida sob jargão especializado e pouco intuitivo

    • Isso mesmo. Fiquei curioso para saber quais textos explicam melhor as propriedades geométricas e informacionais de espaços vetoriais de alta dimensão, e também códigos esféricos

    • Não consigo ver no gráfico que você citou C chegando a 0.2 quando K=2. K=3 também só vai até C=0.3 antes de parar. Mas também não entendo bem por que isso seria um problema. O autor parece projetar N vetores-base em K dimensões, e C parece algo como uma métrica de erro desse mapeamento do espaço N para o espaço K. Se há algum motivo para essa ideia ser inconsistente com o gráfico, gostaria de ouvir uma explicação mais detalhada. Pelo seu argumento, parece que você nem está lidando com esse conceito em si

  • Acho que o autor está focando demais no caso em que todos os vetores são completamente ortogonais e, por isso, superestimou o nível de erro realmente aceitável. O que importa na prática não é apenas manter vetores ortogonais quase ortogonais, mas garantir a ordenação das distâncias também entre vetores que estão longe da ortogonalidade. Mesmo com um épsilon muito menor, ainda podem surgir problemas reais. Ou seja, considero otimista demais a afirmação de que “como apresentado neste estudo, algo entre 1.000 e 20.000 dimensões é suficiente para conter todo o conhecimento e raciocínio humano”

    • Os vetores normalmente são normalizados na superfície da n-esfera, e a distância que realmente importa no resultado é a similaridade de cosseno. Por isso, na prática, o que importa é o "quase ortogonal". Durante o treinamento, o objetivo é tornar representações sem significado mais “ortogonais” sobre a esfera. Na implementação em hardware real, também há limites de precisão de ponto flutuante, então esse método funciona especialmente bem. E vale notar que essa ideia não foi proposta pela primeira vez nesse blog ou vídeo do YouTube. A relevância desse lema em IA, ou pelo menos no treinamento de redes neurais, já foi mencionada por C. Eliasmith cerca de 10 anos atrás, muito antes de redes de conhecimento de altíssima dimensão como GPT serem treináveis na prática

    • A lógica da tese do OP não é grande coisa, mas ainda assim ela dá esperança quanto à capacidade de representação de algo na casa das 20 mil dimensões

    • Eu também não acho que todos os vetores sejam totalmente ortogonais ou independentes. Há um texto interessante sobre medição de distância, espaço curvilíneo (curvilinear space) e coordenadas oblíquas (skew coordinate): https://news.ycombinator.com/item?id=41873650. Existem perguntas fundamentais como: “quanto a medição de distância muda dependendo da ordem das características?”, “se a ordem de todos os eixos ortogonais mudar, a saída do algoritmo também muda?”, “as características em espaços de alta dimensão são mesmo todas ortogonais a 90 graus?”. Se as características não forem estatisticamente independentes, então na prática a ortogonalidade completa é improvável, e pode haver limites para a utilidade de métricas de distância que assumem independência. Modelos lineares como Naive Bayes, regressão linear, regressão logística, LDA e PCA ficam menos confiáveis com características não independentes. Técnicas como regularização L1 lasso ou L2 ridge também podem ter riscos com outliers ou dados não independentes e não ortogonais. Como é difícil comprimir à força a [ortogonalidade completa], fica difícil dizer que o modelo é suficiente. E, mais fundamentalmente, ainda há a pergunta se é possível codificação simultânea em gbit

  • A sensação de ChatGPT ao longo de grande parte do texto me incomodou bastante e dificultou a leitura. Eu também uso IA para lapidar meu inglês, mas peço para não mudar demais o tom nem o formato, justamente para evitar isso. Ainda assim, acho essa observação matemática realmente interessante. Ela aponta para implicações fundamentais que ajudam a enxergar como grandes modelos de linguagem e outros sistemas de IA realmente funcionam. Quando se observa como dados de alta dimensão são projetados para dimensões menores preservando sua estrutura, dá para ver que esse tipo de mecanismo é central para eficiência e escalabilidade

    • Ironicamente, o seu segundo parágrafo também passa imediatamente a sensação de ter sido retrabalhado pelo ChatGPT, por causa de expressões como “fascinating”, “crucial”, “delving” e pela estrutura do parágrafo

    • Em que partes exatamente você sentiu mais fortemente esse ar de GPT? É pelo estilo de listar muitas coisas?

  • Teorias intuitivas como essa e o lema de Johnson-Lindenstrauss (JL) são centrais para tornar possível a pesquisa de interpretabilidade mecanística em segurança de IA, incluindo SAEs (autoencoders esparsos). Muitas dessas ideias estão bem organizadas no artigo que a Anthropic publicou em 2022: https://transformer-circuits.pub/2022/toy_model/index.html

    • Gostaria de saber onde dá para ver o artigo de fato e onde ele foi publicado
  • Não é o caso de o modelo de linguagem enfiar “conceitos” fixamente nas C dimensões de uma camada (talvez esse número 12k esteja sendo usado assim). Também não é necessário que os vetores sejam perfeitamente ortogonais para tratar conceitos como distintos. LLMs não apenas afastam os conceitos no espaço vetorial; os significados se sobrepõem por toda parte. Essa é justamente a essência de uma representação densa (dense representation). Se você treinar autoencoders esparsos, pode ver quais neurônios ativam por tópico. O Neuronpedia mostra bem como isso aparece na prática: https://www.neuronpedia.org/

    • Justamente essa pesquisa com autoencoders esparsos se baseia na noção de “quase ortogonal” de que o texto fala. Originalmente isso era chamado de hipótese da superposition: https://transformer-circuits.pub/2022/toy_model/index.html Os SAEs servem para decompor vetores densos em “conceitos” esparsos quase ortogonais dentro de um espaço overcomplete. Esse tipo de método funciona bem na prática e pode até ser usado para alinhar com eficiência espaços de embedding entre diferentes LLMs

    • Se você afrouxar a exigência de ortogonalidade perfeita, dá para colocar muito mais informação. Essencialmente, você está agrupando informação adicional (de dimensão fracionária) com dimensões já existentes. Em outras palavras, muitos conceitos não são perfeitamente ortogonais entre si e têm algum grau de sobreposição ou correlação. Então não há nada de tão revolucionário no conteúdo do artigo. E o abuso de palavras como “remarkable”, “fascinating” e “profound” passa mesmo um certo ar de LLM tentando puxar o leitor

  • Um ponto um pouco trivial, mas divertido: você também consegue colocar bilhões de conceitos em um espaço desse tamanho. Mesmo que você só se importe com 4 bits em cada componente do vetor, um vetor de 12.000 dimensões em fp4 tem cerca de 6 KB, o que é comparável a várias páginas de texto em UTF-8. Isso equivale mais ou menos ao nível de um embedding de 64K para 3K tokens. O número de “pensamentos” possíveis representáveis assim é enorme. Ao processar um único token, cada camada combina algo como 60 vezes o “pensamento” anterior com attention e com dados aprendidos pela FFN. É por isso que o sistema inteiro consegue realizar tarefas complexas, como converter Bash em Python ou resolver problemas de palavras. Claro, eu não esperaria que isso fosse 100% eficiente em termos de espaço. Precisa funcionar bem ao compor vetores com diferentes “intensidades”, e o treinamento nem sempre converge para a compressão mais eficiente possível. Ainda assim, mesmo vendo o limite teórico apenas como limite superior, isso dá uma nova intuição de como vetores de altíssima dimensão podem ser preenchidos, na prática, com algo como “pensamentos” até ficar tudo muito denso

  • Minha intuição é bem mais simples — assumindo que os conceitos formam algum tipo de hierarquia, dá para fazer uma conta aproximada de quantos conceitos cabem em um espaço de 12.000 dimensões. Se cada conceito for ortogonal a todos os outros em pelo menos um eixo de alguma dimensão, isso significa que existe uma função que consegue separá-los linearmente, mesmo que a distância de cosseno não seja tão grande. Nesse caso, no limite, seriam possíveis até 12.000! conceitos (fatorial), então sobra espaço demais para quase qualquer taxonomia

    • Para implementar 12.000! conceitos, seria preciso associar uma ordem das dimensões a cada conceito, mas no modelo real a ordem das dimensões não tem significado. Ou seja, [weight_1, weight_2,...] e [weight_2, weight_1,...] são totalmente equivalentes dentro do modelo. Na prática, em modelos de linguagem, dá para pensar que em cada eixo só há três possibilidades: positivo, negativo ou zero, o que dá algo como 3^12.000 conceitos. Na prática, a maioria dos vetores é quase toda zero, exceto por algumas dezenas de eixos, por limitações de tempo de treinamento

    • Esse número é absurdamente maior do que o número de átomos no universo observável (10^80), algo como 10^43741

    • O fato de “a distância de cosseno não ser tão grande” já é uma limitação decisiva

  • Se você já jogou 20 Questions, sabe que não são necessárias 1.000 dimensões para representar bilhões de conceitos. Vetores tão grandes conseguem conter informação bem mais complexa do que apenas bilhões de conceitos. Na verdade, um vetor assim pode representar e permitir recuperar até um poema inteiro junto com a posição de um erro de digitação. Como quando você cola um poema no GPT e pergunta onde está o erro de digitação: em algum lugar das camadas internas, essa informação está sendo distinguida concretamente

    • Na verdade, isso não é trabalho de um vetor simples, mas do modelo inteiro. O modelo todo age mais como um vetor de um trilhão de dimensões

    • Se forem vetores binários, com 20 dimensões já dá para representar pouco mais de 1 milhão de conceitos. Com 30 dimensões, chega a 1 bilhão

  • Muitos comentários já apontaram várias falhas no artigo, mas quero acrescentar uma observação bem básica: a própria afirmação de que 10^200 conceitos cabem em 12k dimensões é absurda demais. É verdade que um espaço vetorial de 12k pode conter inúmeros valores distintos, mas isso não significa que todos sejam conceitos. Esse tipo de afirmação é descabido. Acho que o próprio Shannon iria querer apontar isso

  • O erro central é que, realisticamente, não existem bilhões de conceitos. Os “conceitos” que humanos usam e as “instâncias” ou “entidades” mecânicas são coisas claramente diferentes. Instâncias podem ser infinitas, mas o número de conceitos abstratos que realmente usamos ao pensar é muito mais limitado