Sobes.tech
Middle — Senior

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.