Transformerを学ぶと必ず出てくるのが「位置エンコーディング(Positional Encoding)」です。2017年の原論文『Attention is All You Need』では、$\sin$ と $\cos$ を使った正弦波位置エンコーディングが提案されました。ところが、2020年代のLLM——LLaMA、GPT-NeoX、Qwen、PaLM——の多くは、正弦波ではなく RoPE(Rotary Position Embedding、回転位置埋め込み) を採用しています。
なぜ、原論文の美しい正弦波方式は主役の座を明け渡し、「ベクトルを回転させる」という一見とっつきにくいRoPEがデファクトになったのでしょうか。この記事は、その移り変わりの理由を軸に、2つの方式を正面から比較します。単に「両方こういう式です」と並べるのではなく、原論文の正弦波が抱えていた限界と、RoPEがそれをどう解決したのかを、数式・図・Python実装で追いかけます。
これを理解すると、次のような実践的な問いに答えられるようになります。
- 長文脈(ロングコンテキスト)対応のLLMで、なぜRoPEの「位置補間」が効くのか
- 自作Transformerで位置エンコーディングを選ぶとき、何を基準にすべきか
- 「絶対位置」と「相対位置」の違いが、注意機構の性能にどう効くのか

先に全体像を掴んでおきましょう。左が原論文の方式で、単語埋め込みに位置ベクトルを足すことで絶対位置を表します。右がRoPEで、ベクトルを位置に応じて回すことで、内積に相対位置が自然に現れるようにします。「足す」から「回す」へ——この一語の違いが、両者の性質を大きく分けます。
なぜ位置情報が必要か
まず出発点を確認します。Transformerの中核であるSelf-Attentionは、実はトークンの順序を区別できません。注意スコアは各トークンのクエリとキーの内積で決まりますが、この計算はトークンを並べ替えても値が変わらない「置換不変(permutation invariant)」な演算です。つまり素のAttentionにとって「猫が犬を追う」と「犬が猫を追う」は同じに見えてしまいます。
そこで、各トークンに「自分は何番目か」という位置情報を注入する必要があります。これが位置エンコーディングの役割です。位置情報が必要な理由の詳細は、以下の記事でも解説しています。
位置情報の注入方法にはいくつか流儀があります。ここからは、その最初の答えである原論文の正弦波方式を詳しく見ていきましょう。
原論文の正弦波位置エンコーディング
定義
原論文の正弦波位置エンコーディングは、位置 $pos$ と埋め込み次元 $i$($0 \le i < d$)に対して次で定義されます。
$$ \begin{equation} PE(pos, 2i) = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \quad PE(pos, 2i+1) = \cos\!\left(\frac{pos}{10000^{2i/d}}\right) \end{equation} $$
偶数次元には $\sin$、奇数次元には $\cos$ を割り当て、次元が上がるほど分母 $10000^{2i/d}$ が大きくなる——つまり波長が幾何級数的に長くなる設計です。次元ごとに異なる周波数の波を重ねることで、位置を「多数の時計の針の組み合わせ」のように一意に表現します。
まずはこの位置エンコーディングを可視化してみましょう。

横軸が位置、縦軸が埋め込み次元です。低い次元(下側)は位置が進むと激しく色が変わる高周波、高い次元(上側)はゆっくり変わる低周波になっているのが読み取れます。各位置(縦の1列)が固有の縞模様パターンを持つため、位置を識別できるわけです。
次元ごとの波長の違いを、波形として見るとさらにはっきりします。

低い次元(赤)は短い周期で振動し、高い次元(青)は非常に長い周期でしか変化しません。このように幅広い周波数帯を用意することで、近くの位置も遠くの位置も表現できるようになっています。
なぜ加算するのか
正弦波PEは、単語埋め込み $\bm{x}$ に足し算で注入されます。すなわちTransformerへの入力は $\bm{x} + PE(pos)$ です。

図のように、位置に無関係な単語埋め込みに、位置ごとに固定された位置エンコーディングを足し合わせます。この加算は入力段で一度だけ行われ、以降の全レイヤーはこの合成ベクトルを受け取ります。パラメータを一切増やさずに位置情報を与えられるのが、この方式の大きな利点でした。
正弦波PEの隠れた美点:内積に相対位置が現れる
原論文が正弦波を選んだのには、単に「一意な位置表現ができる」以上の理由があります。実は、2つの位置のPEの内積が、その相対距離だけで決まるという性質を持つのです。
三角関数の加法定理から、$PE(i) \cdot PE(j)$ は $\sum_k \cos\!\big((i-j)/10000^{2k/d}\big)$ の形にまとまり、絶対位置 $i, j$ ではなくオフセット $i-j$ だけの関数になります。実際に確かめてみましょう。

