Gradient Clipping(グラディエントクリッピング)
LLM訓練中に勾配の大きさが閾値を超えた場合にスケーリングまたは切り捨てを行う安定化手法。勾配爆発を防止し、訓練の安定性を確保する事実上必須のテクニック。
Gradient Clipping(勾配クリッピング)とは
Gradient Clippingは、ニューラルネットワークの訓練において勾配(gradient)の大きさを制限する手法です。LLMの訓練では、特定のバッチやトークン列で勾配が異常に大きくなる「勾配爆発(gradient explosion)」が発生することがあり、これを放置するとモデルの重みが破壊され、loss spikeや訓練崩壊を引き起こします。Gradient Clippingはこの問題を予防する事実上必須の安定化テクニックです。
2つのクリッピング方式
Gradient Norm Clipping(ノルムクリッピング)
全パラメータの勾配ベクトルのL2ノルム(ユークリッドノルム)を計算し、閾値を超えた場合に勾配全体を比例的にスケールダウンします。
if ||g|| > max_norm:
g = g × (max_norm / ||g||)
勾配の方向は保持されたまま大きさのみが制限されるため、最適化の方向性を損なわずに安定性を確保できます。LLM訓練ではこちらが標準です。
Gradient Value Clipping(値クリッピング)
各パラメータの勾配値を個別に[-threshold, +threshold]の範囲にクランプします。勾配の方向が変化する可能性があるため、LLM訓練ではNorm Clippingが好まれます。
主要LLMでのクリッピング設定
| モデル | クリッピング方式 | max_norm | 備考 |
|---|---|---|---|
| GPT-3 | Norm Clipping | 1.0 | 全サイズ共通 |
| LLaMA / LLaMA 2 | Norm Clipping | 1.0 | Meta標準 |
| PaLM | Norm Clipping | 1.0 | Google標準 |
| Chinchilla | Norm Clipping | 1.0 | DeepMind |
| BLOOM | Norm Clipping | 1.0 | BigScience |
| Falcon | Norm Clipping | 1.0 | TII |
ほぼ全ての大規模LLMでmax_norm=1.0が採用されており、事実上の業界標準値です。
クリッピングが発動するタイミング
通常の訓練では勾配ノルムは0.1-0.5程度で推移し、クリッピングが発動するのは全ステップの1-5%程度です。以下の状況で頻繁に発動します。
- 訓練初期: Warmup前の不安定な重み更新
- ノイズの多いバッチ: 極端に長い/短いシーケンスを含むバッチ
- データ品質問題: 破損データや異常なトークン列
- 学習率が高すぎる場合: スケジュール設定の問題
勾配ノルムのモニタリング
訓練中の勾配ノルムを記録することで、訓練の健全性を監視できます。
| 勾配ノルムの状態 | 解釈 | 対処 |
|---|---|---|
| 0.01-0.5で安定 | 正常 | 不要 |
| 1.0付近で頻繁にクリップ | やや高い | 学習率を下げることを検討 |
| 10以上のスパイクが頻発 | 不安定 | データ品質・学習率を確認 |
| NaN/Inf発生 | 訓練崩壊 | チェックポイントからやり直し |
PyTorchでの実装
PyTorchではtorch.nn.utils.clip_grad_norm_が標準実装です。
# オプティマイザのstep前に呼ぶ
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()
HuggingFace TransformersのTrainerではデフォルトでmax_grad_norm=1.0が設定されており、明示的なコード追加は不要です。
FAQ
Q1: max_normの値を変えるべき状況はありますか?
ほとんどの場合1.0で問題ありません。非常に深いネットワークや特殊なアーキテクチャでは0.5に下げることがあります。Fine-tuningでは1.0のままか、より保守的に0.3-0.5にすることもあります。
Q2: Gradient ClippingとGradient Scalingの違いは何ですか?
Gradient Clippingは勾配の大きさを制限する安定化手法です。Gradient Scalingは混合精度訓練(AMP)で使われ、FP16のアンダーフロー防止のためにlossを一時的にスケールアップする手法です。両者は目的が異なりますが併用されます。
Q3: Gradient Clippingなしで訓練するとどうなりますか?
小規模モデルでは問題ない場合もありますが、大規模LLMでは訓練崩壊のリスクが大幅に増加します。特に長いシーケンスや多様なデータを扱う事前学習では、クリッピングなしは実質的に不可能です。