ホームへ戻る

GitHub Repo

Transformersコミュニティ、BatchNormのモメンタムの意味の不一致を報告 一部の視覚モデルの微調整が最終バッチの影響を受けやすい

Transformersコミュニティは11月8日、一部の視覚モデルがKerasの慣例に基づくBatchNormのモメンタムをそのままPyTorchに渡し、移動統計量が最新バッチに過度に偏ると報告した。報告には再現コードと微調整実験が添えられているが、修正方法はまだ議論中で、影響範囲の検証も必要だ。

Marcus Qwertyus · Public domain · Image source
zh-Hant

Transformersへの新たな問題報告によると、EfficientNet、ALIGN、MobileNetV1、MobileNetV2のBatchNorm設定には、フレームワーク間で意味が食い違っている可能性がある。本来は「過去の統計量をどれだけ保持するか」を表すモメンタム値が、「新しいバッチ統計量をどれだけ採用するか」を表す値としてPyTorchに渡されている。報告は11月8日に提出され、確認時点ではオープンのままで、採用済みの修正案はない。問題報告

要点は、同じ名前のパラメーターでも更新の方向が異なることだ。Kerasでは「旧値×m+バッチ値×(1−m)」を使う。一方、PyTorchでは「旧値×(1−m)+バッチ値×m」を使う。そのため、Kerasでの0.99は緩やかな更新を意味するが、PyTorchでは最新バッチが99%を占める。両者の公式ドキュメントでこの違いを確認できる。Kerasドキュメント、PyTorchドキュメント

この違いは、訓練と評価の接続部分に影響する。BatchNormは訓練時には現在のバッチ統計量を使い、既定では評価時に累積した平均と分散を使う。累積値がほぼ最後のバッチだけを反映している場合、サイズが小さい、あるいは分布が偏った最終バッチによって評価出力が変わる可能性がある。問題が訓練損失の異常として表れるとは限らない理由もここにある。PyTorchドキュメント

報告者はCIFAR-10で短時間の微調整を行い、最終バッチのサイズが32枚から3枚に減ると、テストした2つのモデルで精度が大きく低下することを観察した。ただし、モメンタムを1−mに変更しても、すべての短時間設定で精度が上がったわけではない。過去の統計量の更新が遅くなれば、事前学習済みモデルが新しいデータに適応する速度にも影響する。これらは報告者による実験結果であり、すべてのチェックポイントに当てはまるとは限らない。実験と再現コード

エンジニアはまず、実際のBatchNormモメンタム、最終バッチのサイズ、評価時に移動統計量を使っているかを確認できる。今後は、メンテナーが設定の互換性をどう定義するかを確認するとともに、データセットや訓練時間を変えた検証を求めるべきだ。現時点で、この報告を公開済みの修正として扱うことはできない。

出典

  1. Transformers Issue #50473:BatchNorm momentum 語義錯配回報
  2. PyTorch 2.15 BatchNorm2d 官方文件
  3. Keras BatchNormalization 官方文件