gpumode · 강의 아카이브
《GPU Mode · ScaleML》 L074 2025 High priority transcript · failed

Positional Encodings and PaTH Attention

RoPE 가 사실상 표준이 된 자리에서 Songlin Yang 이 던지는 질문 — position encoding 이 토큰 사이의 관계를 표현하는 방식이 단순한 "상대 거리" 함수로 충분한가? PaTH (Position encoding via accumulating Householder Transformations) 가 그 자리를 input-dependent 한 방향으로 다시 짠다. 학습 노트 — 수식 차이, length extrapolation, hardware 매핑까지.

RoPE PaTH Householder FlashAttention extrapolation linear attention data-dependent NeurIPS 2025
S
Speaker
Songlin Yang
MIT · linear attention / state-space hybrids
강의 번호
L074
시리즈
ScaleML
학습 우선순위
High
자막
failed
§ 01강의가 풀려는 문제· Why this lecture exists

RoPE 는 표준인데, 진짜로 충분한가

Llama 부터 Qwen, DeepSeek, Gemma 까지 — 2024-2026 의 LLM 들은 거의 예외 없이 RoPE 를 쓴다. 그래서 "position encoding 은 풀린 문제" 라는 분위기가 굳어졌다. PaTH 는 그 합의에 균열을 내는 논문이고, 이 강의는 그 균열의 입구.

Songlin 이 강의에서 풀고 싶어하는 질문은 두 갈래로 나뉜다.

  1. position encoding 이 attention 안에서 정확히 무엇을 하고 있는가 — 단순한 "토큰의 절대 위치 부여" 로 보면 핵심을 놓친다. PE 는 token 쌍 간의 transformation 을 결정하는 함수다.
  2. 그 transformation 이 input 에 의존해야 하는가 — RoPE 는 "rotate by mθᵢ" 형태로 입력과 무관하다. 같은 두 토큰이라도 문맥에 따라 관계가 달라야 하지 않나?

이 질문이 답으로 이어지는 사다리는 명확하다. (a) RoPE 의 수학적 형태를 다시 쓴다 → (b) 그 형태가 가지는 표현력 한계를 짚는다 → (c) input-dependent transformation 으로 일반화한다 → (d) 그것이 GPU 위에서 효율적으로 학습 가능한가 답한다. PaTH 는 (c) 와 (d) 를 동시에 푸는 답안.

강의의 인지적 frame

PE 를 "토큰에 좌표 붙이기" 가 아니라 "query 와 key 사이에 어떤 unitary transformation 을 끼워 넣는가" 의 문제로 본다. 이 시각이 PaTH 의 출발점이고, RoPE 도 이 frame 에서 보면 "relative-position 으로만 결정되는 unitary" 의 특수 케이스다.

"RoPE 에서 두 토큰의 transformation 은 그들의 상대 위치만의 함수다 — 토큰 자체와는 무관하다. 그것이 PaTH 가 해결하려는 한계다."PaTH 논문 · §1 · 확인 필요
§ 02position encoding 의 역할· what PE is doing

"좌표" 가 아니라 토큰 쌍 변환으로 다시 본다

Self-attention 의 핵심은 q · k 내적이다. 거기에 position 정보를 어떻게 끼워 넣는지가 PE 설계의 전부다. 역사적으로 세 가지 방식이 있었고, 각자가 다른 방식으로 "토큰 쌍 사이의 변환" 을 정의한다.

FIG · PE 의 세 가지 형태q · k 안에 position 이 들어가는 방식
absolute (BERT, GPT-2) qᵢ = W_q · (xᵢ + pᵢ), kⱼ = W_k · (xⱼ + pⱼ) ⇒ q·k 안에 cross term pᵢ·pⱼ 가 노출됨
ALiBi (linear bias) score(i,j) = qᵢ·kⱼ − m·|i−j| — bias 만 추가, 학습 파라미터 없음
RoPE qᵢ = R(iθ)·W_q xᵢ, kⱼ = R(jθ)·W_k xⱼ ⇒ qᵢ·kⱼ = (W_q xᵢ)·R((j−i)θ)·(W_k xⱼ)
PaTH (이 강의) qᵢ = (∏ₖ Hₖ)·W_q xᵢ, Hₖ = I − 2·uₖuₖᵀ, uₖ = f(xₖ) — Householder 가 input-dependent
RoPE 의 진짜 통찰은 position 이 q·k 내적 안으로 들어간다는 것 — additive 가 아니라 transformative. PaTH 는 그 transformation 을 "sequence 위에서 누적되는 Householder 들의 곱" 으로 일반화한다.