基準位置を10・40・70と変えても、内積を相対オフセットに対してプロットすると3本の曲線が完全に重なります。これは「正弦波PEの内積は基準位置によらず、相対距離だけで決まる」ことを示しています。Attentionが内積ベースであることを踏まえると、正弦波PEはこの時点で「相対位置を扱える素質」を持っていたのです。
では、それほど良い性質を持つ正弦波PEが、なぜ現在のLLMの主役ではないのでしょうか。ここに移り変わりの核心があります。
正弦波PEの限界 — なぜ移行が必要だったか
正弦波PEには、実運用で顕在化する2つの弱点がありました。
1つ目は「加算」ゆえの間接性です。 内積に相対位置が現れるとはいえ、それは入力段で足したPEどうしの内積の話です。実際のAttentionでは $(\bm{x}_i + PE_i)$ と $(\bm{x}_j + PE_j)$ の内積を取るので、単語情報と位置情報が混ざったクロス項が生じ、相対位置の情報はレイヤーを重ねるうちに薄まりがちです。相対位置が「原理的には表せる」ことと、「各層で明示的に効く」ことは別なのです。
2つ目は外挿(extrapolation)の弱さです。 これが長文脈時代に致命的でした。

モデルは学習時に、ある最大長 $L$ までの絶対位置しか経験しません。図の緑の領域($0 \sim L$)は学習済みですが、推論時に $L$ を超える長文が来ると、赤の領域の絶対位置パターンは一度も見たことがない入力になります。絶対位置に紐づく方式は、この未知の絶対位置に対して素直に振る舞えず、長文脈で急激に性能が劣化します。学習可能な位置埋め込み(BERTなどが採用)に至っては、学習長を超える位置のベクトルがそもそも存在せず、外挿はさらに困難です。
「相対位置を、加算ではなく、各層のAttentionそのものに直接組み込めないか」——この問題意識が、RoPEを生みました。
RoPE(回転位置埋め込み)
発想:足すのをやめて、回す
RoPEの発想は鮮やかです。位置ベクトルを足すのではなく、クエリとキーのベクトルそのものを、位置に応じて回転させるのです。埋め込みを2次元ずつのペアに分け、位置 $m$ のトークンではペア $k$ を角度 $m\theta_k$ だけ回します。ここで $\theta_k = 10000^{-2k/d}$ は正弦波PEと同じく次元ごとに異なる回転速度です。

同じベクトルでも、位置が進むほど大きく回転します。回転はベクトルの長さを変えないので、単語自身が持つ情報(ノルムや向きの相対関係)を壊さずに、位置情報だけを「位相」として上乗せできるのが要点です。
なぜ相対位置が直接現れるのか
回転行列には $R(m\theta)^\top R(n\theta) = R((n-m)\theta)$ という性質があります。したがって、位置 $m$ のクエリと位置 $n$ のキーの内積は
$$ \begin{equation} \big(R_m \bm{q}\big)^\top \big(R_n \bm{k}\big) = \bm{q}^\top R_m^\top R_n \bm{k} = \bm{q}^\top R_{n-m}\, \bm{k} \end{equation} $$
となり、絶対位置 $m, n$ は消えて、相対位置 $n-m$ だけが残ります。正弦波PEでは「PEどうしの内積」で間接的に現れていた相対位置が、RoPEでは「クエリとキーの内積そのもの」に、しかも各層・各ヘッドで明示的に現れるのです。
これを数値で確認しましょう。

絶対位置 $n$ を0・10・25と変えても、注意スコアを相対位置 $m-n$ に対してプロットすると3本が完全に重なります。RoPEでは「どこにあるか」ではなく「どれだけ離れているか」だけが注意に効く——この明快さが、正弦波PEの間接性を解消しました。
長期減衰という嬉しいおまけ
RoPEはもう一つ、自然な帰納バイアスを備えています。相対距離が大きくなるほど、注意スコアの大きさが平均的に減衰する傾向です。

