コサインアニーリング こさいんあにーりんぐ
コサインアニーリング学習率スケジューリング焼きなまし法最適化深層学習コサイン関数
コサインアニーリングについて教えて
簡単に言うとこんな感じ!
コサインアニーリングは「学習率をコサイン曲線に沿ってなめらかに下げる」方法だよ。急に下げるのではなく、最初はゆっくり、途中で加速して、最後またゆっくり——この自然な変化が深層学習によく効くんだ!
コサインアニーリングとは
コサインアニーリング(Cosine Annealing) は、学習率をコサイン関数の曲線に沿って最大値から最小値へなめらかに減衰させる学習率スケジューリング手法です。2016年にLoshchilovとHutterが提案しました(論文:“SGDR: Stochastic Gradient Descent with Warm Restarts”)。
名前の「アニーリング(焼きなまし)」は金属加工の「焼きなまし法」から来ています。金属を高温から徐々に冷やすことで結晶構造を整えるように、学習率を徐々に下げることで損失関数のより良い最適点に収束させます。
コサイン曲線の特性から「最初と最後は変化がゆるやか、中間で急激に下がる」という形になり、急激な学習率の切り替えによる悪影響を避けながら効率よく収束できます。GPT・BERT・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の事前学習において「ウォームアップ+コサインアニーリング」が事実上の標準パターン
コサインアニーリングの種類
| 種類 | 特徴 |
|---|---|
| CosineAnnealingLR | 1サイクルだけ減衰する基本型 |
| CosineAnnealingWarmRestarts(SGDR) | 周期的にリスタートし学習率をリセット。局所最適解から脱出しやすい |
| ウォームアップ+コサインアニーリング | 序盤ウォームアップ、その後コサイン減衰。LLMの標準 |
他のスケジューリング手法との比較
| 手法 | 特徴 | 欠点 |
|---|---|---|
| ステップ減衰 | 段階的に半減。実装が簡単 | 急な変化でモデルが動揺する場合がある |
| 指数減衰 | なめらかだが減衰が速すぎることも | 最後は学習率がほぼゼロになる |
| コサインアニーリング | なめらかで自然な減衰 | サイクル数の設定が必要 |
関連用語
- 学習率スケジューリング — コサインアニーリングが属する技術カテゴリ
- ウォームアップ(学習率) — コサインアニーリングと組み合わせる序盤フェーズ
- SGD(確率的勾配降下法) — 元論文SGDRの名前のベースとなった手法
- Adam — コサインアニーリングと最もよく組み合わされる最適化手法