Sobes.tech
Middle — Senior

Какво е RoPE (завъртащи се позиционни вграждания) и какви са предимствата му?

sobes.tech AI

Отговор от AI

RoPE (rotativни позиционни вграждания) е начин за кодиране на позиционната информация в трансформаторите, който се различава от класическите позиционни вграждания (например, синусоидални или обучаеми). Вместо да добавя позиционен вектор към входните вграждания, RoPE въвежда позиционната информация чрез въртене (rotary) на ключовете и заявките в механизма за внимание.

Идеята е, че всяка позиция се кодира като въртене в векторното пространство, и при изчисляването на скаларното произведение на вниманието се взема предвид относителното изместване между позициите. Това позволява на модела по-добре да улавя относителните позиции, а не абсолютните, което подобрява обобщението върху последователности с различна дължина.

Предимства на RoPE:

  • Поддръжка на относителни позиционни отношения без явно добавяне на позиционни вектори.
  • Подобрена способност за обобщение на по-дълги последователности, отколкото тези, на които е обучен моделът.
  • По-естествена интеграция с механизма за внимание, тъй като позиционната информация се въвежда чрез въртене на ключовете и заявките.

Например, ако q и k са вектори на заявка и ключ, RoPE прилага към тях позиционно въртене:

import numpy as np

def apply_rope(x, pos, dim):
    # x — вектор с размер dim
    # pos — позиция
    # dim — размер, трябва да е четен
    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)

По този начин позицията влияе върху въртенето на векторите, което се взема предвид при изчисляването на вниманието.