RoPEとは
Rotary Position Embedding / 回転位置埋め込み
クエリ・キーベクトルを位置に応じて回転させることで、Transformerに相対的な位置情報を組み込む位置エンコーディング手法
ひとことで言うと
文章中の単語が何番目にあるかをAIに伝えるための、回転を使った位置の教え方。
概要
RoPE(Rotary Position Embedding)は、Transformerが単語の並び順を認識するために必要な位置情報を、Self-Attentionのクエリ・キーベクトルへ回転操作として組み込む位置エンコーディング手法。 各トークンの位置に応じてベクトルの成分ペアを異なる角度で回転させることで、2つのトークン間のAttentionスコアが、両者の絶対的な位置ではなく相対的な位置の差だけに依存するという性質を持たせられる。 学習時に見た系列長より長い入力に対しても、ある程度自然に位置情報を外挿できる(長さ外挿性)とされ、長いコンテキストウィンドウを扱う近年のLLMで広く採用されている。 LlamaやGPT-NeoXをはじめ、多くのオープンウェイトLLMや商用LLMの位置エンコーディング手法として標準的に使われている。
背景
初期のTransformerは、位置ごとに固定または学習されたベクトルを単語埋め込みに加算する絶対位置エンコーディングを採用していたが、学習時より長い系列への汎化性能に課題があった。 RoPEは、位置情報を加算ではなく回転という形でベクトルに組み込むことで、相対位置関係を自然に表現し、長い系列への汎化性を高めることを狙って考案された。
歴史
2021年: SuらがRoPEを提案する論文「RoFormer: Enhanced Transformer with Rotary Position Embedding」を発表。 2023年: LlamaやGPT-NeoXなど主要なオープンウェイトLLMがRoPEを採用し、事実上の標準的な位置エンコーディング手法として広まる。
アーキテクチャ
各トークンの位置 m に対して、クエリベクトル・キーベクトルの成分を2つずつペアにし、位置 m に応じた角度で回転行列を適用する。 位置 m のクエリと位置 n のキーの内積を計算すると、回転操作の性質により、その値は m と n の差(相対位置)にのみ依存する形で表現される。 この回転操作はベクトルへの掛け算のみで実現でき、絶対位置エンコーディングのように埋め込みへ直接加算する必要がない。
コード例
RoPEの回転操作の最小実装
import torch
def rope(x, position, base=10000):
dim = x.shape[-1]
freqs = 1.0 / (base ** (torch.arange(0, dim, 2).float() / dim))
angles = position * freqs
x1, x2 = x[..., ::2], x[..., 1::2]
rotated = torch.stack([
x1 * angles.cos() - x2 * angles.sin(),
x1 * angles.sin() + x2 * angles.cos(),
], dim=-1).flatten(-2)
return rotated
q = torch.randn(4)
q_rotated = rope(q, position=torch.tensor(3.0))利点
- Attentionスコアが相対的な位置関係に基づいて計算されるため、位置関係の学習が効率的に行われる
- 学習時より長い入力系列に対しても、ある程度自然に位置情報を外挿できる
- 追加の学習パラメータを必要とせず、既存のTransformer構造に組み込みやすい
欠点
- 学習時のコンテキスト長を大きく超える外挿では、性能の劣化が知られている
- 回転操作の実装や数値精度の扱いに注意が必要で、素朴な絶対位置エンコーディングより実装がやや複雑
- コンテキスト長をさらに拡張する際、周波数のスケーリングなど追加の工夫(NTK-awareスケーリング等)が必要になることがある
比較
- Self-Attention — RoPEはSelf-Attentionのクエリ・キーベクトルに位置情報を組み込むための手法
- Transformer — RoPEは多くの現代的なTransformerベースLLMで採用されている位置エンコーディング手法
- コンテキストウィンドウ — RoPEの長さ外挿性は、LLMのコンテキストウィンドウを拡張する取り組みと関連が深い
関連用語
よくある質問
RoPEと従来の位置エンコーディングの違いは?
従来手法は位置ごとのベクトルを単語埋め込みへ加算するのに対し、RoPEはクエリ・キーベクトルを位置に応じて回転させる。この違いにより、Attentionスコアが相対的な位置関係を自然に反映できるようになる。
RoPEはコンテキスト長の拡張にどう関係する?
RoPEは学習時より長い系列にもある程度対応できる長さ外挿性を持つとされ、周波数のスケーリング調整などと組み合わせることでコンテキストウィンドウを拡張する手法の基盤としても使われている。