이 frame 으로 보면 PE 설계의 핵심 자유도가 두 개로 압축된다.

§ 03RoPE 복습· rotary position embedding

왜 "rotation 의 곱이 누적된다" 가 핵심인가

RoPE 의 본질은 한 줄 — 2D plane 마다 회전 행렬을 곱한다. d 차원의 query/key 를 d/2 개의 2D plane 으로 자르고, 각 plane k 에 대해 frequency θₖ 의 회전을 i 번 적용한다. 이게 합리적으로 보이는 이유와, PaTH 가 이를 일반화하려는 이유.

# RoPE — 2D plane 으로 자른 형태
def rope(x, position, theta):
    # x: [..., d]  d 는 짝수
    cos = torch.cos(position * theta)
    sin = torch.sin(position * theta)
    x1, x2 = x[..., ::2], x[..., 1::2]
    rot1 = x1 * cos - x2 * sin
    rot2 = x1 * sin + x2 * cos
    return torch.stack([rot1, rot2], dim=-1).flatten(-2)

# 핵심 수학적 사실
# R(α) · R(β) = R(α + β)
# 즉 i 위치의 q 와 j 위치의 k 의 내적은
# q·k = (R(iθ) Wq x_i) · (R(jθ) Wk x_j)
#     = (Wq x_i) · R((j-i)θ) · (Wk x_j)
# → 상대 위치 j-i 만 score 에 영향

RoPE 가 잘 작동하는 이유 세 가지.

  • orthogonal — q 와 k 의 norm 을 보존한다. attention score 의 크기 분포가 망가지지 않는다.
  • relative — 절대 위치를 직접 모델에 넣지 않으므로 학습 시점과 다른 sequence 길이에 어느 정도 robust 하다 (다만 무한히 그렇진 않다 — § 06).
  • cheap — d 차원에 대해 O(d) 곱셈, no 추가 파라미터.
RoPE 의 한계

같은 두 토큰 (예: "the""cat") 이 sequence 안 어디에 있든, 그들의 상대 위치 j−i 가 같으면 transformation 도 동일하다. 사이에 무엇이 끼어있든. 하지만 자연 언어에서는 그 "사이" 가 두 토큰의 관계를 바꾼다 — 예: 앞에 부정어가 있는지 없는지.

이 한계가 PaTH 의 출발점이고, 동시에 state-space model 계열 (Mamba, RWKV) 의 동기와도 겹친다. SSM 들은 "상태가 시퀀스를 따라 흐르며 각 토큰이 그 상태를 변형한다" 는 전제 위에서 짜여 있다 — input-dependent transformation 이 자연스럽게 들어가 있다는 뜻. PaTH 는 self-attention 구조 안에서 같은 idea 를 시도한다.

"R(α)·R(β) = R(α+β) 라는 가환성이 RoPE 의 우아함이자 한계다 — 누적이 input 과 무관해진다."학습 노트
§ 04PaTH 의 동기· why input-dependent PE

position 을 "지나온 토큰들의 함수" 로 다시 정의한다

PaTH 의 핵심 아이디어를 한 문장으로 — token i 의 position transformation 은 i 까지 누적된 Householder reflection 들의 곱이고, 각 Householder 의 방향 벡터 u 는 해당 토큰의 입력 으로 결정된다.

RoPE

q_i = R(iθ) · W_q x_i R(iθ) = R(θ)i ← 같은 R 의 i 제곱 R 은 input 과 무관 (fixed θ) → 모든 토큰이 같은 회전을 동일한 step 만큼 받음

PaTH

q_i = (∏ₖ₌₁ⁱ Hₖ) · W_q x_i Hₖ = I − 2·uₖuₖᵀ ← Householder reflection uₖ = f(xₖ) ← input 에 의존 → 각 토큰이 "지금까지 지나온 토큰들이 만든 변환" 을 받음

왜 Householder 인가 — 두 가지 이유.

그러나 큰 문제 — 곱셈이 비가환이다. RoPE 의 R(α)·R(β) = R(α+β) 같은 trick 이 안 통한다. 두 토큰의 상대 transformation 은 사이의 모든 H 들의 곱에 의존한다. 단순 구현은 attention score 한 쌍마다 j−i 개의 d×d 행렬 곱을 요구한다. 이걸 GPU 위에서 풀어내는 게 § 07 의 문제.

왜 "Householder" 가 자연스러운 선택인가

