AI・機械学習
上級

RoPE(Rotary Position Embedding)(ロープ)

クエリとキーのベクトルを回転行列で変換することで、内積計算時に相対位置情報を自然にエンコードする位置埋め込み手法。追加パラメータ不要で外挿性に優れ、2024-2026年のLLMで最も広く採用されている。

0 回閲覧
0 いいね

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 27B-70B10,0004,0964,096
LLaMA 38B-70B500,0008,1928,192
LLaMA 3.18B-405B500,0008,192(+継続学習)128,000
Mistral 7B7B10,0008,192(Sliding Window)32,768
Qwen2.50.5B-72B1,000,00032,768131,072
DeepSeek-V3671B (MoE)10,000(修正版)4,096(+段階拡張)128,000
Gemma 22B-27B10,0008,1928,192
Phi-33.8B-14B10,0004,096-128K128,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キャッシュ、量子化との互換性が高い