【要約】勾配クリッピング(Gradient Clipping)で学習は安定する?Keras×CIFAR-10で実験 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
筆者が、Adamオプティマイザを使用する際に勾配クリッピングが必要かという疑問を検証した。Adamは学習率を適応的に調整するため、勾配爆発に対して一定の耐性があると一般に考えられている。しかし、実務においてクリッピングが精度にどう寄与するかは不明確であった。
- ・Adam使用時に勾配クリッピングが不要という仮説の検証。
- ・クリッピング手法の違いによる精度への影響の把握。
// Approach
筆者は、KerasとCIFAR-10を用いて、3つの異なる設定で学習実験を実施した。実験では、勾配の制限方法を変えて精度と学習時間を比較している。
- ・なし:Adamのデフォルト設定。
- ・clipnorm=1.0:勾配ベクトルのL2ノルムを制限し、方向を保持する手法。
- ・clipvalue=0.5:各要素を [-0.5, 0.5] の範囲に制限する手法。
// Result
実験の結果、勾配クリッピングを適用した手法がいずれもデフォルト設定を上回る精度を記録した。精度向上は最大で0.6%程度であったが、学習時間への影響は極めて軽微であった。
- ・clipnorm=1.0:val_accuracy 0.6774を記録し、検証精度で最高値となった。
- ・clipvalue=0.5:test_accuracy 0.6695を記録し、テスト精度で最高値となった。
- ・なし:val_accuracy 0.6637、学習時間 125.6秒を記録した。
Senior Engineer Insight
> 実戦投入の観点では、Adam使用時でも勾配クリッピングの導入は合理的である。精度向上幅は僅かだが、計算コストの増加がほぼ皆無だからだ。学習の安定化を優先する現場では、デフォルトのままにせず、clipnorm等の適用を検討すべきである。ただし、本実験の差は誤差範囲とも言えるため、過信は禁物だ。