Context Window Scaling(コンテキストウィンドウスケーリング)
LLMの学習時コンテキスト長を推論時に外挿して拡張する技術群。位置エンコーディングの補間・外挿手法(NTK-Aware Scaling、Dynamic NTK等)により、追加学習なしまたは最小限のファインチューニングで対応長を数倍に伸ばす。
Context Window Scalingとは
Context Window Scaling(コンテキストウィンドウスケーリング)とは、LLMが学習時に使用したコンテキスト長を超えて推論時に長い入力を処理するための位置エンコーディング拡張技術の総称である。学習コスト(数百万ドル規模)を再度かけずに対応コンテキスト長を拡張できる点が最大の利点である。
位置エンコーディングとスケーリングの関係
Transformerモデルはトークンの順序情報を位置エンコーディング(Positional Encoding)で表現する。現代のLLMの主流はRoPE(Rotary Position Embedding)であり、トークン位置を回転行列として埋め込む。しかし、RoPEは学習時に見た最大位置までしか正確に機能せず、それを超える位置では出力が急速に劣化する。
主要なスケーリング手法
Position Interpolation(PI)
学習済みの位置範囲[0, L]に新しい位置[0, L']を線形に圧縮してマッピングする。Meta Researchが提案し、LLaMA 2の4K→32K拡張に使用された。実装が単純だが、短いコンテキストでの性能がわずかに劣化する。
NTK-Aware Scaling
RoPEの各周波数成分に異なるスケーリング係数を適用する。高周波成分(近距離の位置関係)はほぼそのまま維持し、低周波成分(遠距離の位置関係)のみを圧縮する。追加学習なしで4倍程度の拡張が可能。
Dynamic NTK
推論中にコンテキスト長に応じてNTKスケーリング係数を動的に調整する。短い入力では元の精度を維持し、長い入力でのみスケーリングを適用する。LLaMAコミュニティで広く採用されている。
| 手法 | 追加学習 | 拡張倍率 | 短文性能維持 |
|---|---|---|---|
| Position Interpolation | 短時間FT推奨 | 8倍 | やや低下 |
| NTK-Aware | 不要〜短時間FT | 4倍 | 良好 |
| Dynamic NTK | 不要 | 4〜8倍 | 良好 |
| YaRN | 短時間FT(400step) | 16〜64倍 | 優秀 |
| Code Llama方式 | 長時間継続事前学習 | 4倍(16K) | 優秀 |
実装上の考慮点
- ファインチューニングデータ: 拡張後のコンテキスト長に対応した長文データが少量でも必要な手法がある
- Attention Sinkの保持: 先頭数トークンのAttention重みが異常に高い現象(Attention Sink)はスケーリング時も考慮が必要
- 段階的拡張: 4K→16K→64Kのように段階的に拡張するほうが一度に大きく拡張するより安定する
FAQ
Q1: 追加学習なしでコンテキスト長を拡張できる手法はありますか?
A1: Dynamic NTKやNTK-Aware Scalingは追加学習なしで4倍程度の拡張が可能である。ただし拡張倍率が大きくなるほど品質劣化が起こるため、8倍以上の拡張にはYaRNなど短時間ファインチューニングを伴う手法が推奨される。
Q2: スケーリング後のモデルは短いプロンプトでも性能が落ちますか?
A2: 手法により異なる。Position Interpolationは短文でわずかに劣化するが、Dynamic NTKやYaRNは短い入力では元の挙動を維持するよう設計されている。
Q3: どの手法を選べばよいですか?
A3: 手軽に試すならDynamic NTK(コード変更のみ、4倍拡張)、本格的な拡張にはYaRN(400ステップ程度のFTで64倍拡張)が推奨される。