O que é RoPE (embeddings posicional rotativo) e quais são as suas vantagens?
sobes.tech IA
Resposta da IA
RoPE (embeddings posicionals rotatórios) é uma forma de codificação da informação posicional em transformadores, que difere das embeddings posicionals clássicas (por exemplo, sinusoidais ou treináveis). Em vez de adicionar um vetor posicional aos embeddings de entrada, o RoPE introduz a informação posicional através da rotação (rotary) dos vetores de chaves e consultas no mecanismo de atenção.
A ideia é que cada posição seja codificada como uma rotação no espaço vetorial, e ao calcular o produto escalar de atenção, considera-se o deslocamento relativo entre as posições. Isso permite que o modelo capture melhor as posições relativas, em vez de absolutas, melhorando a generalização em sequências de diferentes comprimentos.
Vantagens do RoPE:
- Suporte para relações posicionais relativas sem adicionar explicitamente vetores posicionais.
- Melhor capacidade de generalização para sequências mais longas do que aquelas usadas para treinar o modelo.
- Integração mais natural com o mecanismo de atenção, pois a informação posicional é introduzida através da rotação de chaves e consultas.
Por exemplo, se q e k são vetores de consulta e chave, o RoPE aplica uma rotação positional a eles:
import numpy as np
def apply_rope(x, pos, dim):
# x — vetor de dimensão dim
# pos — posição
# dim — dimensão, deve ser par
x_ = x.reshape(dim // 2, 2)
theta = pos / 10000 ** (2 * np.arange(dim // 2) / dim)
cos_theta = np.cos(theta)
sin_theta = np.sin(theta)
x_rotated = np.empty_like(x_)
x_rotated[:, 0] = x_[:, 0] * cos_theta - x_[:, 1] * sin_theta
x_rotated[:, 1] = x_[:, 0] * sin_theta + x_[:, 1] * cos_theta
return x_rotated.reshape(dim)
Dessa forma, a posição influencia na rotação dos vetores, o que é considerado ao calcular a atenção.