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 mθ, onde m é a posição, e o vetor da key por nθ. 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.