ResNet(残差ネットワーク)とは
Residual Network / 残差ネットワーク
スキップ接続で勾配消失を回避し、非常に深いネットワークの学習を可能にした画像認識アーキテクチャ
ひとことで言うと
層を飛び越える近道(スキップ接続)を設けることで、非常に層数の多いニューラルネットワークでも学習が崩れずに済むようにした画像認識モデル。
概要
ResNet(Residual Network)とは、スキップ接続(shortcut connection)を導入し、非常に深いニューラルネットワークでも安定して学習できるようにした画像認識アーキテクチャを指す。 層を重ねるほど精度が向上するとは限らず、深くしすぎると訓練誤差自体が悪化する劣化問題(degradation problem)が知られていた。ResNetは各層のブロックに入力をそのまま出力へ加算するスキップ接続を導入し、ブロックが学習すべき対象を出力そのものではなく入力との差分(残差)に置き換えることでこの問題を緩和した。 これにより152層に達するような非常に深いネットワークの学習が可能になり、ILSVRC 2015の画像分類・検出・セグメンテーション部門で優勝した。以降、画像認識分野の標準的なバックボーンとして広く使われ、Transformer系アーキテクチャの残差接続の設計にも影響を与えた。
歴史
2015年12月にMicrosoft ResearchのHe Kaimingらが論文「Deep Residual Learning for Image Recognition」で発表し、同年のILSVRC 2015で優勝した。
アーキテクチャ
残差ブロック(residual block)を基本単位とし、各ブロックは入力に畳み込み層群を適用した結果と入力そのものを加算した和を次のブロックへ渡す(出力=畳み込み結果+入力の恒等写像)。この恒等写像によるショートカットにより、ブロックが何も学習しなくても入力をそのまま伝播でき、逆伝播時の勾配が消失しにくくなる。ResNet-18/34では2層の畳み込みからなる基本ブロック、ResNet-50/101/152ではチャネル数を絞ってから戻すボトルネックブロック(1×1・3×3・1×1の畳み込み)を用いる。
ワークフロー
入力画像に7×7畳み込みとプーリングを適用 → 複数の残差ブロックをステージごとに積み重ね、ステージが進むごとにチャネル数を増やし特徴マップの解像度を下げる → 各ブロック内で畳み込み結果を計算し入力と加算 → 最終層でグローバル平均プーリングを行い全結合層でクラス確率を出力する。
コード例
torchvisionでの事前学習済みResNetの利用
import torch
from torchvision.models import resnet50, ResNet50_Weights
model = resnet50(weights=ResNet50_Weights.DEFAULT)
model.eval()
x = torch.randn(1, 3, 224, 224)
logits = model(x)利点
- スキップ接続により勾配消失が緩和され、100層を超える非常に深いネットワークでも学習が安定する
- 恒等写像を初期状態として持つため、層を追加しても性能が劣化しにくい
- 画像分類・物体検出・セグメンテーションなど幅広いタスクのバックボーンとして転用しやすい
欠点
- 層数が多いモデル(ResNet-152等)は依然として計算コストとメモリ消費が大きい
- 大規模データでの精度ではViT系のアーキテクチャに上回られる場合がある
- 畳み込みによる局所的な帰納バイアスを前提とするため、自己注意ベースのモデルと比べ長距離の依存関係を捉えにくい
比較
関連用語
よくある質問
ResNet-50やResNet-152の数字は何を表す?
ネットワークの層数を表す。数字が大きいほど層が深く表現力は高まるが、計算コストとメモリ消費も増える。
参考文献
- Research PaperDeep Residual Learning for Image Recognition (arXiv)