antonio leandro

ia generativa

RoFormer: Enhanced Transformer with Rotary Position Embedding

paper · Su, Jianlin, Lu, Yu, Pan, Shengfeng, Murtadha, Ahmed, Wen, Bo, Liu, Yunfeng · · ~42 min de leitura do original

a tese

posição não precisa ser somada ao embedding: gire query e key por um ângulo proporcional ao índice do token e o produto interno passa a depender só da distância entre eles

o que fica

  1. Codificação de posição aditiva mistura conteúdo e posição no mesmo vetor; a rotação não mistura, porque o produto interno de dois vetores girados depende apenas da diferença dos ângulos.
  2. A matriz de rotação é ortogonal e preserva a norma do vetor, e é por isso que RoPE encaixa em linear attention — os esquemas relativos aditivos anteriores não encaixam, porque só existem dentro do score expandido.
  3. RoPE não tem tabela de posições para treinar: a posição vira ângulo, então não há comprimento máximo embutido nos parâmetros do modelo.
  4. O decaimento da dependência com a distância vem da escolha das frequências herdada do transformer original, não da rotação em si.
  5. Os ganhos medidos em 2021 foram modestos e mistos: 27,5 contra 27,3 de BLEU no WMT 2014 en-de, e o RoFormer perde para o BERT em três das seis tarefas GLUE testadas.
  6. Os autores declaram que não sabem explicar por que RoPE converge mais rápido nem por que vai melhor em texto longo — a teoria entrega a construção, não o resultado.

o problema

Self-attention é uma soma ponderada sobre todos os tokens. Embaralhe a entrada e a saída embaralha junto, sem mudar de valor: a arquitetura não tem noção nenhuma de ordem. Alguém precisa injetar a posição, e a escolha do transformer original foi somar um vetor senoidal ao embedding antes das projeções de query, key e value.

Somar funciona, mas cobra. Quando você expande o produto q_m · k_n com embeddings somados, aparecem quatro termos: conteúdo com conteúdo, conteúdo com posição (duas vezes) e posição com posição. Os dois termos cruzados casam significado com índice, e trabalho posterior encontrou pouca correlação neles. As versões treináveis, como a do BERT, trazem outro limite: uma tabela de L vetores, um por posição, e a posição L+1 simplesmente não existe. As alternativas relativas — Shaw, Transformer-XL, T5, DeBERTa — atacam o problema certo, mas todas operam remendando o score de atenção já expandido, somando bias ou embeddings extras dentro da forma bilinear. Isso as prende à atenção quadrática: quem nunca materializa a matriz N×N não tem onde enfiar o remendo.

a ideia

Em vez de somar posição, multiplicar. Gire o vetor da query por um ângulo , onde m é a posição, e o vetor da key por . O produto interno de dois vetores girados no plano depende só da diferença dos ângulos: (m−n)θ. Você aplica algo absoluto, token a token, e o que sobrevive no score é relativo — de graça, sem termo extra.

O paper não propõe a rotação e justifica depois. Ele parte da exigência de que exista uma função g tal que ⟨f_q(x_m, m), f_k(x_n, n)⟩ = g(x_m, x_n, m−n) e resolve isso em duas dimensões usando a forma complexa dos vetores. A rotação cai como solução. É a diferença entre um truque que funciona e uma construção que você sabe de onde veio.

como funciona

Divida as d dimensões em d/2 pares. Cada par é um plano 2D com sua própria frequência, θ_i = 10000^(-2(i-1)/d) — a mesma progressão do senoidal de 2017, agora usada como velocidade angular em vez de valor somado. Para o token na posição m, gire cada par por mθ_i. A rotação entra depois de W_q e W_k, antes do produto escalar. Não entra no value.

A matriz de rotação resultante é bloco-diagonal e quase toda zero. Multiplicá-la de forma explícita seria desperdício, então o paper dá a realização eficiente, elemento a elemento:

rope(x, m):
    c = [cos(m*θ_1), cos(m*θ_1), cos(m*θ_2), cos(m*θ_2), ...]
    s = [sin(m*θ_1), sin(m*θ_1), sin(m*θ_2), sin(m*θ_2), ...]
    x_swap = [-x_2, x_1, -x_4, x_3, ...]
    return x * c + x_swap * s

Duas multiplicações e uma soma por token. Zero parâmetro treinável.

O decaimento de longo prazo sai de uma transformação de Abel sobre a soma dos pares: a cota superior do produto interno envolve somas parciais das exponenciais, e essas somas encolhem conforme |m−n| cresce, dado aquele escalonamento de frequências. Para linear attention, como a rotação preserva a norma, basta aplicá-la à saída dos feature maps não negativos de q e k. O denominador fica sem rotação, para não arriscar divisão por zero — o que faz o numerador poder conter termos negativos e os pesos deixarem de ser estritamente probabilísticos. Os autores argumentam que ainda modela importância. É argumento, não prova.

o que isso custou

A evidência empírica de 2021 é fraca para o tamanho da adoção posterior. Em tradução, 27,5 contra 27,3 de BLEU. No GLUE, o RoFormer ganha em MRPC, STS-B e QQP e perde em SST-2, QNLI e MNLI — três de seis, com o salto do QQP (71,2 para 86,4) grande demais para não pedir explicação que o paper não dá. Tudo rodou em dois servidores com 4 V100, com BERT-base e 100 mil passos.

As limitações declaradas são honestas e são as que importam. Os autores dizem que não têm explicação para a convergência mais rápida e que também não têm explicação fiel para a vantagem em texto longo — justamente as duas coisas que fazem alguém adotar o método. O ganho no CAIL2019-SCM ao subir o corte de 512 para 1024 tokens (68,29% para 69,79%) é apresentado como generalização, sem mecanismo.

Há também o que a construção não faz: a posição vive apenas no score de atenção, o value não a carrega, e o decaimento depende da base 10.000 escolhida por herança, não por derivação.

onde isso aparece hoje

RoPE virou o esquema posicional padrão dos modelos abertos. A família LLaMA adotou desde a primeira versão e manteve em Llama 2 e Llama 3; o PaLM trocou embeddings absolutos e relativos por RoPE; o DeepSeek-V3 o carrega dentro do seu mecanismo de atenção comprimida. O senoidal de Attention Is All You Need sobreviveu como frequência, não como soma.

O efeito de segunda ordem é o mais consequente: como a posição virou ângulo, uma função contínua do índice em vez de uma linha de tabela, dá para mexer na escala dos ângulos depois do treino. Boa parte do esforço posterior para esticar janela de contexto além do comprimento treinado opera exatamente aí — sobre um método cujo próprio paper avaliou em 512 e 1.024 tokens.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·