多項式減衰スケジューラ(タコウシキゲンスイスケジューラ)
学習率を多項式関数 η(t) = (η₀ - η_end) × (1 - t/T)^p + η_end に基づいて減衰させるスケジューリング手法。冪指数 p を調整することで線形(p=1)から二次(p=2)、さらに急峻な減衰まで柔軟に制御できる。BERT・T5・mT5 など Google 系モデルの訓練で広く採用されてきた。
多項式減衰スケジューラとは
多項式減衰(Polynomial Decay)スケジューラは、学習率を多項式関数に基づいて減衰させる手法である。基本数式は:
η(t) = (η₀ - η_end) × (1 - t/T)^p + η_end
ここで η₀ は初期学習率、η_end は最終学習率、T は総ステップ数、p は冪指数(power)である。p=1 で線形減衰、p=2 で二次減衰となり、p が大きいほど初期の減衰が緩やかで後半に急速に減衰する。
Google の BERT(2018)および T5(2019)の訓練で標準採用され、TensorFlow エコシステムでは tf.keras.optimizers.schedules.PolynomialDecay として実装されている。PyTorch でも Hugging Face Transformers 経由で広く利用される。
冪指数による減衰カーブの違い
| 冪指数 p | 減衰パターン | 中間点(t=T/2)の学習率 | 特徴 | 主な用途 |
|---|---|---|---|---|
| 0.5 | 平方根減衰 | η₀ の 71% | 初期に急減衰、後半緩やか | あまり使用されない |
| 1.0 | 線形減衰 | η₀ の 50% | 均一な減衰 | BERT, ファインチューニング |
| 2.0 | 二次減衰 | η₀ の 75% | 初期緩やか、後半急 | T5, mT5 |
| 3.0 | 三次減衰 | η₀ の 88% | 初期は殆ど減衰しない | 長時間訓練 |
※ η_end = 0 の場合の理論値
コサインアニーリングとの比較
多項式減衰とコサインアニーリングは LLM 訓練における 2 大スケジューラであり、それぞれの特性を理解することが重要:
| 項目 | 多項式減衰 (p=1) | 多項式減衰 (p=2) | コサインアニーリング |
|---|---|---|---|
| 中間点学習率 | η₀ の 50% | η₀ の 75% | η₀ の 50%(η_min=0 時) |
| 減衰カーブ | 直線 | 上に凸 | S 字(上に凸→下に凸) |
| 後半の収束 | 均一に低下 | 急速に低下 | 急速に低下 |
| 数式の単純さ | ◎ | ◎ | ○ |
| Google 系モデル | BERT | T5 | Gemma 2 |
| Meta 系モデル | — | — | Llama 3 |
| 精度差(GPT-2 実験) | 基準 | +0.1 ppl | +0.3 ppl |
GPT-2 124M での実験ではコサインアニーリングがわずかに優位だが、差は小さい。BERT のオリジナル実装が線形減衰(p=1)を採用したため、BERT 系モデルのファインチューニングでは今でも線形減衰が広く使われている。
実モデルでの採用例
| モデル | 冪指数 p | 初期学習率 | 最終学習率 | ウォームアップ |
|---|---|---|---|---|
| BERT Base | 1.0(線形) | 1×10⁻⁴ | 0 | 10,000 steps |
| BERT Large | 1.0(線形) | 1×10⁻⁴ | 0 | 10,000 steps |
| T5 Base | 1.0(線形)※ | 1×10⁻² | 0 | — |
| mT5 | 1.0 | 1×10⁻² | — | inverse sqrt warmup |
| ALBERT | 1.0(線形) | 1.76×10⁻³ | 0 | 12,500 steps |
| DeBERTa | 1.0(線形) | 2×10⁻⁵ | 0 | ステップの 6% |
※ T5 は Inverse Square Root スケジューラを公式採用だが、ファインチューニングでは線形減衰が推奨
PyTorch での実装
from torch.optim.lr_scheduler import PolynomialLR
# PyTorch 2.x 標準
scheduler = PolynomialLR(
optimizer,
total_iters=100000, # 総ステップ数
power=2.0 # 冪指数(二次減衰)
)
# Hugging Face Transformers 経由
from transformers import get_scheduler
scheduler = get_scheduler(
"polynomial",
optimizer=optimizer,
num_warmup_steps=2000,
num_training_steps=100000,
# Transformers のデフォルトは power=1.0(線形)
)
ウォームアップとの組み合わせ
from torch.optim.lr_scheduler import LinearLR, PolynomialLR, SequentialLR
warmup = LinearLR(
optimizer,
start_factor=1e-7 / 1e-4,
total_iters=10000
)
poly_decay = PolynomialLR(
optimizer,
total_iters=990000, # 総ステップ - ウォームアップ
power=1.0
)
scheduler = SequentialLR(
optimizer,
[warmup, poly_decay],
milestones=[10000]
)
TensorFlow での実装
BERT オリジナル実装は TensorFlow ベースであり、多くのファインチューニングコードが TF の PolynomialDecay を使用:
import tensorflow as tf
scheduler = tf.keras.optimizers.schedules.PolynomialDecay(
initial_learning_rate=1e-4,
decay_steps=100000,
end_learning_rate=0.0,
power=1.0 # 線形減衰
)
optimizer = tf.keras.optimizers.Adam(learning_rate=scheduler)
多項式減衰の選択指針
p=1(線形減衰)を選ぶ場面
- BERT 系モデルのファインチューニング
- 訓練が比較的短い場合(数万ステップ以下)
- シンプルさを優先する場合
p=2(二次減衰)を選ぶ場面
- 長時間の事前学習で中盤の学習率を高く維持したい場合
- T5 / mT5 系モデルの訓練
- コサインアニーリングに近い減衰カーブを多項式で実現したい場合
コサインアニーリングを選ぶ場面
- LLM 事前学習(Llama 3 / GPT-4 クラス)
- 最高精度を目指す場合
- 業界標準に合わせたい場合
FAQ
Q1: 多項式減衰とコサインアニーリングの精度差はどの程度?
GPT-2 124M パラメータモデルでの実験では、コサインアニーリングが線形減衰(p=1)に対して Perplexity で 0.3〜0.5 ポイント優位、二次減衰(p=2)に対して 0.1〜0.2 ポイント優位という報告がある。ただし、モデルサイズやデータセットによって差は変動し、統計的に有意でないケースも多い。
Q2: BERT のファインチューニングではなぜ線形減衰が標準なのか?
BERT のオリジナル実装(Google 公開コード)が線形減衰 + ウォームアップを採用しており、以降のファインチューニング研究がこの設定を踏襲したため。ファインチューニングは訓練ステップ数が少ない(数千〜数万)ため、スケジューラ間の差が事前学習ほど顕著にならない。コサインに変更しても精度は殆ど変わらない。
Q3: power パラメータはどうやってチューニングする?
実務上は p=1(線形)か p=2(二次)のどちらかを選ぶのが一般的。ハイパーパラメータサーチを行う場合は p ∈ {0.5, 1.0, 1.5, 2.0, 3.0} から選択する。経験則として、訓練が長いほど p を大きくすると中盤の学習率が高く維持されて有利。