スキップ接続でさらに深層モデルを実現!【ResNet】


**原論文**
- Deep Residual Learning for Image Recognition
https://arxiv.org/abs/1512.03385


**日本語解説**
- 機械学習論文読み：Deep Residual Learning for Image Recognition
https://qiita.com/ikeyasu/items/ea9ced2b8e0fcb3da2be

- ResNetの論文を読んだ
https://www.kumilog.net/entry/resnet-paper

- 【深層学習】 CNN 紹介 "ResNet" 言わずとしれた CNN の標準技術が登場！【ディープラーニングの世界 vol. 17】
https://www.youtube.com/watch?v=WslQrSO94qE





# 結論
CNNの構造に通常の認識結果と1つ前の認識結果を足し合わせることによって，急激な特徴表現の変化を抑制と恒等写像のような効果で過学習しない深層モデルの構築に成功した．

# 概要
画像認識分野において，より深い層を持つと，より複雑な関数を表現可能で表現力の高い深層学習モデルが構築できる．しかし，モデルの層を深くなると過学習（train lossが低下しているにも関わらず，test lossが低下しない（trainデータにしか適応できていないモデルが誕生））してしまう問題があった．
さらに，従来のCNNモデルでは，層が深い（56層）のモデルは層の浅い（20層）モデルよりtrain,test含めて精度が低下している問題がある．

![スクリーンショット 2023-05-28 5.05.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/776b51e4-6a84-6d45-8ca6-9b76d52acfa3.png)


本来，深い層（56層）のモデルが後半36層で恒等写像（入力の値をそのまま出力）をしていたら，20層のモデルより性能が劣ることはない．しかし，深い層（56層）の性能が劣る理由としてこの恒等写像がうまくできない現状にある．
ResNetではこの恒等写像を実現しようとするためにスキップ接続を導入し，深層モデルを実現した．
ResNetが登場する2015年までは20層程度 (VGGが16層，GoogleNetが22層) のモデルに対してResNetは152 層でも効率的な学習を可能としたモデルである．
これにより，画像分類，物体検出，セグメンテーションタスクにおいて従来手法を上回る精度を達成した．


![スクリーンショット 2023-05-28 5.16.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/c357fde2-dfd0-d6c0-10ba-87cf8af7882d.png)






# モデル構造
ResNetのモデル構造として，ステージ4の階層型モデルを採用する．ステージが進むにつれて特徴マップの空間サイズが半分になる．ステージ間の特徴マップのダウンサンプリングはステージ初めの処理にストライド2の畳み込み処理を行う．
図の$3 \times 3,64$は$3 \times 3$畳み込み，64はチャンネル数を示す．また$\times 3$などはそのブロックの処理を3回繰り返す．
ステージの繰り返し回数はステージ3を多くの回数の処理を行う．このステージ3の処理を他のステージより多く試行する構造は他の階層型モデルと同じ傾向にある（ResNetの傾向を真似ている）．
入力画像のダウンサンプリングで最初に行う$7 \times 7$畳み込み層の後にMax pooling，3層からなるBottleneck構造の後にAverage poolingが使用される．




![スクリーンショット 2023-05-28 5.23.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/b1bb0727-1981-bd7b-d535-701ab175b9fb.png)




![スクリーンショット 2023-05-28 5.25.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/6a7e3546-8210-5eec-dcec-6c7294d64144.png)




## スキップ接続
スキップ接続は認識を行った値と認識を行う前の値を足し合わせることで，認識前の特徴表現に似た値が出力となる．これにより，急激な特徴表現の変化を抑制し，緩やかに値を変化されるここと，恒等写像のような効果を期待する．
スキップ接続の間の処理の全てを$F(x)$で表すと式は以下のようになる．

~~~math
y=F(x)+x
~~~

また，Rectified Linear Unit (ReLU) とは活性化関数の一種であり，入力値が正の値の場合に入力値をそのまま出力値とし，負の場合に$0$を出力値とする線形関数である．

**ReLUの式**
~~~math
f(x)=\mathrm{max}(x,0)
~~~


![スクリーンショット 2023-05-28 4.45.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/13f66b3c-dbd3-a1ef-01fc-6953f617662f.png)



## Bottleneck構造
ResNet50（50層）以上のモデルには1ブロックに3層の畳み込みが使用するBottleneck構造が採用される．Bottleneck構造にすることで計算量を削減する．
上図の右には入力が256次元（256チャンネル）であり，$1\times1$畳み込み（チャンネル方向の圧縮）で64チャンネルまで圧縮する．圧縮された特徴マップを用いて本命の認識である$3\times3$畳み込みを行い．$1\times1$畳み込みでチャンネル数を入力のチャンネル数に戻す（スキップ接続で足し合わせるため）．




# 実験
従来のCNNモデル（左）ResNet（右）を比較する．従来のCNNモデルでは深い層（34層）が浅い層（18層）と比較して精度が低下している．反対に，ResNetでは深い層（34層）がエラー率が低下して精度向上していることがわかる．



![スクリーンショット 2023-05-28 5.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/9cabb1bc-b21e-e0c6-295a-ed9c3920c837.png)


# 考察
今回のResNetはブロック内の処理を飛ばすようなスキップ接続でしたが，ブロックの垣根を越えたより複雑なあみだくじのようなモデルだとどうなるのかな？アーキテクチャ探索（NAS）で導いた結果でスキップ接続が多すぎてもダメみたい．


# まとめ
今回は，ResNet スキップ接続を用いた深層モデルについて解説した．スキップ接続の考え方は様々（ほぼ全て）な深層学習モデルに採用されている．それだけ表現の急激な変化の抑制と，恒等関数みたいな役割は重要ってことが分かった．