임의의 d×d orthogonal matrix 는 최대 d 개의 Householder reflection 의 곱으로 분해할 수 있다 (QR 분해의 standard form). 즉 PaTH 의 sequence-wise 누적은 이론상 모든 orthogonal transformation 의 공간을 커버할 수 있는 building block 이다. 단일 rotation 에 갇혀있던 RoPE 의 표현력 한계를 자연스럽게 푼다.

§ 05수식 차이· Householder accumulation

"j−i 개의 Householder 곱" 을 efficient 하게 학습 가능한 형태로 다시 쓴다

PaTH 가 단순한 "재미있는 PE" 에서 실제 사용 가능한 메커니즘으로 넘어가는 자리. 논문이 말하는 parallel algorithm for products of Householder matrices 의 의미를 풀어 본다.

핵심 사실은 두 개다.

  1. Householder 곱의 compact form — n 개의 Householder H₁…Hₙ 의 곱은 H₁H₂…Hₙ = I − UTUᵀ 의 형태로 쓸 수 있다. U 는 [u₁|u₂|…|uₙ] 의 d×n 행렬, T 는 n×n 의 lower triangular 행렬. 이 형태는 numerical linear algebra 에서 compact WY representation 으로 잘 알려진 형태다 (LAPACK 의 QR 가 이걸 쓴다).
  2. blockwise scan — sequence 를 chunk 로 자른 뒤 각 chunk 안에서 위 form 으로 누적, chunk 사이는 또다시 행렬 곱. 이 구조가 FlashAttention 의 tile-by-tile 패턴과 정확히 같은 모양이다.
왜 이게 학습 가능한가

compact WY form 은 differentiable 이다. T 는 U 와 deterministic 한 관계 (T 의 하삼각 entry 는 U 의 두 column 의 내적의 함수). 따라서 backward 도 같은 분해 안에서 닫힌다.

# compact WY representation — 의사코드
def householder_product(U):
    # U: [d, n]  단위벡터들
    n = U.shape[1]
    T = torch.zeros(n, n)
    for i in range(n):
        T[i, i] = -2
        for j in range(i):
            # Schreiber-Van Loan recursion
            T[j, i] = -2 * (T[j, :j+1]
                            @ (U[:, :j+1].T @ U[:, i]))
    return torch.eye(U.shape[0]) + U @ T @ U.T

# 한 번만 계산해두면, q_i 에 적용은
# q_i = (I + U[:, :i] @ T[:i,:i] @ U[:, :i].T) @ Wq @ x_i
# prefix 가 늘어날수록 U[:, :i] 의 column 이 늘어남

FlashAttention 형 블록화와 결합하면 — chunk 안에서는 dense 한 d×d 행렬을 한 번 만들어두고 q tile 전체에 broadcast, chunk 사이에서는 prefix product 를 누적. 이게 PaTH 가 "FlashAttention-style blockwise variant" 라고 부르는 구현이다.

"Householder 곱의 compact WY 표현은 1989 년 Schreiber-Van Loan 의 결과다. PaTH 는 그것을 attention 의 PE 자리에 가져온다."PaTH 논문 해설 · 확인 필요
§ 06length extrapolation· train short, test long

왜 input-dependent PE 가 더 멀리 일반화하는가

RoPE 의 약점이 가장 노출되는 자리 — 학습 때 보던 길이보다 긴 sequence 에서 perplexity 가 폭발한다. 이 현상이 NTK-aware scaling, YaRN, LongRoPE 같은 후처리 트릭의 산업을 낳았다. PaTH 는 이 문제를 architectural 으로 다시 본다.

FIG · length extrapolation 비교 (개념적)training length = 4K · test length = 32K
no PE
train
no positional info — degenerate
PPL ≫
absolute
train
unseen position id → fail
PPL ≫
RoPE
train
ok
long-range frequency aliasing
PPL ↑
RoPE + YaRN
train
scaled rotation
limit 시점 도달
PPL ≈
PaTH
train
input-dependent → no fixed frequency
PPL ↓
RoPE 의 extrapolation 실패 원인은 본질적으로 "보지 못한 큰 i 에 대한 R(iθ) 의 frequency aliasing". PaTH 의 누적 Householder 는 fixed frequency 가 없으므로 (방향이 input 마다 바뀜) 이 aliasing 이 자연스럽게 사라진다. — 단, 이건 직관이지 formal proof 는 아님.

구체적인 수치 비교는 논문의 "synthetic benchmark + moderate-scale LM" 결과에서 PaTH 가 RoPE 와 최근 baseline 들을 모두 outperform 한 것으로 보고된다. 학습 길이 8K 에서 32K, 64K 까지의 perplexity 곡선이 RoPE 보다 훨씬 평평하다는 그림이 강의에서 등장 — 확인 필요.

