【ロープ】
RoPE(回転位置埋め込み) とは?
最終更新:
💡 ベクトルを回して、トークンの位置を計算に組み込む
Transformerでトークンの位置を表す方法の一つ。QueryとKeyのベクトルを位置に応じて回転させ、アテンションの内積に相対位置の情報を組み込む。
📌 このページのポイント
- QueryとKeyの成分を2次元のペアとして回転させる
- 各ペアの回転角は位置に応じて変わり、ペアごとに回転の速さが異なる
- 内積には、内容のベクトルに加えて位置差に応じた回転が効く
- RoPEを使うモデルでも、学習した長さを超える入力の品質は別途確認が必要
RoPEは何に位置を与えるの?
Transformerが扱うトークンの位置だよ。単語が複数のトークンに分かれる場合もある。RoPEはアテンションで使うQueryとKeyに回転を適用して、位置の情報を計算に組み込むんだ
回転するってどういうこと?
ベクトルの成分を2つずつ組にして、その平面で回すよ。あるペアの位置番号をm、1位置分の角度をθとすれば、mθだけ回す。0から数えるなら、3番目のトークンの番号は2だね。ペアごとにθは異なるんだ
回転させると何が分かるの?
位置mのQueryと位置nのKeyの内積では、位置に関する回転は差n−mで表せるよ。内容を表すベクトルも計算に残るので、内積が距離だけで決まるわけではないんだ
位置ベクトルを足す方式と何が違うの?
長い文章なら、どこまでも扱える?
そうとは限らないよ。LLaMAなどRoPEを使うモデルで、位置番号を縮めて学習時の範囲に対応させるPosition Interpolationが研究されている。長文脈への拡張では調整や追加学習、出力品質の評価も考えるんだ
まとめ:ざっくりこれだけ覚えればOK!
「RoPE」って出てきたら「QueryとKeyを回して、位置の情報を与える方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Rotary Position Embedding」 = 回転位置埋め込み
💬 Rotary(回転する)・Position(位置)・Embedding(埋め込み)から来た名前だよ。位置を回転として組み込む方法で、RoFormer論文で提案されたんだ