クエリとキーのベクトルを回転行列で変換することで、内積計算時に相対位置情報を自然にエンコードする位置埋め込み手法。追加パラメータ不要で外挿性に優れ、2024-2026年のLLMで最も広く採用されている。
RoPE(Rotary Position Embedding)は、Transformerのself-attention計算においてクエリ(Q)とキー(K)のベクトルに回転変換を適用することで、相対位置情報を内積に自然に組み込む位置エンコーディング手法である。2021年にSu et al.が「RoFormer: Enhanced Transformer with Rotary Position Embedding」で提案した。
従来の絶対位置エンコーディング(SinusoidalやLearned PE)がトークン埋め込みに位置ベクトルを加算するのに対し、RoPEはQとKのベクトルを位置に応じた角度で回転させる。これにより、2つのトークン間の内積にはそれらの相対位置のみが反映される。
数学的には、位置 m のクエリベクトル q と位置 n のキーベクトル k に対して:
この性質により、追加の学習パラメータなしに相対位置情報が自動的にAttentionスコアに含まれる。
d次元ベクトルを d/2 組の2次元部分空間に分割し、各部分空間に異なる周波数の回転を適用する:
2次元回転行列 R(m, θ_i) は:
[cos(m·θ_i) -sin(m·θ_i)]
[sin(m·θ_i) cos(m·θ_i)]
| モデル | パラメータ数 | base値 | 訓練コンテキスト長 | 推論コンテキスト長 |
|---|---|---|---|---|
| LLaMA 2 | 7B-70B | 10,000 | 4,096 | 4,096 |
| LLaMA 3 | 8B-70B | 500,000 | 8,192 | 8,192 |
| LLaMA 3.1 | 8B-405B | 500,000 | 8,192(+継続学習) | 128,000 |
| Mistral 7B | 7B | 10,000 | 8,192(Sliding Window) | 32,768 |
| Qwen2.5 | 0.5B-72B | 1,000,000 | 32,768 | 131,072 |
| DeepSeek-V3 | 671B (MoE) | 10,000(修正版) | 4,096(+段階拡張) | 128,000 |
| Gemma 2 | 2B-27B | 10,000 | 8,192 | 8,192 |
| Phi-3 | 3.8B-14B | 10,000 | 4,096-128K | 128,000 |
素のRoPEは訓練時のコンテキスト長を超えると性能が急落する。以下の拡張が提案されている:
Q1: RoPEとSinusoidal PEの違いは? A: Sinusoidal PEはトークン埋め込みに位置ベクトルを「加算」する絶対位置方式。RoPEはQとKを「回転」させて相対位置を内積に反映する。RoPEは外挿性能が高く、追加パラメータも不要なため、2024年以降のLLMではRoPEが標準となった。
Q2: base値の10,000と500,000の違いは? A: base値が大きいほど高周波成分の回転が緩やかになり、長距離の位置区別能力が向上する。LLaMA 2(base=10,000)は4Kトークンが限界だったが、LLaMA 3(base=500,000)は8K-128Kトークンに対応可能になった。
Q3: ローカルLLM推論でRoPEの設定を変える必要はある?
A: llama.cppやvLLMではモデルのconfig.jsonからRoPE設定を自動読み込みする。ユーザーが手動変更する場面は稀だが、コンテキスト長を訓練長以上に拡張したい場合は --rope-scaling オプションで NTK/YaRN を指定できる。