AI・機械学習
上級

コサインアニーリング(コサインアニーリング)

コサイン関数の半周期を利用して学習率を最大値から最小値まで滑らかに減衰させるスケジューリング手法。LLM 訓練では Llama 3・GPT-4・Mistral など主要モデルがほぼ例外なく採用しており、2026 年時点で事実上の業界標準スケジューラである。

0 回閲覧
0 いいね

コサインアニーリングとは

コサインアニーリング(Cosine Annealing)は、学習率をコサイン関数に基づいて滑らかに減衰させるスケジューリング手法である。2017 年に Loshchilov & Hutter が SGDR(Stochastic Gradient Descent with Warm Restarts)論文で提案し、当初は画像認識タスクで効果を発揮した。その後 LLM 分野で広く採用され、2026 年現在では GPT-4・Llama 3・Mistral・Gemma 2 など主要モデルの訓練に標準的に用いられている。

基本的な数式は以下の通り:

η(t) = η_min + 0.5 × (η_max - η_min) × (1 + cos(π × t / T))

ここで η_max はピーク学習率、η_min は最小学習率、t は現在のステップ、T は総ステップ数である。

コサインアニーリングの特性

なぜコサインが選ばれるのか

コサイン関数による減衰は以下の特性を持つ:

  • 訓練初期〜中盤: 学習率の減衰が緩やか。パラメータ空間の広範な探索を維持
  • 訓練中盤: 滑らかな遷移。急激な変化がなく損失の安定した減少を促進
  • 訓練終盤: 急速に減衰。精密な収束を実現

線形減衰では中盤の学習率が相対的に低くなり探索が不十分になるが、コサインは中盤まで高い学習率を維持するため、より良い解に到達しやすい。

バリエーション

バリエーション特徴用途
標準 Cosine半周期で η_max→η_minLLM 事前学習の標準
Cosine with Restarts周期的にリスタート継続学習、マルチフェーズ訓練
Cosine with Hard Restartsリスタート時に η_max に即復帰SGDR オリジナル
Cosine with Linear Warmupwarmup→cosine decayLlama 3, GPT-4 採用の主流形式
Cosine with Min LR Ratioη_min = η_max × ratio設定簡略化、ratio=0.1 が標準

主要LLMでの実採用パラメータ

モデルη_maxη_minウォームアップ総ステップバッチサイズ
Llama 3 8B3×10⁻⁴3×10⁻⁵2,000 steps~3.75M4M tokens
Llama 3 70B1.5×10⁻⁴1.5×10⁻⁵2,000 steps~3.75M4M tokens
Mistral 7B3×10⁻⁴非公開1,000 steps非公開非公開
Gemma 2 9B3×10⁻⁴非公開非公開~1.25M4M tokens
GPT-3 175B6×10⁻⁵0375M tokens~300B tokens3.2M tokens

PyTorch での実装

from torch.optim.lr_scheduler import CosineAnnealingLR, SequentialLR, LinearLR

# 基本形: Cosine Annealing のみ
scheduler = CosineAnnealingLR(
    optimizer,
    T_max=100000,    # 総ステップ数
    eta_min=3e-5     # 最小学習率
)

# Llama 3 形式: Linear Warmup + Cosine
warmup = LinearLR(
    optimizer,
    start_factor=1e-7 / 3e-4,  # 初期学習率 / ピーク学習率
    total_iters=2000
)
cosine = CosineAnnealingLR(optimizer, T_max=98000, eta_min=3e-5)
scheduler = SequentialLR(optimizer, [warmup, cosine], milestones=[2000])

Cosine with Restarts

from torch.optim.lr_scheduler import CosineAnnealingWarmRestarts

# T_0=10000 ステップ周期でリスタート、T_mult=2 で周期が倍増
scheduler = CosineAnnealingWarmRestarts(
    optimizer,
    T_0=10000,
    T_mult=2,
    eta_min=1e-6
)

コサインアニーリング vs 他スケジューラの収束比較

GPT-2 124M パラメータモデルの OpenWebText 訓練(10B トークン)での比較実験が複数報告されている:

スケジューラ最終 Perplexity訓練 Loss収束安定性
Cosine Annealing19.82.98◎ 非常に安定
Linear Decay20.33.01○ 安定
Constant LR21.13.08△ 後半で振動
Step Decay20.93.06△ 段差で不安定化
Inverse Sqrt20.12.99○ 安定

コサインアニーリングは最終精度・安定性の両面で他手法を上回り、LLM における第一選択となっている。

注意点とトラブルシューティング

  • T_max の設定ミス: 実際の訓練ステップ数と T_max が一致しないと、訓練終了時に学習率が η_min に達しない(T_max > 実ステップ数)か、途中で 0 に近づきすぎる(T_max < 実ステップ数)
  • η_min = 0 の問題: 学習率が完全に 0 になるとオプティマイザの状態更新が停止。η_min はピーク学習率の 1/10 程度を推奨
  • マルチ GPU 訓練でのステップカウント: DataParallel vs DistributedDataParallel でステップ数の数え方が異なる場合がある

FAQ

Q1: コサインアニーリングで T_max を訓練ステップ数より大きく設定するとどうなる?

学習率が η_min まで到達せずに訓練が終了する。結果として後半の学習率が想定より高くなり、微調整フェーズが不十分になる可能性がある。Llama 3 の訓練では T_max を正確に総ステップ数 - ウォームアップステップ数に設定している。

Q2: コサインアニーリングとウォームアップは必ずセットで使うべき?

LLM の事前学習ではセットが推奨される。ウォームアップなしでいきなりピーク学習率を使うと、初期の大きな勾配で loss spike(損失の急上昇)が発生しやすい。ファインチューニングでは事前学習済みの安定した状態からスタートするため、ウォームアップなしでも問題ないケースがある。

Q3: Cosine with Restarts はどんな場面で有効?

継続学習(Continual Learning)や、訓練データを複数フェーズで投入するシナリオで効果的。各リスタートで学習率を上げ直すことで、新しいデータ分布への適応力を回復する。ただし、標準的な単一フェーズ事前学習では Restarts なしのコサインが主流。