YaRN(ヤーン)
Yet another RoPE extensioNの略。RoPEの低周波・高周波成分を異なる比率でスケールし、少量の継続学習でLLMのコンテキスト長を最大32倍拡張する手法。Mistral-7B-128KやLlama 3.1の長コンテキスト対応に採用。
概要
YaRN(Yet another RoPE extensioN)は、LLMの位置エンコーディング手法RoPEを効率的に拡張するアルゴリズムで、2023年にNortheastern University・EleutherAI・Quansight Labsの共同研究として発表された。元の学習コンテキスト長の最大32倍まで、少量のデータでの継続学習(約400ステップ)で拡張できる点が特徴だ。
Mistral AI公式の「Mistral-7B-Instruct-v0.2(32K)」や「Mistral-7B-128K」、Meta公式の「Llama 3.1」シリーズ、Qwen2.5等の主要OSSモデルに採用されており、2025年時点でRoPEスケーリングのデファクトスタンダードとなっている。
技術的詳細
RoPEの問題点: RoPEは三角関数の周波数を使って位置を表現する。コンテキストを単純にスケールすると、低周波成分(長距離トークン間関係)では外挿誤差が大きく、高周波成分(隣接トークン関係)では既存情報が失われる。
YaRNの解決策:
- RoPEの各次元(周波数成分)を3つのゾーンに分類: 低周波(interpol)・中間(ramp)・高周波(extrapl)
- 低周波成分: 線形補間(interpolation)でスケール→長距離依存を保護
- 高周波成分: NTK的な外挿でスケール→局所依存を保護
- Attention Temperature調整: コンテキスト拡張比sに応じてAttentionのsoftmax温度を調整し、精度劣化を補正
継続学習: 拡張後のコンテキスト長でわずか400〜1,000ステップの継続学習を行うことで、長距離依存の品質を回復。
採用モデル比較表
| モデル | 元コンテキスト | YaRN拡張後 | 継続学習量 | 公開状態 |
|---|---|---|---|---|
| Mistral-7B-128K | 4K/8K | 128K | 非公開 | 公開 |
| Llama 3.1 8/70/405B | 8K | 128K | 非公開 | 公開 |
| Qwen2.5-72B | 8K | 128K | 非公開 | 公開 |
| OpenHermes-2.5 128K | 4K | 128K | コミュニティ | 公開 |
llama.cppでの利用
# YaRNを使ったコンテキスト拡張(4K→32K)
./llama-cli -m model.gguf --ctx-size 32768 --rope-scaling yarn --rope-freq-scale 0.25 # 元の1/4にスケール
Ollamaのモデルファイル(Modelfile)でも設定可能:
PARAMETER rope_freq_base 160000
PARAMETER num_ctx 32768
精度比較(perplexity)
YaRNの論文では、Llama 2 7B(元4K)をYaRN拡張した場合:
- 4K以内: 元モデルと同等(perplexity劣化<1%)
- 8K〜32K: Linear Scalingより20〜40%低いperplexity
- 32K超: NTK-awareより良好な外挿性能を維持
関連技術との違い
Linear Scalingは全周波数成分を均等にスケールするため、高周波成分が失われて局所的な構文解析精度が低下する。NTK-awarescalingは高周波を保護するが低周波の外挿が不正確。YaRNはこの両者のトレードオフを周波数帯別の処理で解決した。
よくある質問(FAQ)
Q1: YaRNはGGUFモデルで使えますか?
A: はい。llama.cppとollamaが--rope-scaling yarnオプションで対応しています。QuantizedモデルでもYaRNは機能します。
Q2: どのくらいの継続学習が必要ですか? A: Mistral公式によれば約1,000ステップ(8Bモデルで数時間〜1日程度)。コミュニティ実験では400ステップでも十分な性能が得られています。
Q3: Llama 3.1はYaRNを使っていますか? A: Metaは詳細な手法を公開していませんが、技術レポートではYaRN類似のアプローチを使用したと記載されています。128KコンテキストはLlama 3.1公式の対応範囲です。
まとめ
- YaRNはRoPEの周波数帯別スケーリングで長コンテキスト品質劣化を最小化
- Mistral-128K・Llama 3.1・Qwen2.5等の主要OSSモデルに採用済み
- 少量継続学習(400〜1,000ステップ)で元コンテキストの最大32倍まで拡張可能
- llama.cppとOllamaで
--rope-scaling yarn設定により自作PCで利用可能