A arquitetura Transformer, por processar todos os tokens de uma sequência em paralelo, não tem uma noção inerente da ordem das palavras. Ela vê as palavras como um “saco de palavras” embaralhado1 O Positional Encoding é a solução genial para este problema.

Trata-se de um vetor de informação que é somado ao embedding de cada token. O resultado é um novo vetor que contém duas informações cruciais: o significado da palavra (do embedding) e sua posição na frase (do positional encoding).

Diagrama do Processo (Mermaid):

Snippet de código

graph TD
    subgraph Entrada
        A("Frase: 'Eu comi antes'")
    end

    subgraph "Passo 1: Vetores de Significado (Embeddings)"
        W1["Palavra: 'Eu'"] --> E1["Embedding de 'Eu'"]
        W2["Palavra: 'comi'"] --> E2["Embedding de 'comi'"]
        W3["Palavra: 'antes'"] --> E3["Embedding de 'antes'"]
    end

    subgraph "Passo 2: Vetores de Posição (Positional Encoding)"
        P1["Posição 0"] --> PE1["Vetor para Posição 0"]
        P2["Posição 1"] --> PE2["Vetor para Posição 1"]
        P3["Posição 2"] --> PE3["Vetor para Posição 2"]
    end

    subgraph "Passo 3: Combinação"
        E1 -- "Soma (+)" --> F1["Vetor Final<br>Significado + Posição"]
        PE1 -- "Soma (+)" --> F1

        E2 -- "Soma (+)" --> F2["Vetor Final<br>Significado + Posição"]
        PE2 -- "Soma (+)" --> F2

        E3 -- "Soma (+)" --> F3["Vetor Final<br>Significado + Posição"]
        PE3 -- "Soma (+)" --> F3
    end

    subgraph "Passo 4: Entrada para o Transformer"
        F1 --> T{{Bloco Transformer}}
        F2 --> T
        F3 --> T
    end

    A --> W1 & W2 & W3

Existem duas abordagens principais para criar esses vetores de posição.

1. Positional Encoding Fixo (Seno e Cosseno)

Esta foi a abordagem proposta no artigo original “Attention Is All You Need”. Ela utiliza um par de fórmulas matemáticas com funções de seno e cosseno para gerar uma “assinatura” posicional única e determinística para cada posição na sequência.

As Fórmulas:

  • pos: A posição da palavra na sequência (0, 1, 2, …).

  • i: O índice da dimensão dentro do vetor de embedding (0, 1, 2, …).

  • d_model: A dimensão total do vetor de embedding (ex: 512).

Intuição: As fórmulas geram ondas (senoides e cossenoides) com diferentes frequências para cada dimensão do vetor. A combinação dessas ondas cria um padrão único para cada posição, permitindo ao modelo não só identificar uma posição, mas também entender as distâncias relativas entre as palavras.

Vantagens:

  • Generalista: Funciona bem para uma grande variedade de dados e tarefas, como tradução e geração de texto ampla (ex: ChatGPT).

  • Sequências Longas: É especialmente eficaz em lidar com sequências de texto muito longas, um dos maiores desafios da IA.

  • Eficiente: Não precisa ser treinado, pois é calculado por uma fórmula fixa, economizando recursos computacionais.

2. Learned Positional Embeddings (Posições Aprendidas)

Nesta abordagem, em vez de usar uma fórmula fixa, o modelo aprende os vetores posicionais durante o processo de treinamento, da mesma forma que aprende os embeddings das palavras.

Intuição: O modelo desenvolve sua própria “intuição” sobre o significado das posições com base nos padrões dos dados com os quais é treinado. Ele cria as melhores representações posicionais para a tarefa específica em questão.

Vantagens:

  • Especializado: Pode capturar nuances posicionais muito específicas do domínio dos dados de treinamento, sendo ideal para tarefas com padrões repetitivos e bem definidos.

  • Exemplos de Uso: Geração de código-fonte, análise de documentos jurídicos ou processamento de prontuários médicos.

Qual é o melhor?

A resposta é: depende da tarefa. Para modelos de propósito geral que precisam lidar com textos longos e variados, o método fixo (seno e cosseno) é geralmente preferido por sua robustez e capacidade de generalização. Para modelos altamente especializados, o método de posições aprendidas pode alcançar um desempenho superior ao se adaptar perfeitamente aos padrões do dataset.


Perguntas e Respostas da Aula

  1. Pergunta: Por que a arquitetura Transformer precisa de um mecanismo explícito como o “Positional Encoding”?

    • Resposta: Porque a arquitetura processa todos os tokens de uma sequência em paralelo, e não sequencialmente como as RNNs. Sem o Positional Encoding, o modelo não teria como saber a ordem original das palavras, tratando a frase “Eu comi antes de dormir” da mesma forma que “dormir antes eu comi”, perdendo o sentido da sentença.
  2. Pergunta: Qual é a ideia central por trás do Positional Encoding Fixo, que utiliza funções de seno e cosseno?

    • Resposta: A ideia é usar as funções de seno e cosseno com diferentes frequências para criar um vetor de “assinatura” único e determinístico para cada posição na sequência. Essa abordagem permite que o modelo não apenas identifique a posição de uma palavra, mas também infira as distâncias relativas entre as palavras de forma consistente.
  3. Pergunta: Como funciona o método de “Learned Positional Embeddings” (Posições Aprendidas)?

    • Resposta: Neste método, os vetores de posição não são pré-calculados. Em vez disso, eles são inicializados como parâmetros treináveis e o modelo aprende as representações posicionais mais adequadas durante o processo de treinamento, com base nos padrões dos dados específicos da tarefa, de forma análoga ao aprendizado dos embeddings das palavras.
  4. Pergunta: Em que tipo de tarefa o método de “Posições Aprendidas” tende a ser mais vantajoso que o método fixo? Dê um exemplo citado na aula.

    • Resposta: O método de posições aprendidas é mais vantajoso em tarefas especializadas, com dados que possuem uma estrutura mais estática e padrões repetitivos. Um exemplo citado na aula é a geração de código-fonte ou a análise de documentos jurídicos, onde o modelo pode aprender as nuances posicionais específicas daquele domínio.
  5. Pergunta: Qual é a principal vantagem do método de Positional Encoding Fixo (seno e cosseno) quando se trata de processar sequências muito longas?

    • Resposta: Sua principal vantagem é a capacidade de generalizar para sequências mais longas do que as vistas durante o treinamento. Como ele é baseado em uma fórmula matemática e não em dados aprendidos, ele pode continuar gerando assinaturas posicionais únicas para posições que nunca viu antes, sendo mais robusto para textos extensos.

Materiais Extras para Aprofundamento

  1. Artigo (com Visualizações): “Mastering Positional Embeddings in Transformers”

  2. Vídeo: “Positional Encoding | The Illustrated Transformer”

    • Resumo: Um vídeo curto e direto que anima os conceitos do famoso post “The Illustrated Transformer”. É uma forma rápida e visual de entender como os vetores de embedding e de posição são somados.

    • Link: https://www.youtube.com/watch?v=dichdfPgbpE

  3. Artigo de Pesquisa: “Rethinking the Positional Encoding in Transformers”

    • Resumo: Para os mais curiosos, este artigo acadêmico explora diferentes métodos de codificação posicional, incluindo o “Rotary Positional Embedding (RoPE)”, que é usado em modelos mais modernos como o LLaMA. Mostra que este ainda é um campo de pesquisa ativo.

    • Link: https://blog.eleuther.ai/rotary-embeddings/