【要約】KerasのEMAで精度+3pt改善。でもfinalize_variable_values()は実は無意味だった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がKerasでEMAを導入する際、設定ミスや仕様の誤解により、モデルの性能を損なう問題がある。具体的には以下の課題が挙げられる。
- ・ema_momentumの値が大きすぎると、学習初期のランダムな重みが残留し、精度が悪化する。
- ・ドキュメントにあるfinalize_variable_values()の呼び出しが、特定の条件下で不要となる。
- ・適切な有効ウィンドウを設定しないと、EMAの恩恵を受けられない。
// Approach
検証者はCIFAR-10を用い、EMAの有無とパラメータの違いが精度に与える影響を調査した。以下の手順で検証が行われた。
- ・Conv2Dを用いたベースラインモデルを構築し、EMAなしの精度を測定した。
- ・use_ema=Trueを設定し、ema_momentumを0.999と0.9999の2パターンで比較した。
- ・model.fit()実行後のmodel.get_weights()の挙動を調査した。
// Result
実験を通じて、EMAのパラメータ設定が精度に劇的な影響を与えることが実証された。検証の結果は以下の通りである。
- ・ema_momentum=0.999では、精度が65.78%から68.84%へ3.06pt向上した。
- ・ema_momentum=0.9999では、精度が63.47%へ2.31pt低下した。
- ・fit()使用時は、手動での変数確定処理が不要であることが確認された。
Senior Engineer Insight
> EMAは精度向上に寄与するが、パラメータの感度が極めて高い。特にema_momentumは、学習ステップ数と密接に関係する。実戦投入時は、有効ウィンドウが適切かを確認すべきだ。Kerasの仕様を理解し、不要なコードを排除することが、保守性の高い実装につながる。