RoPE(Rotary Position Embedding)(ロープ)
クエリとキーのベクトルを回転行列で変換することで、内積計算時に相対位置情報を自然にエンコードする位置埋め込み手法。追加パラメータ不要で外挿性に優れ、2024-2026年のLLMで最も広く採用されている。
RoPE(Rotary Position Embedding)とは
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 に対して:
- RoPE(q, m) · RoPE(k, n) = f(q, k, m-n)
この性質により、追加の学習パラメータなしに相対位置情報が自動的にAttentionスコアに含まれる。
数学的原理
d次元ベクトルを d/2 組の2次元部分空間に分割し、各部分空間に異なる周波数の回転を適用する:
- 周波数: θ_i = base^(-2i/d)(i = 0, 1, ..., d/2-1)
- デフォルト base = 10,000
- 位置 m での回転角: m × θ_i
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の拡張手法
素のRoPEは訓練時のコンテキスト長を超えると性能が急落する。以下の拡張が提案されている:
- Position Interpolation(PI): 位置インデックスを線形スケーリング(例: 4096→16384なら m を m/4 に圧縮)。Meta AI提案、LLaMA 2で実証
- NTK-aware Scaling: base値を拡大することで高周波成分を温存しつつ外挿。計算: new_base = base × scale^(d/(d-2))
- YaRN: 周波数帯域を低・中・高に分け、帯域ごとに異なるスケーリング率を適用。最も高い外挿性能
- Dynamic NTK: 推論時のシーケンス長に応じてbase値を動的に調整。Llama.cppやvLLMで実装済み
実装上のポイント
- KVキャッシュとの互換性: RoPEはQとKに適用されるため、KVキャッシュにはRoPE適用済みのベクトルを格納する。これにより新トークン追加時も過去のキャッシュを再計算不要
- Flash Attentionとの統合: Flash Attention 2/3ではRoPEの回転をカーネル内で実行可能。別途の前処理が不要でメモリ効率が向上
- 量子化との相性: RoPEの回転演算はfloat16/bfloat16精度で十分。GPTQ/AWQ量子化後もRoPE部分は高精度を維持するのが一般的
よくある質問(FAQ)
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 を指定できる。
まとめ
- RoPEは回転行列による相対位置エンコーディング手法
- 2024-2026年のLLM(LLaMA 3, Mistral, Qwen2.5, DeepSeek-V3)の事実上の標準
- NTK-aware Scaling、YaRNなどの拡張で100K+トークンの長文処理を実現
- Flash Attention、KVキャッシュ、量子化との互換性が高い