⚙️ ResNet50実装記録 Vol.6:OptimizerをAdamWに変更し、収束性を検証
はじめに
こんにちは、DL(ディープラーニング)を勉強している大学1年生です。
2025年の4月からプログラミングを本格的に勉強し始め、GCI(東大松尾研が提供するデータサイエンス入門講座)を修了し、現在DL基礎講座を受講しています。
今回は、DL基礎講座の最終課題に向けた学習のアウトプットとして、ResNet50を用いた画像分類に挑戦します。
この記事は、自分自身のポートフォリオとして ResNet50の実装と、その精度改善施策 を行うプロセスを記録し、共有することを目的としています。
※この記事は実装と改善のプロセスに焦点を当てており、ResNetの理論的な詳細には深く立ち入りません。理論的背景については、適切な参考文献をご参照ください。
前回の記事(Vol.5)では、CIFAR-10の画像サイズに合わせ、ResNetの初期層(Stem)を改造することで構造的なボトルネックの解消を図りました。今回は、学習の収束速度と安定性を向上させるため、Optimizerを変更する施策を実施します。
🎯 今回の施策:OptimizerをAdamWに変更
1. AdamW選定の背景と優位性
ベースラインではSGDを使用していましたが、今回はAdam系のOptimizerを試します。特に、L2正規化(Weight Decay)とAdamの併用時に生じる問題を回避するため、AdamWを採用しました。
| 項目 | 変更前 | 変更後 | 目的 |
|---|---|---|---|
| Optimizer | SGD (Momentum 0.9) | AdamW | 収束速度の向上と適切な正則化の適用 |
| Weight Decay | 適用 | 適用 | 過学習抑制 |
AdamWのメリット(Weight Decayの分離)
標準のAdam Optimizerは、L2正規化と同時に使用すると、L2正規化の効果がパラメータごとに不均一になり、正則化が正しく機能しないという問題があります。
AdamW は、Weight Decay(L2正規化)を勾配更新から分離(Decoupled)して適用することで、この問題を解決します。これにより、Adamの高い収束速度を保ちながら、Weight Decayによる適切な汎化性能の向上が期待できます。
また、SGDよりも収束が早いことが知られている一方、ADAMとSGDを比べるとSGDのほうが最終的な値は良いと書く文献もあります
引用元: The Marginal Value of Adaptive Gradient Methods in Machine Learning (Wilson et al., 2017)。
2. 実装コードの変更箇所
PyTorchのOptimizer定義部分を以下のように変更しました。
# 変更前 (SGD)
# optimizer = optim.SGD(model.parameters(),
# lr=config.learning_rate,
# momentum=config.momentum,
# weight_decay=config.weight_decay)
# 変更後 (AdamWの導入)
# AdamWは内部にMomentum(ベータ値)を持つため、momentum引数は不要
optimizer = optim.AdamW(model.parameters(),
lr=config.learning_rate,
weight_decay=config.weight_decay)
📊 実験結果:Optimizerの比較(Epoch 50時点)
Vol.5で構造を最適化したモデル(CIFAR-10向けStem)を使用し、50エポック学習した結果を、AdamW と SGD with Momentum で比較しました。
| 指標 | AdamW | SGD with Momentum | 評価 |
|---|---|---|---|
| Validation Loss | 0.2089 | 0.1999 | ⬇️ SGDが優位 (Lossが低い) |
| Validation Accuracy | 0.9367 | 0.9348 | ⬆️ AdamWがわずかに優位 |
| F1 Score | 0.9366 | 0.9347 | ⬆️ AdamWがわずかに優位 |
| Precision | 0.9366 | 0.9348 | ⬆️ AdamWがわずかに優位 |
| Recall | 0.9367 | 0.9348 | ⬆️ AdamWがわずかに優位 |
考察:理論と実践の乖離
この結果は、Optimizerの特性に関する理論的な仮説と実践結果が絡み合う興味深いものでした。
-
SGDがLossで優位な点:
- SGDがAdamWよりLossが低い(0.1999 vs 0.2089)という結果は、SGDが**広くなだらかな損失曲面(平坦なミニマ)に到達し、ロバストな解を見つけたという理論(Wilson et al., 2017)**を支持します。これはモデルの汎化ロバスト性を示唆します。
-
AdamWがAccuracyで優位な点:
- 一方、分類タスクの最終的な目標指標である Validation Accuracy および F1 Score では、AdamWがわずかに(約0.2ポイント)上回る結果となりました。
結論と今後の戦略
- Optimizerの決定: 最終的な評価指標(Accuracy, F1 Score)を最優先する課題の要件に基づき、現時点ではわずかに優位なAdamWをメインのOptimizerとして採用します。
- SGDの可能性: SGDのLossの低さは、学習率スケジュールのさらなる調整(Warmupやエポック数の増加)によって、AdamWの精度を超える可能性を残しています。最終的なモデルの**アンサンブル(統合)**を検討する際、このSGDモデルがロバスト性を高める役割を果たすことが期待できます。
📝 次回以降の改善施策(ロードマップ)
OptimizerがAdamWに決定したため、残りの施策は以下の通りとなります。
- Test Time Augmentation (TTA): 最終精度の底上げを図るため、推論フェーズにTTAを導入します。
おわりに
今回も読んでくださり、ありがとうござます!