状態:ドラフト(2026-10-13)、一部実測。 4節の実験はノートPCのCPU(Python 3.9、PyTorch 2.8)で直接動かした値です(
code/02_residual.py、約7分)。論文の数値は原文を開き、条件とともに転記しました。 作成ルール:実測データが基本であり、測定できなかったものは「未実測」と表記します。
目次
- 1. 深さのパラドックス
- 2. 残差接続:差分だけを学ばせよ
- 3. バッチ正規化
- 4. 実際にやってみる:単純な積み上げ vs 残差、正規化の有無
- 5. 論文の数値
- 6. 制限事項
- 7. 我々のプロジェクトとのつながり
- 参考文献
1. 深さのパラドックス
パート1のAlexNetは8層でした。層をさらに深くすればより複雑なパターンを学習できるため、性能も向上するはずです。しかし2015年、Heらは逆の現象を報告しました。畳み込みを単純に積み上げたネットワーク(plain)において、ImageNet検証用トップ1エラー(10パッチの平均)は以下のようになりました。
| ネットワーク | 18層 | 34層 |
|---|---|---|
| 単純な積み上げ | 27.94% | 28.54%(より悪い) |
| ResNet(残差接続) | 27.88% | 25.03% |
(論文の表2)重要な点は、34層のplainが 学習エラーさえも 18層より高かったということです。テスト時のみ悪いのであれば過学習(暗記)ですが、学習データに対しても悪いのであれば「最適化ができていない」ことになります。
おかしな話です。34層のネットワークは18層のネットワークを模倣できるはずです。18層目をそのままコピーし、残りの16層を「入力をそのまま出力する層(恒等写像)」にすればよいからです。したがって、深いネットワークは少なくとも浅いネットワークと同等の性能を発揮するはずです。しかし、勾配降下法はその解を見つけられませんでした。複数の層による非線形変換が正確に恒等写像となるように重みを調整することは、想像以上に難しいのです。
2. 残差接続:差分だけを学ばせよ
ResNetの考え方は一言で表せます。ブロックに出力 H(x) 全体を学習させるのではなく、 入力に加える差分 F(x) = H(x) − x のみを学習させます。
그냥 쌓은 블록: y = F(x)
잔차 블록: y = x + F(x) (F = 합성곱 두세 층)
このようにすると、恒等写像が容易になります。 F の重みを0付近にしておくだけで y = x になります。深く積み上げても「不要なブロックは何も行わない」状態から出発できます。ショートカット(skip connection)の計算は足し算が1回だけであるため、パラメータも時間もほとんど増加しません。
勾配の流れ
逆伝播において何が起きているかを確認すると、この設計がなぜ機能するのかがより明確になります。単純に積み上げたネットワークにおいて、前方層の勾配は後方層の微分を かけ合わせることで 得られます。かけ合わせる値が1より少しずつ小さいと勾配が0に消滅し(消失)、少しずつ大きいと爆発します。
残差ブロックをL個積み上げると、同じ著者らによる後続の論文(Identity Mappings, 2016)で示されている通り、以下のようになります。
x_L = x_l + Σ_{i=l..L-1} F(x_i)
∂E/∂x_l = ∂E/∂x_L · ( 1 + ∂/∂x_l Σ F(x_i) )
カッコ内の 1 が核心です。損失の勾配 ∂E/∂x_L がいかなる重みも経由せずに前方層までそのまま伝播します。第2項がミニバッチ全体で正確に−1になる可能性は低いため、重みがどれほど小さくても勾配が消失しないと論文では説明されています。掛け算の連鎖が足し算の連鎖に置き換わったのです。
この論文では、足し算の後に活性化関数を置かない「事前活性化」の順序(正規化 → ReLU → 畳み込み)を採用してショートカットを完全にクリーンに保ち、CIFAR-10において 1001層 のネットワークを学習させて4.62%のエラーを達成しました(ミニバッチ64、5回の中央値。ミニバッチ128の場合は4.92%)。同深度の元の順序のResNetは7.61%でした。
3. バッチ正規化
ResNetのブロックには、畳み込みごとに バッチ正規化(Batch Normalization, BN)が付随します。ミニバッチ内でチャネルごとに平均を引き、標準偏差で割った後、学習される2つのパラメータ(γ、β)によって再びスケールとシフトを行います。
x̂ = (x − 배치평균) / √(배치분산 + ε)
y = γ · x̂ + β
推論時はバッチ統計量の代わりに、学習中に収集した移動平均を使用します。
元の論文による説明(2015)。 Ioffe・Szegedyは、学習中に前方の層の重みが変化すると、後方の層が受ける入力の分布が常に変化し(「内部共変量シフト」)、そのため学習率を小さくせざるを得ないと考察しました。正規化によって分布を固定すれば、大きな学習率を使用できるというわけです。その効果は絶大でした。同等の精度(検証72.2%)に到達するまでに、Inceptionは3,100万ステップかかったのに対し、BNを導入したバージョンは210万ステップでした(論文の「14倍少ないステップ」)。BNネットワーク6個のアンサンブルは、ImageNet検証用トップ5エラー4.9%、テスト4.82%でした。
後の研究による説明(2018)。 Santurkarらは、BNの効果は分布の安定化とはほとんど関係がないと反論しました。BN層の背後に意図的に時間経過に伴って変化するノイズを加えて分布を揺らしても性能はほとんど変わらず、BNが内部共変量シフトを軽減していない可能性を示す測定結果も提示しました。代わりに、BNは 損失地形を滑らかにし (損失と勾配のリプシッツ性を改善)、勾配がより信頼性の高い方向を指し示すようにすることを理論と実験によって示しました。
「なぜ機能するのか」についての説明が後に覆った好例です。実務上の結論は変わりません。BNは大きな学習率と深いネットワークの学習を容易にしてくれます。ただし、以下の実験のように BN単体では深さの問題は解決されません。
4. 実際にやってみる:単純な積み上げ vs 残差、正規化の有無
畳み込みの代わりに幅32の全結合層を用いたおもちゃの実験(トイ・プロブレム)です。2次元の点を2つの渦に分類するタスク(512個の点)をSGD+モーメンタムで500ステップ学習させました。ネットワークごとに学習率0.01・0.03・0.1の中から最適なものを選び(単一の学習率に固定すると、どのネットワークに有利な値を選んだかによって結論が左右されてしまうため)、3つのシードの中央値を使用しています。残差ブロックは、2番目の層の重みを0から開始して最初は恒等写像になるようにしました。
| ネットワーク | 深さ | 開始時の第1層の勾配 | 最終損失 | 学習精度 |
|---|---|---|---|---|
| 単純な積み上げ | 4 | 3.1×10⁻² | 0.000 | 1.000 |
| 単純な積み上げ | 16 | 1.2×10⁻² | 0.028 | 0.996 |
| 単純な積み上げ | 64 | 9.5×10⁻³ | 0.692 | 0.520 |
| 残差 | 4 | 3.2×10⁻² | 0.000 | 1.000 |
| 残差 | 16 | 4.1×10⁻² | 0.577 | 0.855 |
| 残差 | 64 | 3.5×10⁻² | 0.692 | 0.520 |
| 単純な積み上げ + BN | 4 | 3.4×10⁻¹ | 0.000 | 1.000 |
| 単純な積み上げ + BN | 16 | 1.4 | 0.000 | 1.000 |
| 単純な積み上げ + BN | 64 | 1.1×10⁴ | 0.489 | 0.588 |
| 残差 + BN | 4 | 3.2×10⁻² | 0.000 | 1.000 |
| 残差 + BN | 16 | 4.1×10⁻² | 0.000 | 1.000 |
| 残差 + BN | 64 | 3.5×10⁻² | 0.000 | 1.000 |
(実測 2026-10-13、ノートPCのCPU。精度0.5はコイントスレベル。損失0.692 ≈ ln 2 は「何も学習できていない」状態。)
読み方です。
- 単純に積み上げた64層は学習されませんでした。 この実験ではHeの初期化のおかげで勾配が極端に小さくはならなかったものの(第1層の勾配は4層の約1/3)、それでも損失は下がっていきませんでした。「勾配消失」だけでは説明がつかない最適化の困難さ、すなわち第1節のパラドックスです。
- BNを付与しても、単純な積み上げによる64層は失敗し、第1層の勾配が1万倍に爆発しました。 深いplainネットワークにおいてBNがかえって勾配を拡大させるという現象は、その後の理論研究が指摘している現象と同じ方向性を持っています(本記事では当該研究の個別の確認は行っていません)。
- 残差 + BNは4・16・64層のすべてで精度1.000 であり、開始時の勾配も深さに関わらず同等でした。ショートカットが勾配の大きさを深さから切り離したのです。
- 正規化のない残差は16層から不安定になりました。 学習曲線を観察すると、損失が下降した後に突然跳ね上がり、0.69付近で止まることがありました(シード0、学習率0.03)。ショートカットによって加算される値が層ごとに蓄積され、活性化値が大きくなってしまうためだと考えられます。実際のResNetがBNとともに使用される理由を示す結果です。
トイ・プロブレムであるため、実際のImageNetの規模に一般化することはできません。ただし、「深さ + ショートカット + 正規化」の役割分担は論文と同様の傾向を示しています。
5. 論文の数値
| 項目 | 値(論文) | 条件 |
|---|---|---|
| ILSVRC 2015分類1位 | トップ5エラー 3.57% | ImageNetテストサーバー、深さの異なる6つのモデルのアンサンブル |
| ResNet-152単体モデル | トップ5 4.49% | 検証セット |
| 計算量 | ResNet-152 113億 FLOPs、VGG-19 196億 | 積和算基準 |
| CIFAR-10 | 110層 6.43%(5回中の最高、平均6.61)、1202層 7.93% | 1202層は学習エラー0.1%未満 — 過学習 |
| COCO検出 | mAP@[.5,.95] 21.2 → 27.2(相対28%) | Faster R-CNNのバックボーンをVGG-16 → ResNet-101、COCO検証セット |
152層のほうがVGG-19(19層)よりも計算量が少ないのは、 ボトルネックブロック のおかげです。1×1畳み込みでチャネル数を削減し、3×3で計算を行った後、1×1で再び拡張します。コストの高い3×3はチャネル数が少ない状態で動作します。ResNet-50/101/152はこのブロックを使用しています。
最後の行は、本記事の範囲を超えた重要性を持ちます。分類用に学習したバックボーンを検出器に組み込むだけで、検出性能が大幅に向上しました。以降、ほとんどの検出・セグメンテーションモデル(パート5・6・8)がResNet系のバックボーンを起点としています。
6. 制限事項
- 深さだけで無限に性能が向上するわけではない。 CIFAR-10の1202層は110層よりも性能が低下しました。学習は行われたものの(学習エラー0.1%未満)、小規模なデータに対してネットワークが大きすぎました。
- BNはバッチに依存する。 バッチの平均・分散を使用するため、バッチサイズが小さいと統計量が不安定になります。高解像度の画像を使用してGPU1枚あたり数枚しか処理できない検出・セグメンテーションにおいて問題となり、そのためGroup NormalizationやLayer Normalizationといった代替手法が用いられます。パート7のTransformerはLayer Normalizationを使用しています。
- 推論と学習で動作が異なる。 学習時はバッチ統計量、推論時は移動平均を使用します。モードの切り替えを忘れると、同じ画像に対して異なる結果が出力されます(実務でよくあるミスです)。
7. 我々のプロジェクトとのつながり
- ショートカットは今や至る所に存在します。TT Scoreのボール検出におけるHRNet系のバックボーンも残差ブロックを積み上げて構成されており、パート9〜11のSAMが使用するTransformerブロックも「x + Attention(x)」、「x + MLP(x)」という形式の残差接続です。
- 小規模なモデルにとっても意味があります。第4節の実験のように、ショートカットは深さに関わらず学習を安定させるため、パラメータ数が150万個程度のボール検出モデルであっても層を十分に積み重ねることができます。
次の記事は、解像度を維持する構造であるU-NetとHRNetについてです。ボールのような小さな物体の位置をピクセル単位で特定しなければならない際、パート1のプーリングがなぜ問題になるのか、そしてどのようにそれを回避するのかを見ていきます。
TTの一言。 深層ネットに「全部描き直して」ではなく「直すところだけ教えて」と言ったら、64層も学習できました。足し算1つのパワーです。
参考文献
- He, K., Zhang, X., Ren, S., Sun, J. (2016). Deep Residual Learning for Image Recognition. CVPR 2016. https://arxiv.org/abs/1512.03385
- He, K., Zhang, X., Ren, S., Sun, J. (2016). Identity Mappings in Deep Residual Networks. ECCV 2016. https://arxiv.org/abs/1603.05027
- Ioffe, S., Szegedy, C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. ICML 2015. https://arxiv.org/abs/1502.03167
- Santurkar, S., Tsipras, D., Ilyas, A., Madry, A. (2018). How Does Batch Normalization Help Optimization? NeurIPS 2018. https://arxiv.org/abs/1805.11604
- サンプルコードと出力: このフォルダーの
code/02_residual.py,code/02_residual.out.txt