1. ResNet (Residual Neural Networks)とは [概要]
ResNet (Residual Neural Networks)とは,残差接続を活用した残差ブロックを直列に多数つなげて,残差の系列をモデル化することにより,高精度の深いCNNを学習できるようになったCNNバックボーンの定番モデルである [He et al., 2016a].
この記事では,ResNetの紹介を主に行う.発展版でありResNet同様にCNNバックボーンとして使われることとなったResNextについても少し触れる.
※ Pythonで学ぶ画像認識 (機械学習実践シリーズ)の5.2節の「ResNet18を実装してみよう」を同時に読んで頂くと,実装への理解も深まりやすいのでオススメしておく.
ResNetと残差ブロックは,Transformerにも応用されるなど,ディープラーニングの歴史において,最も重要な技術の1つである.よく理解できるまで,この記事や元論文・他の解説記事などをしっかり復習していくことをおすすめしておく.
また,同じ著者らグループは,残差ブロックをInceptionブロック的にワイド化して性能強化した ResNeXt [Xie et al., 2017] も提案した.ResNet と ResNextは,画像認識・動画認識において,広く活用されることになった.
1.1 記事の構成
2節以降では,以下の構成で ResNet(2節)について詳細に紹介する.また,ResNetの著者らによる改善版である ResNeXt (3節)についても概要だけ紹介する:
- 2. ResNet
- 2.1 CNNを深くできなかった2つの課題:劣化問題と学習時間増大
- 2.2 ResNetの提案:「残差ブロック」を多層化する「残差学習」
- 2.3 ResNetの残差学習モデルの,カスケード学習・アンサンブル学習的な理解
- 2.4 本番向け:ボトルネック化された残差ブロック
- 3. ResNeXt : ResNetの改善版
- 3.1 ResNetの残差ブロック:残差経路側の複数経路化
1.2 ResNet 登場当時の背景
当時state-of-the-artなCNNであったVGGNetやInceptionNetなどでは,それら以上の「20層程度以上」もっと深くしたCNNを学習してみても,期待した通りの認識性能より悪い性能しか出せないという「劣化(degradation) 問題」が発生していた (2.1節).本来は,層数を深くするだけ表現力が向上して性能向上が期待できるはずだが,勾配消失問題などで,それ以上のレベルの深さでは,奥の序盤層まで勾配が行き渡っていなかったので,その問題を解決する必要があった.
そこで,ResNetでは,残差ブロックの導入による残差学習(residual learning)による,より深いCNNの学習方法を提案した.この仕組みにより,かなりの深い畳み込み層の数(50層~150層)でも,大規模画像データセットから,物体認識CNNを,劣化問題無しに高精度なモデルとして学習できるようになった(1.2節で概要を述べる).
しかも,分散して各残差に微分が逆伝搬で配られるので,(残差接続なしの場合よりも)学習も高速になり収束性もよくなったので,大規模な50層以上の更に深いモデルでも,スキップ無しのネットワークのように勾配消失・爆発で学習に苦戦することがなくなった
※ ただし,スキップ接続が無いネットワークでも,ResNetと同時期に登場したバッチ正規化を各中間層に配置すると,おなじく収束性向上の役割を果たしてくれる時代にはなっていく.
1.3 ResNetの全体像: 残差ブロックの直列繰り返し
ResNet (図1)は,残差接続(=スキップ接続)と加算演算子(+)の2つで構成された残差ブロック(Residual Block)を基本構成ブロックとする.そして,残差ブロックを直列に多数接続しただけの,シンプル設計の画像認識向けディープニューラルネットワークである.
この残差接続の連続をうまく活用した残差学習(residual learning)が,ResNet論文では提案されたともいえる.残差学習のおかげで,ResNetでは,残差ブロックの各残差層へ微分を分配し,(奥の方の)序盤層へも誤差を逆伝搬できる.これにより,勾配消失・勾配爆発を防いで,序盤の層まで奥の損失をうまく行き渡らせることができる設計となった.
毎回の残差ブロック(2.2節)では,以下の2通りのパスの伝搬経路がある (2.2節で詳しく):
- 残差関数側パス.
- 残差接続側パス.
残差ブロック$n$個が,ResNet全体を構成するが,学習時の逆伝搬時には,この2分岐が$n$回存在することから,合計$2^n$個の伝搬経路が存在する.よって,逆伝搬時にスキップ接続側ばかり通る経路だと,奥の方の序盤の層の残差関数$F_i$ へも,大きな微分値を個別に,かつ分散的に伝播しやすくなる.
この残差学習の「分散的で,アンサンブル学習的な」トリックのおかげで,深いResNetでも,各残差ブロックがうまく学習されやすくなり,劣化問題なしに収束性もよい学習ができるようになった (詳しくは2.2節).
ISLVRC 2014年の1位のInceptionNetと,2位のVGGNetは,それぞれImageNetの誤差率6%と7%台であったのが,ResNetは3%台まで向上した.これは,深さによるモデルの表現力向上と,劣化問題回避の実現によるものである.以降,ResNet・ResNeXt は,様々な画像認識CNNの応用におけるバックボーンの設計として広く用いられることとなる.
2. ResNet の詳細
2.1 CNNを20層以上に深くできなかった2問題
ディープラーニングでは,層を増やしてネットワークを深くすればパラメータ数が増えるので,複雑な予測モデルを学習させることができ精度も向上する「はず」である.しかし,あまりに深いネットワークを作ると,学習時に勾配消失・爆発問題が起こりやすくなる.当時バッチ正規化が登場したことで,深めの画像認識CNNの学習でも,勾配消失・爆発は防ぎやすくなって来ていた.
しかし,画像認識CNNを更に深くして高精度にするには,まだ以下の2点の課題があった:
- 劣化問題:
- 学習時間の増大:
- VGGNetやInceptionNetより大幅に深い「畳み込み層が合計50層以上のCNN」を学習できるようにしたいが,更に巨大なモデルになるゆえ,パラメータも多く最適化にかかる時間も長くなってしまう.
- よって,ある程度の短い時間で学習が済んで収束し,局所解にも陥らない仕掛けを用意する必要があった.
これら2つの課題を克服する目的で,[He et al., 2016] の著者らはResNetの「残差ブロック」のアイデアを提案する.
2.2 残差の連続で表現 (ResNet の 主提案)
2.1節の動機のもと (1) 「残差接続」と「畳み込み層 + ReLU + 畳み込み層 」の2経路をブロックとしてまとめた残差ブロック(Residual Block)が提案された(図2-a).
ResNetは,この残差ブロックを基本部品として,畳み込み層の総数が50~150層の構成にまで直列に深くしたCNNを構成する.そのシンプルな拡張だけで,残差接続を積極活用した残差学習(residual learning)が可能となる.残差学習を行うことで,ResNetは,初期表現・勾配を,遠くの奥の層までの(スキップ接続の連続による)長期伝搬することを可能にした.これにより,小パーツ群の問題に分解でき,学習収束性も高めた.
以上より,2.1節の2つの課題を克服し,「劣化問題なしの高精度なモデルの学習」と「最適化の簡易化・収束性向上」を同時に達成したのResNetである.
ResNetは,スキップ接続でつないで数層ごとにブロック化するという,極めて簡単な手段だけで実現したところに,提案のすごみがある.シンプルすぎるがゆえ,応用性も高い.よって,その後,残差ブロックを応用したネットワークも多数提案されていくことにもなった.たとえば,近年で特に重要なモデルである Transformer も,残差接続・残差ブロックのおかげで,大規模モデル化できているなど,ディープラーニング全体におけるResNetの功績は,非常に大きい.
この2.2節では,残差ブロックの詳細(2.2.1節)とその効果(2.2.2節)について述べたい.
2.2.1 残差ブロックの詳細
AlexNetやVGGNetのような,残差接続が無い「プレーンな直列CNN (図2-b)」では,畳み込み層やReLuを,直列にとにかくつなげただけの,直線的でシンプルなネットワーク構造であった.InceptionNetのように分岐・並列化はないわけである.
それに対して,残差ブロック(図2-a)では,各畳み込み層のまとまり(2~3層ごと)に対して,並列にスキップ接続(skip connection)(図2-a 青色側)も挿入する.このResNet方式の,残差ブロック構成スキップ接続のことを,とりわけ残差接続(residual connection)と呼ぶ.
- スキップ接続側(図2-a 青色領域側):入力表現$\bm{x}$を,元の表現のまま(= 恒等写像, Identity Mapping),別ブランチに分岐させる.
- 残差写像側(図2-b 赤色側):畳み込み層などを配置した経路側では,残差写像$F(\bm{x})$であるブロック化されてた数層(2~3層でまとめる)を用いて,表現を変化させる.
そして,残差ブロックの最後では,2ブランチを以下のように足し算で合成する:
\[
H(\bm{x}) = F(\bm{x}) + \bm{x} \tag{2.1}
\]
要するに「スキップ接続 + 加算」のサブ経路を利用して,数層をグループ化したものを残差ブロックと呼ぶわけである.
この式(2.1)の残差ブロックが,直列にN$だけ連結することで,ResNet全体を構成する.つまり,式(2.1)をN回直列に連結で繰り返した結果が,ResNet全体の構造である (図1).
2.2.2 残差ブロック の「多層化」の効果
これにより,2分岐のどちらかを選んだ多様な経路を信号・誤差が伝搬するモデルになった.よって,ResNetの学習時は,ネットワーク全体の関数を全体最適化するのではなく,全体の誤差が少し小さな残差 $F(\bm{x})= H(\bm{x}) – \bm{x}$ の経路へ少しずつ逆伝播していくことができる.従って,各残差関数の(小さめのサイズの)最適化へと分割された アンサンブル学習的な学習になる.
こうしてResNetは,出力の損失全体を,多数のパスに分割して,個々のパスから受け取った小さな誤差から $F(\bm{x})$ を少しずつ最適化できる.プレーンなCNN (図2-b)で,全体を一気に最適化するのと比べて,ResNet・残差ブロックを用いると,最適化の収束性が向上する.従って,[3 × 3] カーネルの畳み込み層50層以上から構成された深いモデルでも,初めて劣化(degration)無しに,正しく学習できるようになった.
ちなみに残差接続(スキップ接続)側のブランチは,必ずしも恒等写像ではなくても良く,何らかの層$g$ を挿入して$g(\bm{x})$ と少し表現を変化させても良い気がする.しかし,著者らによるその後の論文 [He et al., 2016b] では,実験を通じて,恒等写像のまま残差接続することがResNetとしては重要であることも示した.
以後,何の層も挿入しない恒等写像のスキップ接続を採用した式(2.1)の残差ブロック(図2-a)を用いることが,ResNet や ResNext(3節)では標準的である.
PreActivation 残差ブロックの提案
また,この「恒等写像実験の研究 [He et al., 2016b]」では,残差ブロック内において,畳み込み層より先にReLUを用いる「バッチ正規化–ReLU–畳み込み層」という PreActivation (=先に活性化を配置)の順番の残差ブロックのほうがが,性能を向上させ,学習効率も良くすることを発見した.
この「PreActivation構成の残差ブロック」は,その後,DenseNetでも使用されることになる.そして,この研究 [He et al., 2016b]では,PreActivationを用いることで学習効率化が進んだので,ResNet-1001層という,超巨大な深いResNetの実験も行われた.
2.3 カスケード/アンサンブル学習的な解釈によるResNet構造の理解
ディープラーニングから機械学習では用いられてきた,カスケード型モデルやBoosting・のような「モデル全体の大関数を,直列につないだ小関数$N$個の加算合成関数とみなす(アンサンブル学習むけ)加算的(additive)モデル」に,ResNetが類似していると観察・分析してみることで,ResNetの残差学習モデルの仕組みや挙動を理解しやすくなる面があると議論されてきた [He et al., 2016b], [Veit et al,. 2016].
残差ブロック(図2-a)の内部には,以下2通りの経路がある:
- 恒等写像側の経路をたどる
- 残差 $F$ 側の経路をたどる
よって,N回の残差ブロックが連結しているResNetの場合,全経路数は$2^N$になる.例えば,3個の残差ブロックが連結している場合,微分値が伝播する経路の合計数は合計$2^3$個しか存在しない.しかし,50層や100層もあるResNetの場合では,伝播する経路数が膨大となる.
そこで,ResNetは全体が「多数のミニネットワーク(= 残差関数 $F_i$ )」の合成として構成された「アンサンブル学習モデル」であると捉えてみよう [Veit et al,. 2016].すると,個々の $F_i$ への誤差の伝播量は少なくなることが理解でき,最適化は残差ブロック無しよりも楽に(速く)収束することがわかる.
2.4 残差ブロック のボトルネック化 (本番向け)
ImageNet データセットから,より深いResNetモデルを実際に学習する際には,畳み込み層の総数が50層,101層,152層の3種のResNetが,標準的な設計として用意される [He et al., 2016].その予備実験でまず用いられた ResNet-34層では「[3 × 3] 畳み込み層を2層連結した残差ブロック」が使用された(図3-左).
それに対し,実践で用いるResNetの50層,101層,152層では,ボトルネック型の「[1 × 1], [3 × 3], [1 × 1] 」の畳み込み層3つを用いた,残差ブロックが採用されている(図3-右).
元の図3-左側(ResNet34層向け)の畳み込み層2つから構成される残差接続は,図3-右側 (ResNet50層/101層/152層向け)のボトルネック型の残差経路と,似たような複雑性・計算時間を持っている.
一方,図3 右側は,畳み込みカーネルのサイズを「[1 x 1] -> [3 x 3] -> [1 x 1] (一旦 1 x 1畳み込みで次元削減して計算負荷減少)」と変えながら,チャンネル数については「高次元(256) -> 低次元(64) – >高次元(256)」と変化するボトルネック型を形成している.これにより,InceptionNet のように,ボトルネック型の採用による「精度を保持しながら計算効率化もできる」という恩恵をResNetも得ることができる.
このResNet-50層/101層/152層は,ResNet-34層よりもかなり精度が高く,しかも層数を増やすごとにどんどん精度が良くなるという,ディープラーニングの導入で期待する「深くするほど精度が良い」という振る舞いを,50層以上に層数が多い設計でも初めて達成できた.
3. ResNext : 残差ブロックのワイド化による改善版
ResNext [Xie et al., 2017] は,ResNetの著者グループ自らによるResNetの改善版である.残差ブロックのボトルネックの等価表現として,32グループに分割したグループ化畳み込み [Krizhevsky et al,. 2012] を代わりに使用することで,深さを増やさずに,ワイド化(複数経路化)によりResNetからの精度向上を達成した.つまりは,全体の深さや全体の幅を増やさずに,ブロック単位でグループ分割数を増やすだけで,計算効率性をモデル精度を向上したResNetの発展版である.
当時流行していた「CNNのワイド化」の1提案であるが,それらと異なるのは,「ブロック内で32経路にワイド化した上,それらをグループ化畳み込みに等価変換し,1経路にまとめた」という点である.
4. ResNet のまとめ
この記事では,ResNet の基本について紹介した.ResNet は,残差ブロックを直列接続し「残差接続を用いた残差関数の合成構造」を採用したことにより,50~150層の畳み込み層から構成される「かなり深い物体認識CNN」を,ImageNetから高精度に学習できるようになった.そして,ResNetの物体認識精度は旧来の最先端のCNNバックボーンと比べて大幅に向上したので,それ以後は ResNet がCNNバックボーンのファーストチョイスの1つとなった.
また,ResNet の改善版であるResNeXtについても紹介した.これは Inceptionブロックの「分岐-変換-結合」のアイデアにならって,「残差パス内のワイド化 => そのグループ化畳み込みへの変形」を,残差ブロック内に追加した.ReNetに対して,たったこれだけの変更を加えただけであるが,更に高い物体認識精度を達成することに成功し,その後ResNextも幅広く画像認識・映像認識系の各タスクで活用されることとなる.
4.1 ResNetの良いところと,その後への功績.
複数層をスキップ接続(※ 合成は加算演算子)を追加してブロック化することで「残差をモデル化する」とうだけで,深いネットワークを劣化問題無しで構成できるようになるという,ありえないくらいシンプルな拡張機構の提案である.
この時期(2015年ごろ)は,Highway Networkや U-Netなどの「スキップ接続」路線は,よく研究されはじめていた.ただ,その中でもResNetは,複雑な分岐をおこなわずに,VGGNet 的な直列構造をそのまま保てるのが良い点である.複数回の分岐で木構造化することはなく,2分岐の連続で直線構造は保たれる点が,「ResNetの設計の容易さ・拡張性の高さ」の視点で優れている.つまり,複雑なローカルネットワーク構造は学習の収束性の悪さも生むことがあるが,ブロック構造の直列接続のシンプル設計を保てるので,残差接続の提案はビッグアイデアであった (※ 例えばNLP業界では,RNN言語モデルの時代(2014~2017ごろ)に,LSTMの「セル内の構造の複雑さ」に起因する,学習速度の遅さに苦しんだ).
その後の残差接続の代表的な応用をあげておきたい.例えば,系列対系列変換向けのTransformerでは,残差接続による多層化可能性が貢献する.また,その後のCNNバックボーンでも,DenseNetや,Stacked Hourglass Networks (人物姿勢推定むけ)の登場にもつながる.
関連書籍
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022.
- 5.6.2 代表的なCNNデザイン (p96)
- Probabilistic Machine Learning: An Introduction, Kevin Patrick Murphy , MIT Press, 2022.
- 14.3.4 ResNet
References
- [Diba et al., 2018] Ali Diba, Mohsen Fayyaz, Vivek Sharma, M Mahdi Arzani, Rahman Yousefzadeh, Juergen Gall, and Luc Van Gool. Spatio-temporal channel correlation networks for action classification. In ECCV, 2018.
- [Hara et al., 2018] Kensho Hara, Hirokatsu Kataoka, and Yutaka Satoh. Can spatiotemporal 3d cnns retrace the history of 2d cnns and imagenet? In CVPR, 2018.
- [He et al., 2016a] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016
- [He et al., 2016b] K. He, X. Zhang, S. Ren, and J. Sun. Identity mappings in deep residual networks. In ECCV, 2016
- [He et al., 2017] K. He, G. Gkioxari, P. Doll ́ar, R. B. Girshick, Mask r-cnn, In ICCV, 2017.
- [Krizhevsky et al,. 2012] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In NIPS, 2012.
- [Szegedy et al., 2015] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabi- novich. Going deeper with convolutions. In CVPR, 2015.
- [Szegedy et al., 2016] C. Szegedy, V. Vanhoucke, S. Ioffe, J. Shlens, and Z.Wojna. Rethinking the inception architecture for computer vision. In CVPR, 2016.
- [Veit et al,. 2016] Veit, Andreas, Michael J. Wilber, and Serge Belongie. “Residual networks behave like ensembles of relatively shallow networks.” In NIPS, 2016.
- [Xie et al., 2017] Xie,S., Girshick, R., Dollar,P. , Tu,Z., He,K. Aggregated residual transformations for deep neural networks. In CVPR, 2017.
参照外部リンク
- Residual Neural Network – wikipedia
- “Learning Deep Features for Visual Recognition” CVPR 2017 Tutorial
- https://towardsdatascience.com/resnet-with-identity-mapping-over-1000-layers-reached-image-classification-bb50a42af03e
- https://www.geeksforgeeks.org/grouped-convolution/
- https://www.youtube.com/watch?v=lugkZaFj4x8