多数のランダムなクエリ・キーで平均を取ると、相対距離が離れるほど注意スコアの絶対値が小さくなります。これは「遠いトークンより近いトークンを重視する」という言語にとって自然な性質で、RoPE提案論文(Su et al. 2021)が長所として挙げたものです。正弦波PEにはこうした明示的な減衰保証はありませんでした。
なぜRoPEがデファクトになったか
RoPEが現在のLLMで標準採用されている理由を整理すると、次の3点に集約されます。
- 相対位置を各層で直接エンコード — 加算方式の間接性を解消し、深いモデルでも位置情報が薄まらない。
- 優れた外挿性と長文脈拡張 — 相対位置ベースなので、学習長を超えても破綻しにくい。さらに回転角をスケールする位置補間(Position Interpolation)やNTK-aware スケーリングにより、学習後でも文脈長を数倍に拡張できる。ロングコンテキストLLMの実用化に直結した。
- 追加パラメータ不要・ノルム保存 — 学習可能PEと違いパラメータを増やさず、回転はベクトル長を保つため学習が安定する。
補足:位置補間がなぜ効くのか
②で触れた「位置補間(Position Interpolation)」は、RoPEが長文脈時代に生き残った決定打なので、直感だけ補っておきます。RoPEの回転角は位置 $m$ に比例して $m\theta_k$ でした。学習長 $L$ で訓練したモデルにいきなり $2L$ の位置を与えると、回転角は学習時に見た範囲の2倍まで振れてしまい、未知の位相になって性能が崩れます。
そこで位置補間では、位置を $m \to m \cdot (L / L’)$ とスケールし、拡張したい長さ $L’$ でも回転角が学習時の範囲 $[0, L\theta_k]$ に収まるように「詰め込み」ます。つまり位置の刻みを細かくして、既知の位相範囲に相対関係を写像し直すわけです。これにより、わずかな追加学習(あるいは追加学習なし)で文脈長を数倍に伸ばせます。絶対位置を加算する正弦波方式では、位置そのものが入力に焼き込まれているためこうしたきれいなスケーリングが難しく、ここでもRoPEの「回転」という表現が効いてきます。
長文脈が競争軸になった2020年代のLLMにとって、②の拡張性は決定的でした。RoPE自体の数学的な深掘りは以下の記事も参照してください。
ここまでの違いを一枚の表にまとめておきましょう。
3方式の比較

