勾配クリッピング

モデルが実際にどう学習するか — 普通の勾配降下法からAdamまで

勾配クリッピングは、更新がどれだけ大きくなれるかに上限を設ける。あるバッチが巨大な勾配を生んだ場合、オプティマイザーのステップの前に、クリッピングがそれを縮小する。

クリッピングは目的関数もデータも直しはしない。ひとつの安全規則だと考えるといい。1つの極端なバッチのせいで、パラメータが損失曲面のあちこちに放り投げられるのを許してはならない、というルールだ。

エレベーターの速度調整器がちょうどよい例えだ。エレベーターは普段どおり動けるが、速度が出すぎると、危険になる前に調整器がそれを制限する。勾配クリッピングも、普通の勾配はそのまま通し、危険なスパイクだけを抑える。下の図はまさにクリップされる対象を示している。ボウルの中で点をドラッグすると、曲面が急になるにつれて勾配の矢印が伸びていくのが分かる。クリッピングはその矢印の向きを保ったまま、長さだけをcで頭打ちにする。

機械学習における位置づけ勾配クリッピングは、シンプルな安定化ツールだ。AdamW、ウォームアップ、混合精度としばしば組み合わされる。これらのレシピは、放っておくとまれではあるが破壊的な勾配スパイクに見舞われることがあるからだ。
▶ 勾配クリッピング
← オプティマイザーの診断Adam と AdamW →