Какво е 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)
По този начин позицията влияе върху въртенето на векторите, което се взема предвид при изчисляването на вниманието.