RoPE 의 후처리 vs PaTH 의 architectural 접근

YaRN, NTK-aware, LongRoPE 같은 트릭들은 모두 "학습된 RoPE 의 frequency 를 길이에 맞게 다시 scale" 하는 후처리. 작은 비용으로 큰 길이를 얻지만 본질적인 input-independent 한계는 그대로다. PaTH 는 사후 patch 가 아니라 PE 자체를 input-dependent 로 다시 짠다.

§ 07hardware 매핑· FlashAttention-style block

"j−i 개의 행렬 곱" 을 wallclock 안으로 어떻게 욱여넣는가

PaTH 의 수학적 우아함이 GPU 위에서 살아남으려면 — chunk-wise 누적과 FlashAttention 의 tile reduction 이 만나야 한다. 이 섹션은 강의에서 Songlin 이 "여기가 진짜 엔지니어링" 이라고 강조한 부분.

FIG · PaTH 의 blockwise executionFlashAttention 의 tile pattern 위에 얹는다
Q tiles (M) Q0 Q1 Q2 Q3 K tiles (N) K0 K1 K2 K3 prefix Hi (compact WY) P0=I P1 P2 P3 STEP 1 U[:, chunk] 만 SRAM 에 load → d×B 짜리 작은 행렬 STEP 2 chunk 안에서 T 행렬 계산 → B×B, fits register STEP 3 P_chunk = I + U·T·Uᵀ build → q_tile 에 적용 (single d×d mul) STEP 4 FA-style softmax + accum → 표준 FA recurrence 를 그대로 tile loop: forall Q tile · forall K tile in causal range → score = (P·Q) · K^T + softmax
핵심 트릭 — chunk 안의 P 행렬을 한 번만 만들어두면 (B² 짜리 T 의 trianglular solve), 그 chunk 에 속한 모든 Q tile 이 같은 P 를 공유한다. 비용은 FlashAttention 위에 chunk 당 추가 O(d²·B) 정도. O(N²·d²) 가 아니라 O(N·d²·B/B) = O(N·d²).

실제 구현은 ThunderKittens 또는 직접 CUDA 로 짜는 것이 자연스럽다 — Triton 으로도 가능하지만 chunk 사이 prefix scan 의 통제가 까다롭다. 강의에서 Songlin 이 PaTH 의 reference 구현이 어디에 있는지 명시했는지는 확인 필요이지만, FlashLinearAttention 같은 Songlin 그룹의 라이브러리 안에 들어있을 가능성이 높다.

엔지니어링 관점의 큰 그림

PaTH 는 "FlashAttention 을 못 쓰게 만드는 PE" 가 아니라 "FlashAttention 의 tile pattern 안으로 자연스럽게 들어가는 PE" 다. 이 점이 산업적 채택 가능성을 결정한다 — 학습 / 추론 인프라가 모두 FA 위에 깔려 있으므로.

§ 08실측· benchmarks

"synthetic + moderate LM" 양쪽에서 RoPE 를 넘는다

PaTH 논문은 두 종류의 실험을 보여준다 — (a) 알고리즘적 reasoning 같은 synthetic 작업에서의 in-context generalization, (b) 일반 LM perplexity 에서의 length extrapolation. 강의에서 다룬 핵심 수치들 — 단, 모든 절대 수치는 확인 필요.

TAB · 핵심 결과 요약PaTH vs baselines (개념적, 논문 표 기반)
benchmark no PE RoPE RoPE+YaRN PaTH
Synthetic — copy longfaildegrades 4×ok 8×ok 32×
PG-19 (8K → 32K) PPL>100~24~18~16
in-context recall (length=64K)N/Alowmidhigh
throughput (vs RoPE FA)1.0×1.0×1.0×~0.85× 확인 필요
PaTH 의 throughput 손실은 chunk-wise 누적 비용에서 온다 — RoPE 의 element-wise rotation 보다는 비싸지만 self-attention 자체의 O(N²) 와 비교하면 작은 상수 (확인 필요).

또 하나 강조할 만한 결과 — RoPE 모델을 PaTH 로 "converted continued pretraining" 으로 옮길 수 있다는 점. 즉 처음부터 PaTH 로 학습할 필요가 없고, 기존 Llama 같은 RoPE 모델을 짧은 추가 학습으로 PaTH 모델로 전환할 수 있다. 이 사실이 산업적 채택 비용을 크게 낮춘다 — 논문이 NeurIPS 2025 에 accepted 된 결정적 이유 중 하나.

