最適化アルゴリズム

コサインアニーリング こさいんあにーりんぐ

コサインアニーリング学習率スケジューリング焼きなまし法最適化深層学習コサイン関数
コサインアニーリングについて教えて

簡単に言うとこんな感じ!

コサインアニーリングは「学習率をコサイン曲線に沿ってなめらかに下げる」方法だよ。急に下げるのではなく、最初はゆっくり、途中で加速して、最後またゆっくり——この自然な変化が深層学習によく効くんだ!


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

コサインアニーリング(Cosine Annealing) は、学習率をコサイン関数の曲線に沿って最大値から最小値へなめらかに減衰させる学習率スケジューリング手法です。2016年にLoshchilovとHutterが提案しました(論文:“SGDR: Stochastic Gradient Descent with Warm Restarts”)。

名前の「アニーリング(焼きなまし)」は金属加工の「焼きなまし法」から来ています。金属を高温から徐々に冷やすことで結晶構造を整えるように、学習率を徐々に下げることで損失関数のより良い最適点に収束させます。

コサイン曲線の特性から「最初と最後は変化がゆるやか、中間で急激に下がる」という形になり、急激な学習率の切り替えによる悪影響を避けながら効率よく収束できます。GPTBERT・Vision Transformerなど多くの大規模モデルで採用されています。


コサインアニーリングの計算式

学習ステップ t における学習率 η(t) は以下の式で計算されます:

η(t) = η_min + 0.5 × (η_max - η_min) × (1 + cos(πt/T))
  • η_max:最大学習率
  • η_min:最小学習率(通常0または非常に小さい値)
  • T:総ステップ数
import torch.optim as optim
from torch.optim.lr_scheduler import CosineAnnealingLR

optimizer = optim.Adam(model.parameters(), lr=1e-3)  # η_max = 0.001
scheduler = CosineAnnealingLR(
    optimizer,
    T_max=100,    # 総エポック数
    eta_min=1e-6  # η_min
)

for epoch in range(100):
    train()
    scheduler.step()

歴史と背景

  • 2016年:LoshchilovらがSGDRを提案し、コサインアニーリングとWarm Restartを組み合わせた手法を発表
  • 2017年:Transformerでウォームアップ後のコサインアニーリングが採用され普及
  • 2018年以降:FastAI・HuggingFaceなどのライブラリが標準スケジューラとして実装
  • 現在LLMの事前学習において「ウォームアップ+コサインアニーリング」が事実上の標準パターン

コサインアニーリングの種類

種類特徴
CosineAnnealingLR1サイクルだけ減衰する基本型
CosineAnnealingWarmRestarts(SGDR)周期的にリスタートし学習率をリセット。局所最適解から脱出しやすい
ウォームアップ+コサインアニーリング序盤ウォームアップ、その後コサイン減衰。LLMの標準

他のスケジューリング手法との比較

手法特徴欠点
ステップ減衰段階的に半減。実装が簡単急な変化でモデルが動揺する場合がある
指数減衰なめらかだが減衰が速すぎることも最後は学習率がほぼゼロになる
コサインアニーリングなめらかで自然な減衰サイクル数の設定が必要

関連用語