コンテキスト長

Definition:Context length

コンテキスト長とは、LLMが1回の推論処理において扱うことのできるトークン列の最大長である。単位は通常トークンで表され、「8K」「32K」「128K」「1M」などと表記される。
ここでいうコンテキストには、単純なユーザー入力だけでなく、システム指示、過去の会話、RAGによって取得された文書、ツールから取得した情報など、モデルに入力されるトークン列が含まれる。モデルによっては生成する出力トークンもコンテキスト長の制限に含まれるため、「128Kコンテキスト」とは必ずしも128Kトークンの入力に加えて128Kトークンを出力できるという意味ではない。

コンテキスト長とモデル規模との関係

モデル規模とコンテキスト長は、基本的には別の設計パラメータである。モデル規模をパラメータ数$P$とすれば、$P$からコンテキスト長$L$を一意に決定するような関係式は存在しない。したがって、7Bモデルだから8K、70Bモデルだから128Kというような対応関係があるわけではない。

重要なのは、コンテキスト長を決めるのがパラメータ数そのものではなく、位置情報の表現方法、Attentionの構造、学習時に使用した系列長などのモデル設計であることである。同じパラメータ数のモデルでも、これらを変更することで異なるコンテキスト長を実現できる。

ただし、両者が完全に無関係というわけではない。モデルの層数やAttention構造はパラメータ数と関連しており、コンテキストを長くするとAttention計算量はトークン数の2乗に比例して増加し、KV Cacheのメモリ消費もトークン数に比例して増加する。そのため、モデル規模、コンテキスト長、ハードウェア資源は実際の推論性能において相互に影響する。しかし、これは「モデル規模からコンテキスト長が決まる」という意味ではない。また、事後的に位置表現を拡張する手法と、当初から長い系列長で学習する「ネイティブ長コンテキスト」とは区別すべき概念であり、多くの実運用モデルは両者を併用している。

モデル規模を変えずにコンテキスト長を拡張する方法

モデルのパラメータ数を増やさずにコンテキスト長を拡張する方法として、現在特に重要なのが位置表現の拡張である。代表例がRoPE(Rotary Position Embedding)を採用したモデルに対するRoPE Scaling、Position Interpolation、NTK-aware Scaling、YaRNなどである。

RoPEでは、トークンのQueryとKeyに対して、位置$p$に応じた回転変換を行う。次元をペアにした2次元部分について書けば、回転行列は

\[R(p\theta)=\begin{pmatrix}\cos(p\theta) & -\sin(p\theta) \\\sin(p\theta) & \cos(p\theta)\end{pmatrix}\]

であり、QueryとKeyを

\[\mathbf{q}'_p = R(p\theta)\,\mathbf{q}_p, \qquad \mathbf{k}'_p = R(p\theta)\,\mathbf{k}_p\]

のように変換する。このとき重要なのは、モデルの重みそのものを増やしているのではなく、位置に対応する回転角を変換していることである。

元のコンテキスト長が$L_0$、拡張後が$L_1$であるとする。単純なPosition Interpolationでは、位置を