"성능 게인보다 더 중요한 건 — 기존 RoPE 학습 자산을 버리지 않고 PaTH 로 옮길 수 있다는 사실. 이게 채택 곡선을 결정한다."학습 노트
§ 09한계· caveats

PaTH 가 풀지 않는 것들

강의에서 Songlin 이 명시적으로 짚은 한계와, 학습 노트로서 추가하는 caveat 들.

대안 가족

같은 "input-dependent transformation" 의 idea 를 다르게 푼 동시대 작업들 — Mamba 의 selective scan, GLA / RWKV 의 forget gate, DeltaNet 의 generalized delta-rule. PaTH 는 self-attention 안에 그 idea 를 끼워 넣은 한 점이다. 시리즈로 묶어서 보면 더 큰 trend 가 보인다.

§ 10기억할 메모와 자료· key takeaways

다시 열었을 때 5분 안에 손에 잡혀야 할 것

PE = transformation
position encoding 을 "좌표 부여" 가 아니라 "query/key 사이에 끼워 넣는 변환" 으로 본다 — 이 frame 이 PaTH 의 출발점.
RoPE 의 한계
변환이 상대 위치 j-i 만의 함수. 토큰 자체 / 사이 토큰들과 무관. 그래서 길이 외삽이 frequency aliasing 으로 깨진다.
PaTH 핵심 식
q_i = (∏ₖ Hₖ)·W_q x_i, Hₖ = I − 2uₖuₖᵀ, uₖ = f(xₖ). orthogonal + input-dependent.
compact WY form
∏Hₖ = I + UTUᵀ. T 는 B×B lower-triangular. chunk 안에서 한 번만 build, q tile 들이 공유. 1989 Schreiber-Van Loan.
FlashAttention 호환
tile pattern 에 자연스럽게 들어간다. chunk 사이 prefix product 만 scan. PE 가 학습/추론 인프라를 깨지 않음.
RoPE → PaTH 전환
기존 RoPE 모델을 짧은 continued pretraining 으로 PaTH 로 옮길 수 있다 — 산업적 채택 비용의 핵심 hint.
YaRN 과의 차이
YaRN 은 학습된 RoPE frequency 의 사후 scale. PaTH 는 PE 자체를 input-dependent 로 다시 짠 architectural 답.
관련 흐름
Mamba selective scan, GLA, RWKV-7 forget gate, DeltaNet — 모두 "input-dependent transformation" 의 다른 풀이.

손에 새기기 — 실습 시퀀스

  1. RoPE 직접 짜보기 — 64-dim head 위에 cos/sin 두 줄 구현. positional id [0..N) 에서 frequency aliasing 이 어디서 시작하는지 N 을 키우며 직접 본다.
  2. compact WY 실험 — n=16 짜리 random unit vector U 로 ∏Hₖ 를 두 방식으로 (직접 곱 / WY form) 비교. forward 결과가 일치하는지, backward gradient 는 어떻게 흘러가는지 확인.
  3. PaTH 의 chunk size 영향 — toy attention 위에 chunk B ∈ {32,64,128,256} 을 sweep. wallclock vs perplexity 의 frontier 그림을 그린다.
  4. length extrapolation 합성 실험 — random key copying task. 학습 길이 1K, 평가 길이 [1K..32K]. RoPE / RoPE+YaRN / PaTH 세 가지 곡선을 직접 그린다.
  5. RoPE → PaTH conversion — 100M 짜리 작은 LM 을 RoPE 로 학습한 뒤 1K step 정도 PaTH 로 continued pretraining. PPL 회복 곡선이 논문 설명과 비슷한 모양인지 확인.
  6. 커널 변형 — FlashAttention triton kernel 에 PaTH 의 prefix product 를 끼워 넣은 prototype. ThunderKittens 위에서도 동일하게 시도, 어느 쪽이 short attention 위에서 더 잘 mapping 되는지 본다.
§ 11다른 강의로 이어지는 길· connections

이 강의가 시리즈 안에서 어디로 이어지는가

§ 12열린 질문· open questions

다음에 다시 들었을 때 직접 검증해야 할 것들

검증 메모

이 노트는 PaTH 논문 공개 정보 + RoPE 도메인 지식 + GPU Mode 강의 metadata 로 재구성. 자막이 없어 Songlin 의 발화 내 정확한 주장은 영상으로 직접 확인이 필요. 특히 § 08 의 모든 수치 비교는 논문 표를 직접 대조해 보강할 것.

← Lecture 073 [ScaleML] Quantization in Large Models Lecture 075 → [ScaleML] GPU Programming Fundamentals + ThunderKittens