Skip to content

필사 모드: 位置エンコーディング — RoPE と文脈拡張の代償

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

はじめに

トランスフォーマーのアテンションは、それ自体では順序を知りません。トークンの順序を伝える仕組みが位置エンコーディングであり、いま出ているオープンソースのモデルは事実上すべて RoPE、すなわち回転位置埋め込みを使います。

config で関係するフィールドは二つか三つだけです。rope_thetamax_position_embeddings、そして存在するときだけ現れる rope_scaling です。この記事では、その少数の数字が文脈長という結果へどうつながるのかを扱います。

数値は 2026-08-12 に論文・公式レポート・config.json で直接確認しました。モデルは更新されるため、原典を再度確認してください。

RoPE がすること

RoPE はクエリとキーのベクトルを、位置に比例した角度だけ回転させます。二つのトークンの内積は結局その位置の差だけに依存するようになり、相対的な距離が自然にアテンションへ反映されます。

肝心なのは次元ごとに回転速度が違う点です。前方の次元は速く回転して近い距離を細かく区別し、後方の次元は非常にゆっくり回転して遠い距離を区別します。その速度を決める値が rope_theta です。

rope_theta を波長として読む

数字の意味を波長に置き換えると直感が得られます。次元対の波長は次のように計算します。

波長(i) = 2 x pi x theta^(2i / head_dim)

head_dim = 128 のとき、最も遅い次元の波長:
  theta =    10,000  ->        54,410 位置
  theta =    50,000  ->       265,295 位置
  theta =   500,000  ->     2,559,196 位置
  theta = 1,000,000  ->     5,063,256 位置

波長が文脈長より短いと、その次元の位置信号は一周して巻き戻ります。異なる二つの位置が同じ角度を指すことになり、モデルが両者を区別しにくくなります。theta を大きくすることは、この巻き戻りが起きる地点を遠くへ押しやる作業です。

実際の値はこうです。Llama 3 は 500,000 を使います。レポートは RoPE の基準周波数を 500,000 に引き上げ、これがより長い文脈の支持を可能にすると述べ、先行研究がこの値を 32,768 までの文脈長に有効と示したことを引用しています(arXiv:2407.21783)。Qwen3、Qwen2.5、Mixtral、GLM-4.5 の config はいずれも 1,000,000 です。

学習の途中で theta を変える

Qwen3 はこの値を最初から大きくせず、学習の途中で引き上げます。レポートによれば、最後の長文脈段階で ABF 手法により RoPE の基準周波数を 10,000 から 1,000,000 へ高めます(arXiv:2505.09388)。上の表を基準にすると、最も遅い次元の波長が約 93 倍に伸びます。

順序が重要です。短い文脈では小さな theta が近い距離をより細かく区別できて有利であり、長い文脈が必要になる時点で theta を上げて遠い距離を区別できるようにします。学習の大半を短い文脈で安く済ませ、最後だけ高価な長文脈学習を行う構造とかみ合っています。

興味深い例外: 低い theta に YaRN

DeepSeek-V3 の config を見ると rope_theta が 10,000 です。上の表どおりなら波長は五万程度なのに、文脈長は 128K を掲げています。答えは同じ config の rope_scaling 項目にあります。

{
  "rope_theta": 10000,
  "rope_scaling": {
    "type": "yarn",
    "factor": 40,
    "original_max_position_embeddings": 4096,
    "beta_fast": 32,
    "beta_slow": 1
  }
}

もとの位置範囲 4096 に倍率 40 を掛けて拡張するという意味です。レポートも、事前学習の後に YaRN を適用し、それぞれ 1000 ステップの二段階を経て窓を 4K から 32K へ、さらに 128K へ広げたと記しています。倍率は 40、アルファは 1、ベータは 32 で二段階とも同一であり、この拡張は分離された共有キーにのみ適用すると述べています(arXiv:2412.19437)。

Kimi K2 は rope_theta 50,000 に YaRN 倍率 32 の組み合わせです。同じ系統の設計ですが、基準周波数を五倍高く取っています。

YaRN 論文は、この方式が従来手法に比べて 10 倍少ないトークンと 2.5 倍少ない学習ステップで文脈窓を拡張すると報告しています(arXiv:2309.00071)。拡張そのものが安いという意味であり、拡張された文脈を使うコストが安いという意味ではありません。

半分だけ回転させる

GLM-4.5 の config には partial_rotary_factor が 0.5 で入っています。ヘッド次元の半分にのみ回転を適用し、残り半分は位置と無関係のまま置くという意味です。位置に縛られない成分を残す設計であり、回転の演算量もあわせて減ります。

MLA を使うモデルでも似た分離が現れます。DeepSeek-V3 は qk_nope_head_dim 128 と qk_rope_head_dim 64 を別々に持ちます。回転を適用しない部分と適用する部分を分けたもので、圧縮された潜在ベクトルから位置情報を復元するのが難しいため、位置を担う成分だけを取り出して扱う構造です。

長い文脈はなぜ無料でないのか

rope_scaling を有効にすれば、数字の上では文脈が伸びます。しかしコストは三か所で発生します。

第一にプリフィルの演算です。アテンションスコアの計算はシーケンス長の二乗に比例します。文脈を四倍にすれば、この部分の演算量は十六倍になります。

第二に KV キャッシュです。前の記事で計算したとおり、キャッシュは文脈長に線形で増えます。Qwen3-8B では fp16 のキャッシュが 4,096 トークンで 0.56 GiB、32,768 トークンで 4.50 GiB、131,072 トークンで 18.00 GiB です。重みよりキャッシュが大きくなる地点が来ます。

第三に、アーキテクチャの選択そのものが文脈長に左右されます。Kimi K2 レポートは、シーケンス長 128k においてアテンションヘッドを 64 から 128 に増やすと推論の演算量が 83 パーセント増えると記し、それを根拠にヘッドを 64 に保っています(arXiv:2507.20534)。長い文脈を前提にすると設計判断が変わります。

そして拡張手法が品質を保つ保証はありません。だからこそ各レポートは拡張後に別途の長文脈評価を載せています。

段階的に伸ばす

Llama 3 は拡張を学習で処理しました。レポートによれば 405B モデルの事前学習は初期事前学習、長文脈事前学習、アニーリングの三段階からなり、文脈長はもとの 8K から最終的な 128K まで六段階にわたって段階的に伸ばし、この長文脈段階に約 8000 億トークンを使いました。

つまり長い文脈を得る道は大きく二つです。学習で伸ばすか、拡張手法で伸ばすか。前者は高価で、後者は安価ですが検証をより必要とします。

おわりに

rope_theta を見るときは波長に換算してみてください。その値が文脈長より十分に大きいかが最初の点検です。rope_scaling があるなら、そのモデルの文脈長は学習された値ではなく拡張された値です。そして文脈を伸ばすときは、プリフィルの演算とキャッシュのメモリも一緒に増えることを計算に入れる必要があります。

参考資料

試してみる

シリーズ

현재 단락 (1/51)

トランスフォーマーのアテンションは、それ自体では順序を知りません。トークンの順序を伝える仕組みが位置エンコーディングであり、いま出ているオープンソースのモデルは事実上すべて RoPE、すなわち回転位置...

작성 글자: 0원문 글자: 3,998작성 단락: 0/51