0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Resnetの論文実装、効果検証プロジェクト - 勾配消失とスキップ接続の実証実験

Last updated at Posted at 2025-08-22

ResNet効果検証プロジェクト - 勾配消失とスキップ接続の実証実験

はじめに

深層学習の発展において、ResNet(Residual Network) は非常に革命的な存在でした。
本記事では、Resnetの論文 (参考文献 Deep Residual Learning for Image Recognition:http://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html )を参考にResNet論文当時の技術水準に合わせて比較実験を行い、勾配消失問題の再現と、それをスキップ接続で解決するResNetの効果を実証しました。

このプロジェクトは ResNet論文の要点整理記事 をベースに、Github上でプロジェクト(https://github.com/masararutaru/Resnet) を作り、前回同様主にCursorとChatGPTを用いました。

本記事は、以前書いた PyTorch基礎記事 の続編として位置づけています。
また、論文の読み方は 落合陽一式の論文まとめフォーマット に従い、別途「ResNet論文まとめ記事」を作成しました。


実験概要

比較対象モデル

  1. SimpleCNN_CIFAR10

    • 浅い3層CNN
    • ベースラインモデル
  2. DeepCNN_CIFAR10

    • 深い10層CNN
    • ResNetなし
    • 勾配消失問題の再現用
  3. ResNet_CIFAR10

    • 深い10層CNN
    • スキップ接続あり
    • 勾配消失を回避し学習を成立させる

技術レベルをResNet論文当時に統一

  • BatchNorm除去
  • 学習率スケジューリング無効
  • Weight Decay = 0

実験環境

ハードウェア環境

  • GPU: なし(CPU環境)
  • PyTorch: 2.8.0+cpu
  • CUDA: 利用不可
  • 実行環境: Windows 10 (Git Bash)

学習条件

  • エポック数: 20
  • バッチサイズ: 128
  • 学習率: 0.001
  • オプティマイザ: SGD (momentum=0.9, weight_decay=0.0)
  • 損失関数: CrossEntropyLoss
  • 学習率スケジューラー: 無効(step_size=0)
  • シード値: 42(再現性確保)

データローダー設定

  • num_workers: 2
  • pin_memory: True(CPU環境のため実質効果なし)

データセット(CIFAR-10)

  • クラス数: 10クラス
  • 画像サイズ: 32×32ピクセル
  • チャンネル数: 3(RGB)
  • 訓練データ: 50,000枚
  • テストデータ: 10,000枚

前処理

  • 訓練時:

    • RandomCrop(32, padding=4)
    • RandomHorizontalFlip()
    • ToTensor()
    • Normalize(mean=[0.4914, 0.4822, 0.4465], std=[0.2470, 0.2435, 0.2616])
  • テスト時:

    • ToTensor()
    • Normalize(mean=[0.4914, 0.4822, 0.4465], std=[0.2470, 0.2435, 0.2616])

実装

モデル概要

# SimpleCNN_CIFAR10 (3層)
Conv(332)  ReLU  Pool  Conv(3264)  ReLU  Pool  Conv(64128)  ReLU  FC

# DeepCNN_CIFAR10 (10層、BatchNormなし)
Conv(364)  ReLU  Conv×4(6464)  ReLU  Pool  Conv×3(64128)  ReLU  Pool  Conv×2(128256)  ReLU  FC

# ResNet_CIFAR10 (10層、スキップ接続あり)
Conv(364)  ResBlock×2(6464)  ResBlock×2(64128)  ResBlock×2(128256)  FC

DeepCNNの学習失敗パターン

  • 損失が 2.3026(log(10)) に張り付き
  • 精度が 10%固定(ランダム予測レベル)
  • 20エポックを通じて全く改善なし

勾配消失の分析

初期化直後の予測

Softmax出力: [0.1076, 0.0987, 0.0978, ...]
予測クラス: すべてクラス0

学習後の予測

Softmax出力: [0.1046, 0.0992, 0.0986, ...]
予測クラス: すべてクラス0

初期化直後と学習後がほぼ同じ
重みが更新されず、勾配消失が起きている


技術的考察

勾配消失の原因

  • 深い層での予測値の標準偏差の減少
    • conv1: std ≈ 0.11
    • conv10: std ≈ 0.012
  • ReLUの特性
    • 負の値が0になるため、勾配が途中で消える
  • 初期化の限界
    • Kaiming初期化でも深いネットでは不十分

ResNetの解決策

  • スキップ接続で勾配を直接伝播
    • 勾配が消えにくくなる
  • 恒等写像の学習
    • 恒等マッピングを学習可能
    • 深い層でも安定した学習が可能

まとめ

今回の実験で以下を実証しました:

  1. 勾配消失問題の再現
    • DeepCNNで10%精度に停滞
  2. スキップ接続の効果
    • ResNetで83.98%精度を達成
  3. 技術的革新の証明
    • 浅いCNN(70.75%)を超える性能を示した

おわりに

  • 本記事では、ResNetの効果を数値で実証しました。
  • ResNetは「勾配消失を避けるためのスキップ接続」というシンプルなアイデアで、深層学習を根本から変えた技術であることを再確認しました。

このプロジェクトは落合陽一式の論文まとめフォーマットに従ってまとめた
ResNet論文の要点整理記事 をベースにしています。


参考文献


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?