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 PPL | xPos PPL |
|---|---|---|
| 512(訓練内) | 12.3 | 12.1 |
| 2048(訓練長) | 14.8 | 14.5 |
| 8192(外挿) | 31.2 | 18.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の設計で参照価値の高い手法。