ResNet(Residual Network)

スキップ結合で「深さの壁」を突破した画像認識モデル

1背景:深くすればするほど性能が落ちた

2015年以前、CNNは「層を深くすれば精度が上がる」と信じられていました。しかし実際には、ある深さを超えると訓練精度すら下がるという問題が発生しました。

層の深さ → 誤差率 → 期待:深いほど良い 現実:途中から悪化 劣化問題
原因:層が深くなると、逆伝播で勾配が何十層もの掛け算を経る間に勾配消失が起きる。入力に近い層に勾配がほとんど届かず、学習が進まなくなる。この問題をResNetのスキップ結合が解決しました。

2スキップ結合の矢印の方向(順伝播 vs 逆伝播)

スキップ結合の矢印は入力側→出力側に向いています。順伝播と逆伝播の両方のフェーズで何が起きているかを分けて理解しましょう。

① 順伝播(Forward):データが流れる方向 x 入力 Conv層1 + BN + ReLU Conv層2 + BN + ReLU 出力 スキップ結合(x をそのまま送る)→→→ 出力 = F(x) + x (層の出力 + 入力そのもの) 矢印は入力 → 出力の方向(前向き) ② 逆伝播(Backward):勾配が戻る方向 出力の誤差 ∂L/∂out Conv層2,1の 勾配の掛け算 ← 掛け算が何十層も重なると消失… ←←← スキップ経路を通って勾配がそのまま届く! 入力側の 勾配 逆伝播では、勾配はスキップ経路を逆向きに流れる 途中の層の掛け算を経ないので、勾配がほぼそのまま入力側に届く → 勾配消失を防止
まとめ:
・スキップ結合の矢印は前向き(入力→出力)。順伝播でxをそのまま出力側に送る経路。
・逆伝播のとき、その同じ経路を逆向きに勾配が流れる。掛け算なしでそのまま届くので勾配消失しない。
・つまり「前向きの経路を作ることで、後ろ向きの勾配の通り道ができる」というのが本質。

3残差学習(Residual Learning)の考え方

通常のネットワークは「入力xから出力H(x)を直接学習する」のに対し、ResNetは「入力xとの差分(残差)F(x)だけを学習する」という発想の転換をしました。

通常:H(x) を直接学習する
ResNet:H(x) = F(x) + x → F(x) = H(x) − x を学習する
F(x) = 残差(入力xからどれだけ変化させるべきか)
通常のネットワーク
「テスト80点を取るために、0から80点分の知識を全部学べ」

→ 一から全部やるのは大変。層が深いほど難しくなる。
ResNet(残差学習)
「今の実力が70点。あと+10点分だけ何を学べばいい?」

→ 差分だけ学べばいいので楽。最悪F(x)=0なら入力をそのまま通すだけ(性能が落ちない)。
核心:もし追加の層が不要なら、F(x)=0と学習すれば出力はxそのまま(恒等写像)。つまり層を追加しても性能が悪化しないことが保証されます。これが「深くしても劣化しない」を可能にした仕組みです。

4基本Residualブロック(ResNet-18/34)

x(入力) 3×3 Conv + BN + ReLU 3×3 Conv + BN + ReLU F(x) + x スキップ結合(x) F(x) (残差を学習) パラメータ数 3×3×C×C ×2

これが最もシンプルな形で、ResNet-18やResNet-34で使われます。3×3の畳み込みが2層の構造です。

5ボトルネック構造(ResNet-50/101/152)

より深いResNet(50層以上)では、計算コストを抑えるためにボトルネック構造を使います。「瓶の首」のようにチャネル数を一度絞ってから戻す構造です。

基本ブロック (ResNet-18/34) 入力 256ch 3×3 Conv, 256ch 3×3 Conv, 256ch パラメータ数 3×3×256×256 × 2 = 1,179,648 (約118万パラメータ) 256ch → 256ch → 256ch チャネル幅が一定 ボトルネックブロック (ResNet-50/101/152) 入力 256ch 1×1 Conv, 64ch ← 絞る! 3×3 Conv, 64ch 少ないchで計算 1×1 Conv, 256ch ← 戻す! パラメータ数 1×1×256×64 + 3×3×64×64 + 1×1×64×256 = 16,384 + 36,864 + 16,384 = 69,632 (約7万パラメータ → 17分の1!
ボトルネックの仕組み:

① 1×1 Conv で絞る:256ch → 64ch に削減。チャネル数を4分の1にする。
② 3×3 Conv で処理:64chという少ないチャネルで畳み込みするので計算が軽い。
③ 1×1 Conv で戻す:64ch → 256ch に拡張。元のチャネル数に復元する。

この「絞る→処理→戻す」の形が瓶の首(ボトルネック)に似ているのが名前の由来です。パラメータは基本ブロックの17分の1になるのに、3層あるため表現力は豊かです。

6画像認識モデルの進化と ResNet の位置づけ

モデル層数ILSVRC順位特徴
2012AlexNet8優勝CNN+ReLU+Dropout。深層学習ブームの火付け役
2014VGGNet16/192位小さいフィルター(3×3)を積み重ねてシンプルに深く
2014GoogLeNet22優勝Inceptionモジュール。複数サイズのフィルターを並列
2015ResNet ★152優勝スキップ結合で152層を実現。人間超えの精度
ResNetは8層→152層へと約20倍の深さを実現し、初めて人間の認識精度(約5%エラー)を超えました。スキップ結合のアイデアはその後のDenseNet、Transformerの残差結合など、現代のほぼ全てのディープラーニングモデルに受け継がれています。

📋 全体まとめ

G検定での出題ポイント

スキップ結合 入力xを層を飛び越えて出力に加算(出力=F(x)+x)。勾配消失を防ぎ、深いネットワークの学習を可能にした
残差学習 目標の出力H(x)を直接学ぶのではなく、入力との差分(残差)F(x)だけを学習する。F(x)=0なら恒等写像で性能が劣化しない
ボトルネック 1×1 Convでチャネルを絞る→3×3で処理→1×1で戻す。パラメータを大幅に削減しつつ深くできる
矢印の向き スキップ結合は順伝播で前向き(入力→出力)。逆伝播ではその経路を逆に勾配が流れる
歴史 2015年ILSVRC優勝。152層で人間超えの認識精度を達成。Microsoftの研究チームが提案