正弦波(原論文)・学習可能(BERT等)・RoPE(デファクト)を並べると、RoPEが「相対位置を、パラメータなしで、各層のQ・Kに、外挿しやすい形で」注入できる唯一の方式だとわかります。学習可能PEは表現力こそ高いものの、未学習位置に弱く、長文脈では最も不利です。原論文の正弦波はその中間で、「パラメータ不要」という美点は残るものの、相対位置の扱いが間接的で外挿も弱い、という位置づけになります。
理屈が見えたところで、両方式をPythonで実装し、これまで図で見た性質を数値で確かめましょう。
Pythonで実装して比較する
正弦波位置エンコーディング
まず原論文の正弦波PEを実装し、「内積が相対オフセットだけで決まる」性質を確認します。
import numpy as np
def sinusoidal_pe(n_pos, d, base=10000.0):
"""原論文の正弦波位置エンコーディング (n_pos, d) を返す。"""
pe = np.zeros((n_pos, d))
pos = np.arange(n_pos)[:, None]
i = np.arange(0, d, 2)[None, :]
denom = np.power(base, i / d)
pe[:, 0::2] = np.sin(pos / denom) # 偶数次元は sin
pe[:, 1::2] = np.cos(pos / denom) # 奇数次元は cos
return pe
pe = sinusoidal_pe(50, 64)
# 相対オフセットが同じなら、基準位置が違っても内積は等しい
d1 = pe[10] @ pe[10 + 7] # 位置10と17
d2 = pe[30] @ pe[30 + 7] # 位置30と37(相対距離は同じ7)
print(f"PE(10)·PE(17) = {d1:.4f}")
print(f"PE(30)·PE(37) = {d2:.4f}")
print(f"差 = {abs(d1 - d2):.2e}")
実行すると、どちらの内積も約 $23.26$ で、差は $10^{-15}$ オーダー(浮動小数点誤差)になります。基準位置が10でも30でも、相対距離が同じ7なら内積が一致する——図4で見た「3本の曲線が重なる」性質が、数値でも確認できました。ただし前述のとおり、この性質は「PEどうしの内積」の話であり、実際のAttentionでは単語埋め込みとの加算で薄まる点に注意が必要です。
RoPE(回転位置埋め込み)
次にRoPEを実装します。埋め込みを2次元ずつのペアに分け、位置に比例した角度で回転させます。
def rope_angles(d, base=10000.0):
"""各2次元ペアの回転速度 θ_k を返す。"""
return np.power(base, -np.arange(0, d // 2) * 2 / d)
def apply_rope(x, pos, thetas):
"""ベクトル x を位置 pos に応じて回転させる(RoPEを適用)。"""
out = np.empty_like(x)
for k in range(0, len(x), 2):
a = pos * thetas[k // 2]
c, s = np.cos(a), np.sin(a)
out[k] = x[k] * c - x[k + 1] * s
out[k + 1] = x[k] * s + x[k + 1] * c
return out
d = 64
thetas = rope_angles(d)
q = np.random.RandomState(0).randn(d)
k = np.random.RandomState(1).randn(d)
# 絶対位置が違っても、相対位置が同じなら注意スコアは不変
s1 = apply_rope(q, 5, thetas) @ apply_rope(k, 2, thetas) # 相対 +3
s2 = apply_rope(q, 20, thetas) @ apply_rope(k, 17, thetas) # 相対 +3
print(f"score(m=5, n=2) = {s1:.4f}")
print(f"score(m=20, n=17) = {s2:.4f}")
print(f"差 = {abs(s1 - s2):.2e}")
# 回転はノルムを保存する(単語自身の情報を壊さない)
print(f"||q|| = {np.linalg.norm(q):.4f}, "
f"||RoPE(q)|| = {np.linalg.norm(apply_rope(q, 7, thetas)):.4f}")
実行すると、相対位置がともに $+3$ である2つの注意スコアはどちらも約 $5.75$ で一致し(差は $10^{-15}$ オーダー)、絶対位置に依存しないことが確認できます。さらにRoPE適用前後でノルムが $8.4836$ のまま変わらず、回転が単語ベクトルの大きさを保存することもわかります。図8で見た「絶対位置を変えても曲線が重なる」性質と、回転の性質が、コードで裏付けられました。
正弦波PEでは相対位置が「PEの内積」に間接的に現れたのに対し、RoPEでは「クエリとキーの内積そのもの」に直接現れる——この違いが、実装レベルでもはっきり見て取れます。
よくある質問(FAQ)
Q. 正弦波位置エンコーディングとRoPEの一番の違いは? A. 正弦波は位置ベクトルを単語埋め込みに足す絶対位置方式、RoPEはクエリとキーを位置に応じて回す相対位置方式です。RoPEは相対位置が注意スコアに直接現れ、各層で効きます。
Q. なぜ最近のLLMはRoPEを使うの? A. 相対位置を各層で直接扱えること、外挿に強く位置補間で長文脈へ拡張しやすいこと、追加パラメータが不要でノルムを保存し学習が安定すること、の3点が主因です。長文脈対応が重視される現代のLLMに適しています。
Q. 正弦波位置エンコーディングはもう使われない? A. 使われる場面はあります。パラメータ不要でシンプルなため、比較的短い系列や教育目的、一部のモデルでは今も現役です。ただし大規模・長文脈のLLMではRoPEが主流です。
Q. RoPEとALiBiはどう違う? A. どちらも相対位置ベースですが、RoPEはベクトルを回転させて位置を埋め込むのに対し、ALiBiは注意スコアに相対距離に比例したバイアスを直接足します。ALiBiはさらに実装が単純で外挿にも強い方式です。
Q. 「絶対位置」と「相対位置」はどちらが良い? A. 一般に、言語のように「距離」が意味を持つタスクでは相対位置が有利です。だからこそRoPEやALiBiのような相対位置方式が主流になりました。
まとめ
原論文の正弦波位置エンコーディングと、現在のデファクトRoPEを、移り変わりの理由を軸に比較しました。
- 正弦波(原論文2017): $\sin/\cos$ で作った位置ベクトルを単語埋め込みに加算する絶対位置方式。パラメータ不要で、PEの内積が相対距離で決まる美点を持つが、相対位置の扱いが間接的で、学習長を超える外挿に弱い。
- RoPE(デファクト): クエリ・キーを位置に応じて回転させる相対位置方式。回転行列の性質により、注意スコアに相対位置が直接現れ、各層で効く。ノルムを保存し、位置補間で長文脈へ拡張できる。
- 移行の理由: 「加算する絶対位置」から「回転する相対位置」へ。長文脈が競争軸となった2020年代のLLMにとって、RoPEの外挿性と拡張性が決定的だった。
位置エンコーディングの各手法を横断的に整理したい場合は、以下の総合記事もあわせて参照してください。

次のステップとして、以下の記事も参考にしてください。