TROISINH
BreakthroughsAttention Efficiency

RoPE — Xoay vector thay vì cộng position, elegant hơn hẳn

RoPE thay đổi cách mã hóa vị trí trong Attention: xoay vector thay vì cộng thêm, tự nhiên hỗ trợ relative position và extrapolation. Dùng trong Llama, Mistral, Qwen.

Mọi mô hình ngôn ngữ hiện đại đều cần biết "từ này ở đâu" — nhưng cách thông thường (cộng vector vị trí vào embedding) lại là một trong những lý do khiến model khó mở rộng context window. RoPE (Rotary Position Embedding) là cách tiếp cận "xoay vector" thay vì "cộng vector", giải quyết vấn đề extrapolation một cách tự nhiên và trở thành lựa chọn mặc định cho Llama, Mistral, Qwen, và hầu hết LLM post-2022.

Vấn đề

Trước RoPE, Transformer dùng additive position embeddings: cộng thêm một vector vị trí (sinusoidal hoặc learned) vào embedding của token. Điều này tạo ra hai vấn đề cứng đầu:

1. Extrapolation kém: Model học trên context 4K tokens sẽ "choáng váng" khi gặp vị trí 5000 vì chưa từng thấy vector đó trong training. Bạn phải dùng kỹ thuật interpolation phức tạp để "kéo dài" context.

2. Pha trộn semantic và position: Khi cộng semantic_vector + position_vector, bạn ép network phải học cách "trừ" position ra sau này để lấy lại nghĩa. Điều này làm loãng biểu diễn và tạo bias cứng đầu vào các tầng sau.

Thêm nữa, additive encoding không cung cấp relative position bias một cách tự nhiên — model phải học cách so sánh "vị trí 5 so với 3" thông qua pattern matching thay vì cấu trúc toán học sẵn có.

Ý tưởng cốt lõi

Xoay thay vì cộng.

Hãy tưởng tượng mỗi token là một vector trong không gian nhiều chiều. Thay vì dịch chuyển vector đó (cộng thêm), RoPE xoay vector quanh gốc tọa độ với góc tỷ lệ thuận với vị trí token.

Đây là sự khác biệt triệt để:

  • Additive: hidden = semantic + position — như dán nhãn địa chỉ lên trán người, sau đó phải nhớ cách tẩy nhãn đi để đọc khuôn mặt.
  • RoPE: rotated = rotation_matrix(position) × semantic — như xoay người đó để nhìn từ góc độ khác. Chiều dài vector (magnitude) giữ nguyên, chỉ hướng thay đổi để encode vị trí.

The "Clock Hand" Analogy:
Hãy nghĩ về vector như kim đồng hồ. Chiều dài kim là ý nghĩa semantic (bất biến). Góc quay là vị trí — token đầu tiên ở 12 giờ, token thứ 5 ở góc 150 độ. Khi tính attention score (dot product giữa Query và Key), góc của hai kim tự động trừ nhau: (m×θ - n×θ) = (m-n)×θ.

That's it. Bạn vừa nhận được relative position encoding miễn phí — không cần học thêm, không cần ma trận distance riêng. Khoảng cách tương đối |m-n| quyết định độ tương đồng, không phải vị trí tuyệt đối.

Misconception buster: Nhiều người nghĩ RoPE chỉ là "một cách khác để thêm timestamp". Sai. RoPE không thêm thông tin mới vào vector — nó tái cấu trúc không gian để khoảng cách tương đối nổi lên tự nhiên từ hình học xoay. Đây là multiplicative interaction, không phải additive superposition.

Tại sao nó hoạt động

Mathematics of Rotation:
RoPE treat cặp chiều liên tiếp (2i, 2i+1) như tọa độ phức hoặc vector 2D. Với token ở vị trí m, nó xoay vector đi một góc m × θᵢ, trong đó θᵢ = base^(-2i/d) — tần số giảm theo chiều sâu, tạo ra representation đa tần số như Fourier.

Khi tính dot product q_m · k_n:

  1. Vector query được xoay góc
  2. Vector key được xoay góc
  3. Trong không gian 2D, dot product của hai vector xoay tỷ lệ với cos((m-n)θ)

Kết quả: attention score phụ thuộc vào (m-n) — relative distance — thông qua hàm cosine, tự nhiên tạo ra decaying pattern khi token xa nhau mà không cần hard masking.

Tại sao Extrapolation tốt hơn:
Vì attention chỉ quan tâm (m-n), không quan tâm m hay n riêng lẻ. Khi dài hơn training context, model không cần học "vị trí 10000 là gì", nó chỉ cần biết "khoảng cách 50 bước" — điều nó đã thấy trong training. Đây là lý do RoPE extrapolate tốt hơn additive encoding, dù vẫn cần trick như NTK-aware scaling để tránh aliasing ở tần số cao.

Orthogonal Preservation:
Rotation là phép biến đổi trực giao (orthogonal) — norm của vector không đổi. Semantic magnitude được bảo toàn hoàn toàn, không bị nhiễu bởi thông tin vị trí. Đây là lý do tại sao RoPE không làm giảm chất lượng representation ở các tầng sâu.

Ý nghĩa thực tế

FeatureAdditive (Sinusoidal/Learned)RoPE
Cơ chếCộng vector vị tríXoay vector gốc
Relative positionCần học thêmTự nhiên từ hình học
ExtrapolationKém, cần interpolationTốt hơn, decay tự nhiên
Memory impactKhông đổiKhông đổi
CompatibilityMọi attentionYêu cầu Q, K xoay (V không xoay)

Benchmark thực tế:
RoPE trở thành mặc định cho Llama 1/2/3, PaLM, CodeGen, Mistral, Qwen, Baichuan. Trong thực nghiệm, model dùng RoPE extrapolate lên 2×-4× training length với perplexity degradation ít hơn đáng kể so với sinusoidal.

Limitations cần biết:

  • What-where entanglement: Vì rotation là phép nhân ma trận, thông tin position và content bị trộn lẫn multiplicatively. Paper gần đây (PoPE, 2025) chỉ ra điều này có thể gây nhầm lẫn giữa "cái gì" (semantic) và "ở đâu" (position) trong certain edge cases.
  • Extrapolation cliff: Không có interpolation (NTK-aware, YaRN), RoPE vẫn gặp vấn đề khi góc xoay "quay vòng" (wrap around) hoặc trở nên quá thưa ở context cực dài (>100k tokens).
  • 2D coupling: Việc ghép cặp chiều giảm expressivity so với xử lý độc lập từng chiều, dù trong thực tế điều này không gây vấn đề lớn ở scale lớn.

Đào sâu hơn

Paper gốc:

Cùng cụm (Attention Efficiency):

  • Flash Attention — Tối ưu O(n²) memory bandwidth bằng tiling trên SRAM, kết hợp hoàn hảo với RoPE.
  • Grouped Query Attention (GQA) — Giảm KV cache bằng cách share K/V heads, thường đi kèm RoPE trong các model hiện đại.
  • Multi-Query Attention (MQA) — Tiền thân của GQA, cũng dùng RoPE.
  • Sliding Window Attention — Kết hợp local window với RoPE để xử lý 100k+ tokens.
  • ALiBi — Phương pháp position encoding khác dùng linear bias thay vì rotation, trade-off khác giữa local và global attention.

Đọc tiếp:

External resources:

On this page