
94번 Sinusoidal PE 는 임베딩에 더하는 위치 신호. RoPE (Su et al. 2021, LLaMA/GPT-NeoX 표준) 는 query/key 를 위치에 따라 회전 시킵니다 — 내적이 자연스럽게 상대 위치 에 의존하게 됩니다.
입력 ( 짝수). 차원을 쌍 으로 묶어 각 pair 를 위치 에서 각도 만큼 회전:
함수 rope(x) 를 완성하세요.
x shape (L, d), 짝수.L, d = x.shape
i = np.arange(d // 2)
freq = 1.0 / 10000 ** (2 * i / d) # (d/2,)
ang = np.arange(L)[:, None] * freq[None, :] # (L, d/2)
cos, sin = np.cos(ang), np.sin(ang)
x_even = x[:, 0::2]; x_odd = x[:, 1::2]
out_even = x_even * cos - x_odd * sin
out_odd = x_even * sin + x_odd * cos
out = np.empty_like(x)
out[:, 0::2] = out_even; out[:, 1::2] = out_odd
return out
| # | 이름 | 검증 |
|---|---|---|
| 1 | shape (L, d) | |
| 2 | pos=0 → 입력 그대로 | 회전각 0 |
| 3 | norm 보존 | 회전은 길이 유지 |
| 4 | 첫 쌍 손계산 | m=1, i=0: 각도 1 rad |
| 5 | 위치가 달라지면 결과 달라짐 |
코드를 작성하고 Run 을 눌러보세요.