RoPE（Rotary Position Embedding）とは


RoPE（**Rotary Position Embedding**）は、Transformer における位置エンコーディング（Positional Encoding）の手法の一つです。Transformer は入力トークンの順序情報を直接保持しないため、位置情報を明示的に埋め込む必要があります。従来の**絶対位置エンコーディング**（例えば、Sinusoidal Encoding）とは異なり、**RoPE は相対的な位置関係を考慮できる**という特徴があります。

### **RoPE の基本的な仕組み**
RoPE は、**トークン間の距離を回転行列を使ってエンコード**し、自己注意機構（Self-Attention）の中で直接利用できるようにします。  
具体的には、トークンの埋め込みベクトルを **回転変換（rotary transformation）** することで、相対的な位置情報を表現します。

- **回転変換（Rotary Transformation）**:  
  各トークンの埋め込みベクトルを **特定の周波数で回転させる** ことで、トークン間の距離が回転角としてエンコードされます。
- **相対位置情報を保持**:  
  トークンの絶対的な位置ではなく、**トークン同士の相対的な距離**を維持したままエンコーディングできるのが RoPE の強みです。

### **RoPE の基本式**
RoPE では、入力埋め込み \(\mathbf{x}\) に対して、回転行列 \(R_\theta\) を適用します。

\[
\mathbf{x}' = R_\theta \mathbf{x}
\]

この回転行列 \(R_\theta\) は、以下のような形で定義されます。

\[
R_\theta =
\begin{bmatrix}
\cos(\theta) & -\sin(\theta) \\
\sin(\theta) & \cos(\theta)
\end{bmatrix}
\]

ここで、\(\theta\) は **トークンの位置 \(p\) に依存する角度** で、周波数 \(\omega\) を用いて次のように決定されます。

\[
\theta_p = p \cdot \omega
\]

### **RoPE 周波数とは？**
RoPE の周波数とは、回転変換に用いられる基本周波数のことを指し、位置 \(p\) に対する角度 \(\theta_p = p \cdot \omega\) の計算に影響を与えます。  
周波数が高いほど、短いスパンの相対関係に敏感になり、周波数が低いと長距離の関係を考慮しやすくなります。

例えば、Gemma 3 では以下のように **2種類の RoPE 周波数** を使っています。
- **Local Attention（局所的な注意機構）** → 基本周波数 **10K**
- **Global Attention（長距離の依存関係を考慮する部分）** → 基本周波数 **1M**

このように、異なるスケールの情報を適切に処理できるように、**RoPE の周波数を使い分ける** ことで、計算効率と長距離依存のバランスを取っています。

---

## **まとめ**
- **RoPE（Rotary Position Embedding）**は、トークン間の**相対的な位置関係**を考慮できる位置エンコーディングの手法。
- **回転行列を用いた変換**により、位置情報を効果的に埋め込む。
- **周波数（基本周波数）** は、トークン間の回転角を決めるパラメータであり、これを調整することで **短距離と長距離の関係を適切に処理** できるようになる。
- Gemma 3 では、**Local Attention（10K）** と **Global Attention（1M）** で異なる RoPE 周波数を使用している。

これにより、計算量を抑えつつ、長いコンテキストの情報も効果的に処理できるようになっています。

## **RoPE（Rotary Position Embedding）とは？**

### **なぜ RoPE が必要なのか？**
まず、**Transformer**（GPT などの AI モデルの基本構造）は、テキストの「単語の順番」を理解するのが苦手です。  
人間なら「猫が魚を食べた」と「魚が猫を食べた」の意味が全く違うとすぐ分かりますが、Transformer は単語の順序情報を持っていないため、追加の工夫が必要です。

この順番情報を与える方法を **「位置エンコーディング（Positional Encoding）」** といいます。  
**RoPE（Rotary Position Embedding）** は、その中でも特に **「単語同士の距離（相対的な位置）」** をうまく活用できる方法です。

---

## **RoPE の仕組みをざっくり解説**
RoPE では、「単語の順番」を数値で表すために **回転（ローテーション）** を使います。

イメージとしては、**「単語の位置」を座標上の点にし、それを回転させることで、相対的な位置関係を表現する** というものです。

例えば、2D 平面を考えてみてください。

- ある単語が \((x, y)\) という座標にあるとします。
- それを「角度 \(\theta\) だけ回転させる」と、**新しい座標** \((x', y')\) になります。
- この回転を計算するのが、以下の **回転行列（Rotation Matrix）** です：

\[
\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
\cos(\theta) & -\sin(\theta) \\
\sin(\theta) & \cos(\theta)
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]

この回転角度 \(\theta\) は、単語の位置 \(p\) に応じて決まります。

\[
\theta_p = p \times \omega
\]

この \(\omega\)（オメガ）が **RoPE 周波数** です。

---

## **RoPE 周波数とは？**
RoPE 周波数とは、「単語を回転させる角度を決める基準」のことです。

- **周波数が高い** → **回転が速い**（短い距離の情報を強く意識する）
- **周波数が低い** → **回転が遅い**（長距離の関係を重視する）

例えば、Gemma 3 では以下のように RoPE の周波数を使い分けています。

| RoPE の適用先 | 周波数（\(\omega\)） | 役割 |
|--------------|-----------------|-----------------------------|
| **Local Attention**（近い単語同士） | **10K** | 短い範囲での関係性を強調 |
| **Global Attention**（全体の単語） | **1M** | 長距離の関係を考慮 |

つまり、**近くの単語同士の関係は細かくキャッチし、遠くの単語同士の関係は大まかに捉える** という工夫がされています。

---

## **RoPE のメリット**
1. **単語の「相対的な位置」情報を保持できる**
   - 例えば「東京から大阪に行く」と「大阪から東京に行く」は意味が違います。
   - RoPE はこの「単語の相対的な位置関係」を計算に組み込めるため、文の意味を正しく捉えやすくなります。

2. **長い文章にも対応できる**
   - 従来の位置エンコーディングは「絶対位置」を使っていたため、長い文章では性能が落ちていました。
   - RoPE は「相対位置」を使うので、長い文章でもうまく処理できます。

3. **計算が効率的**
   - RoPE は行列の回転計算だけで済むので、従来の手法よりメモリ使用量を減らせます。

---

## **まとめ**
- **RoPE（Rotary Position Embedding）** は、Transformer が単語の順番を理解できるようにするための技術。
- **回転（ローテーション）** を使って「単語同士の距離」をエンコードする。
- **RoPE 周波数とは、回転の速さを決めるパラメータ** で、短距離と長距離の関係をうまく処理するために調整される。
- **Gemma 3 では、短距離用（10K）と長距離用（1M）で異なる周波数を使い分けている**。

このように、RoPE は「単語の位置情報を適切に保持しつつ、計算コストを抑える」優れた技術なんです。