Mi az a RoPE (forgó pozíciós beágyazások), és milyen előnyei vannak?
sobes.tech MI
Válasz az MI-től
RoPE (rotary pozíciós beágyazások) egy módszer a pozíciós információ kódolására a transzformátorokban, amely eltér a klasszikus pozíciós beágyazásoktól (például szinuszos vagy tanítható). Ahelyett, hogy a bemeneti beágyazásokhoz hozzáadnánk egy pozíciós vektort, a RoPE a pozíciós információt a kulcs- és kérésvektorok forgatásával (rotary) vezeti be a figyelmi mechanizmusban.
Az ötlet az, hogy minden pozíciót egy forgatásként kódolnak a vektortérben, és a figyelem számításakor figyelembe veszik a pozíciók közötti relatív eltolódást. Ez lehetővé teszi, hogy a modell jobban megragadja a relatív pozíciókat, nem pedig az abszolútakat, javítva az általánosítást különböző hosszúságú szekvenciákon.
A RoPE előnyei:
- Támogatja a relatív pozíciós viszonyokat anélkül, hogy explicit módon hozzáadnánk pozíciós vektorokat.
- Javított általánosítási képesség hosszabb szekvenciákra, mint amilyenre a modellt tanították.
- Természetesebb integráció a figyelmi mechanizmussal, mivel a pozíciós információ a kulcsok és kérdések forgatásával kerül bevezetésre.
Például, ha q és k kérés- és kulcsvektorok, a RoPE pozíciós forgatást alkalmaz rájuk:
import numpy as np
def apply_rope(x, pos, dim):
# x — dim méretű vektor
# pos — pozíció
# dim — dim, párosnak kell lennie
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)
Így a pozíció befolyásolja a vektorok forgását, ami figyelembe vételre kerül az figyelem számításakor.