Positional encoding é um componente fundamental da arquitetura Transformer (architecture) em Deep learning. Os transformers processam sequências de entrada em paralelo, e não sequencialmente, portanto, eles não possuem um senso inerente de ordem. O positional encoding adiciona um sinal único à embedding de cada token que representa sua posição na sequência, permitindo que o modelo compreenda a ordem das palavras e a distância entre elas. Essa técnica foi introduzida no artigo seminal de 2017 "Attention Is All You Need" e se tornou essencial para Large language models e outros sistemas de processamento de sequências.
A ideia central é modificar as embeddings de entrada antes que elas entrem nas camadas de atenção do transformer. Para cada posição na sequência, um vetor é gerado, codificando o índice da posição. Esse vetor é somado à embedding do token, produzindo uma representação combinada que carrega tanto informações semânticas quanto posicionais. O mecanismo de atenção pode então usar esses sinais posicionais para calcular relações entre tokens com base em suas distâncias relativas.
Codificação Senoidal
O artigo original do transformer propôs um esquema de codificação posicional senoidal. Para uma posição pos e dimensão i, o valor da codificação é:
- PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
- PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
onde d_model é a dimensão da embedding. Essa escolha tem várias propriedades desejáveis. As funções seno e cosseno produzem valores em um intervalo limitado, e a codificação para cada posição é determinística. Mais importante, a relação linear entre posições permite que o modelo aprenda facilmente posições relativas: para qualquer deslocamento fixo k, PE(pos+k) pode ser expresso como uma função linear de PE(pos). Essa propriedade ajuda o mecanismo de atenção a generalizar para sequências mais longas do que aquelas vistas durante o treinamento.
A frequência diminui ao longo da dimensão, com dimensões mais baixas oscilando rapidamente e as mais altas lentamente. Isso cria uma representação multiescala semelhante à forma como o cérebro codifica informações espaciais. Os autores originais escolheram esse método porque ele não requer parâmetros aprendidos e pode, teoricamente, lidar com sequências de comprimento arbitrário.
Embeddings Posicionais Aprendidas
Uma alternativa à codificação senoidal é aprender embeddings posicionais durante o treinamento. Nessa abordagem, a cada índice de posição é atribuído um vetor treinável, e esses vetores são otimizados junto com o resto do modelo. O modelo aprende a representação posicional mais adequada para sua tarefa.
Embeddings aprendidas foram usadas nas primeiras implementações de transformers, incluindo o modelo BERT original. Elas oferecem flexibilidade porque o modelo pode adaptar a codificação à distribuição específica dos dados. No entanto, elas são limitadas a um comprimento máximo de sequência definido no treinamento e exigem parâmetros adicionais. Para sequências muito longas, o custo de memória pode se tornar significativo.
Tanto as codificações senoidais quanto as aprendidas foram amplamente adotadas. Muitos modelos modernos, como as variantes do GPT, usam embeddings aprendidas, enquanto outros, como o transformer original, usam senoidais. Pesquisas mostram que ambos os métodos têm desempenho comparável em muitas tarefas, mas embeddings aprendidas são frequentemente preferidas por sua simplicidade de implementação.
Papel na Arquitetura Transformer
Na arquitetura transformer, a codificação posicional é aplicada no estágio de entrada. Os tokens de entrada são primeiro convertidos em embeddings por meio de uma matriz de embeddings aprendida. Em seguida, o vetor de codificação posicional é adicionado elemento a elemento à embedding do token. Esse vetor combinado é passado pelas camadas de atenção multi-cabeça.
O mecanismo de atenção calcula vetores de consulta, chave e valor a partir da entrada. As informações posicionais influenciam esses cálculos, permitindo que o modelo atenda aos tokens com base em suas posições relativas. Por exemplo, em uma frase, o modelo pode aprender que um verbo deve atender ao seu sujeito, que geralmente está algumas posições antes.
Sem a codificação posicional, o transformer trataria a entrada como um saco de palavras, perdendo toda a informação de ordem. Isso tornaria tarefas como modelagem de linguagem e tradução impossíveis. A codificação posicional é, portanto, uma inovação crítica que tornou os transformers eficazes para dados sequenciais.
Variações e Melhorias
Desde a proposta original, muitas variações de codificação posicional foram desenvolvidas. Uma variante notável é a codificação posicional relativa, que codifica a distância entre tokens em vez de posições absolutas. Essa abordagem, introduzida em modelos como Transformer-XL e T5, pode generalizar melhor para sequências mais longas e é mais interpretável.
Outra variante é a codificação posicional rotativa (RoPE), usada em modelos como LLaMA e PaLM. A RoPE aplica uma matriz de rotação aos vetores de consulta e chave com base em suas posições, preservando informações relativas enquanto permite que o modelo extrapole para sequências mais longas. Esse método se tornou popular em grandes modelos de linguagem recentes.
Outras abordagens incluem ALiBi (Attention with Linear Biases), que adiciona um viés linear às pontuações de atenção com base na distância, e vieses relativos aprendidos usados em modelos como T5. Esses métodos muitas vezes eliminam a necessidade de embeddings posicionais explícitas, simplificando a arquitetura.
Aplicações em Grandes Modelos de Linguagem
A codificação posicional é fundamental para todos os Large language models modernos. Modelos como GPT-3, GPT-4, Claude e Gemini dependem de informações posicionais para gerar texto coerente e contextualmente apropriado. A escolha do método de codificação pode afetar a capacidade do modelo de lidar com documentos longos, código e outros dados estruturados.
Por exemplo, os modelos GPT da OpenAI usam embeddings posicionais aprendidas, enquanto Google DeepMind usa codificações rotatórias em modelos como Chinchilla e Gopher. A tendência para janelas de contexto mais longas impulsionou a pesquisa por métodos de codificação posicional mais eficientes e escaláveis.
A codificação posicional também desempenha um papel em transformers multimodais que processam imagens, áudio e texto. Em transformers de visão, as codificações posicionais são adicionadas a patches de imagem para preservar o layout espacial. No reconhecimento de fala, elas ajudam a modelar a ordem temporal.
Considerações Teóricas e Práticas
De uma perspectiva teórica, a codificação posicional é um viés indutivo que injeta conhecimento prévio sobre a ordem da sequência no modelo. A capacidade da codificação senoidal de representar posições relativas linearmente é uma vantagem teórica importante. No entanto, alguns pesquisadores argumentam que embeddings aprendidas podem capturar relações posicionais mais complexas.
Na prática, a escolha da codificação afeta a estabilidade do treinamento e o desempenho. As codificações senoidais são fixas e não exigem parâmetros adicionais, o que pode reduzir o overfitting. Embeddings aprendidas podem ser mais flexíveis, mas podem exigir mais dados para treinar efetivamente.
Outra consideração é a extrapolação - a capacidade de lidar com sequências mais longas do que aquelas vistas durante o treinamento. Codificações senoidais podem, teoricamente, extrapolar para comprimentos arbitrários, mas na prática, os mecanismos de atenção muitas vezes lutam com comprimentos não vistos. Embeddings aprendidas não podem extrapolar, pois são definidas para um comprimento máximo fixo. Isso levou ao desenvolvimento de métodos como RoPE e ALiBi, que melhoram a extrapolação.
Considerações Teóricas e Práticas
De uma perspectiva teórica, a codificação posicional é uma forma de viés indutivo que incorpora a ordem da sequência no modelo. A capacidade da codificação senoidal de representar posições relativas linearmente é uma vantagem teórica fundamental. No entanto, alguns pesquisadores argumentam que embeddings aprendidas podem capturar relações posicionais mais complexas.
Na prática, a escolha da codificação afeta a estabilidade do treinamento e o desempenho. Codificações senoidais são fixas e não exigem parâmetros extras, o que pode reduzir o overfitting. Embeddings aprendidas podem ser mais flexíveis, mas podem exigir mais dados para treinar efetivamente.
Outra consideração é a extrapolação - a capacidade de lidar com sequências mais longas do que as vistas durante o treinamento. Codificações senoidais podem, em teoria, extrapolar para comprimentos arbitrários, mas na prática, os mecanismos de atenção frequentemente têm dificuldades com comprimentos não vistos. Embeddings aprendidas não podem extrapolar, pois são definidas para um comprimento máximo fixo. Isso motivou pesquisas em métodos como RoPE e ALiBi, que melhoram a extrapolação.
Considerações Teóricas e Práticas
De uma perspectiva teórica, a codificação posicional é um viés indutivo que injeta conhecimento prévio sobre a ordem da sequência no modelo. A capacidade da codificação senoidal de representar posições relativas linearmente é uma vantagem teórica fundamental. No entanto, alguns pesquisadores argumentam que embeddings aprendidas podem capturar relações posicionais mais complexas.
Na prática, a escolha da codificação afeta a estabilidade do treinamento e o desempenho. Codificações senoidais são fixas e não exigem parâmetros adicionais, o que pode reduzir o sobreajuste. Embeddings aprendidas podem ser mais flexíveis, mas podem exigir mais dados para treinar efetivamente.
Outra consideração é a extrapolação - a capacidade de lidar com sequências mais longas do que as vistas durante o treinamento. Codificações senoidais podem, teoricamente, extrapolar para comprimentos arbitrários, mas na prática, os mecanismos de atenção muitas vezes têm dificuldade com comprimentos não vistos. Embeddings aprendidas não podem extrapolar, pois são definidas para um comprimento máximo fixo. Isso motivou pesquisas sobre métodos como RoPE e ALiBi que melhoram a extrapolação.
Direções Futuras
A pesquisa sobre codificação posicional continua evoluindo. Com a demanda crescente por janelas de contexto longas, novos métodos estão sendo desenvolvidos para codificar eficientemente posições em sequências de centenas de milhares ou milhões de tokens. Representações posicionais hierárquicas e contínuas estão sendo exploradas.
Alguns modelos recentes, como Mamba e outros modelos de espaço de estado, propuseram alternativas que não requerem codificação posicional explícita. No entanto, os transformers continuam dominantes, e a codificação posicional permanece uma área-chave de estudo.
Até 2023, o campo está se movendo em direção a representações posicionais mais adaptativas e orientadas por dados, mas os conceitos fundamentais introduzidos em 2017 continuam sendo a base.
Conclusão
A codificação posicional é uma técnica simples, porém poderosa, que permite aos transformers processar dados sequenciais. Ao injetar informações de ordem nos embeddings dos tokens, ela possibilita que o modelo compreenda linguagem, código e outros tipos de dados ordenados. Tanto as codificações senoidais quanto as aprendidas se mostraram eficazes, e a compreensão desse mecanismo é essencial para quem estuda Artificial intelligence e Machine learning modernos.