AI・機械学習
上級

xPos(Extrapolatable Position Embedding)(エックスポス エクストラポレータブル ポジション エンベディング)

Microsoftが提案したRoPEの拡張版位置エンコーディング。各位置に指数的減衰スケーリングを加えることで、訓練長を大幅に超える長いコンテキストへの安定した外挿を実現する手法。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
positional-encoding
rope
length-extrapolation
microsoft
transformer

xPos(Extrapolatable Position Embedding)とは

xPos はMicrosoft Researchが2023年に発表したRoPEの拡張版位置エンコーディング。通常のRoPE(Rotary Position Embedding)に指数的減衰スケーリングを組み合わせることで、訓練時のコンテキスト長を大きく超える推論での安定性を確保する。

RoPEの限界

RoPEは現在の多くのLLM(LLaMA, Mistral等)で採用される強力な手法だが、長さ外挿には課題がある。

  • 訓練長(例:2K)以内では高精度
  • 訓練長を超えるとPerplexityが急上昇し品質が劣化
  • YaRN等の後付けスケーリングで緩和できるが追加の微調整が必要

xPosのアイデア

通常RoPE:q' = R(θ·m)·q
xPos:  q' = R(θ·m)·(γ^m)·q
         k' = R(θ·n)·(γ^(-n))·k

γ = 指数減衰スカラー(ハイパーパラメータ、例:0.4〜0.99)
m, n = クエリ・キーの位置インデックス
  • クエリには γ^m(正方向減衰)、キーには γ^(-n)(逆方向増幅)を乗算
  • 内積をとると距離 |m-n| が大きいほど注意スコアが自然に小さくなる
  • 相対距離に応じた減衰が自動的に実現され、遠距離トークンの過大評価を防ぐ

実装の簡便さ

xPosの大きな利点は既存RoPE実装への最小限の変更で適用できること。

# 擬似コード
def xpos_rotate(x, position, gamma=0.4, base=10000):
    theta = 1.0 / (base ** (torch.arange(0, dim, 2) / dim))
    rot = rotation_matrix(theta * position)
    scale = gamma ** position  # xPos追加部分
    return rot @ x * scale

性能評価

コンテキスト長RoPE PPLxPos PPL
512(訓練内)12.312.1
2048(訓練長)14.814.5
8192(外挿)31.218.7
32768(外挿)崩壊24.3

(参考値、モデル・データセットにより変動)

関連技術との位置付け

  • ALiBi:線形バイアスで単純だが学習パラメータを持たない
  • RoPE + YaRN:微調整で外挿を改善するが計算コスト増
  • xPos:訓練中から外挿を考慮した設計。Torchscaleで公式実装
  • LongNet:1Bトークン長を目指す研究でxPos的減衰を参照

Torchscaleでの利用

MicrosoftのTorchscaleライブラリではxPosがデフォルトで利用可能。

pip install torchscale
from torchscale.component.xpos_relative_position import XPOS
xpos = XPOS(head_dim=64)

まとめ

xPosはRoPEに指数減衰を加えるシンプルな拡張で、長さ外挿性能を大幅に改善する。実装の容易さと効果のバランスが良く、長コンテキスト対応LLMの設計で参照価値の高い手法。

この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/7