\[p' = p\,\frac{L_0}{L_1}\]

と写像し、RoPEの回転を

\[R(p\theta) \rightarrow R(p'\theta)\]

とする。これによって、より長い位置$p$を、元の学習範囲に対応する位置へ圧縮して表現できる。ただし、この方法はすべての周波数成分を一律に圧縮するため、追加学習なしでは近傍トークン間の相対的な位置関係の解像度が低下し、性能が劣化しやすいという欠点がある。

NTK-aware ScalingとYaRNによる拡張

RoPEの各次元$i$は、基数$b$に対して周波数

\[\theta_i = b^{-2i/d}\]

($d$はヘッド次元数)を持ち、次元ごとに異なる波長$2\pi/\theta_i$を持つ。低周波数(波長が長い)次元は長距離の位置関係を、高周波数(波長が短い)次元は近距離の位置関係を主に符号化している。

NTK-aware Scalingは、この性質を利用し、次元ごとの補間比率を明示的に設計する代わりに、回転の基数$b$そのものを次のように変更する。

\[b' = b\left(\frac{L_1}{L_0}\right)^{\frac{d}{d-2}}\]

基数を大きくすることで、低周波数次元は強く圧縮される一方、高周波数次元はほとんど変化しない。これにより、Position Interpolationのように全次元を一律に圧縮する場合よりも、近傍トークンの位置解像度を保ちやすい。

YaRN(Yet another RoPE extensioN)は、この発想をさらに精緻化したものである。次元ごとの波長とコンテキスト長の比率に応じてランプ関数を定義し、波長が十分短い高周波数次元は補間を行わず外挿し、波長が十分長い低周波数次元はPosition Interpolationと同様に補間し、中間の次元は両者を滑らかに混合する。概念的には、元の周波数$\theta_i$を

\[\theta_i \rightarrow \theta'_i = f(\theta_i, L_0, L_1)\]

という形で、周波数成分によって異なるスケーリングを行う。さらにYaRNは、位置補間によって生じるAttentionスコアの分布(softmaxのエントロピー)の変化を補正するため、Attentionロジットに温度スケーリングを加える。この温度項は追加学習の有無にかかわらず単独でも一定の効果を持つことが報告されている。

したがってYaRNの本質は、パラメータ数を増やすことではなく、RoPEが位置を表現するための周波数・回転を次元ごとに異なる形で変更し、その上でAttentionの分布まで調整しながら、長い系列で追加学習を行うことで拡張された位置範囲における性能を維持する点にある。

RoPE以外の方法

コンテキスト拡張はRoPEの回転変換に限定されない。例えばALiBiでは、QueryやKeyを回転させる代わりに、Attentionスコアへヘッドごとの傾き$m$とトークン間距離に応じた線形バイアスを加える。

\[A_{ij} = \frac{\mathbf{q}_i \mathbf{k}_j^{\mathsf{T}}}{\sqrt{d}} - m\,|i-j|\]

ALiBiは位置埋め込み自体を持たず、距離に応じた減衰のみでAttentionを構成するため、学習時より長い系列長への外挿性能に優れる一方、拡張の上限や精度はRoPE系のスケーリング手法と単純比較できるものではない。

また、Transformer-XLのようなメモリ型アーキテクチャでは、過去の隠れ状態を後続の系列へ引き継ぐことで、単一のAttentionにすべての過去トークンを投入せずに長期的な情報を扱う。Sliding WindowやLocal Attentionでは、Attentionする範囲そのものを制限することで長い系列を処理する。さらにStreamingLLMのような手法では、系列冒頭の少数トークンを「Attention Sink」として保持しつつ直近のウィンドウのみにAttentionを限定することで、位置の分布外(OOD)問題を回避しながら実質無制限の系列を安定して処理できる。

まとめ

コンテキスト長とは、LLMが1回の推論で扱えるトークン列の最大長である。モデルのパラメータ数とコンテキスト長の間には単純な比例関係はなく、コンテキスト長は位置表現やAttention構造、学習方法によって決まる。

したがって、モデル規模を変えずにコンテキスト長を拡張することは可能である。特にRoPE系モデルでは、位置$p$を回転角・周波数の変換によって長い位置範囲へと対応づける仕組みが中心となる。

NTK-aware Scalingは基数の一括変更、YaRNは次元別のランプ関数とAttention温度補正によってこれを精緻化したものである。一方、ALiBiのようにAttentionスコアを直接変更する方法や、メモリ型・局所Attention型・Attention Sink型のようにAttentionそのものの構造を変更する方法も存在する。

したがって、「コンテキスト長を増やす」とはモデルを大きくすることではなく、モデルが位置と長距離依存を表現する仕組み、およびAttentionの計算構造そのものを拡張することと捉えるのが最も正確である。

Mathematics is the language with which God has written the universe.





















コンテキスト長 FreeToken LLM並列化方式 通信機器の歴史 CPUの歴史 最小二乗法