【図解解説】ResNetとはなにか？わかりやすく解説

この記事では、

ResNetは、Kaiming He氏によって2015年に考案された、前年のモデルと比較して6倍の層数を持つ、深層学習のための革新的なニューラルネットワークモデルです。このモデルは、深層ニューラルネットワークが直面する勾配消失問題に対処するために、残差接続（Residual Connection）を導入しました。今話題のTransformerにも採用されていた技法の一つで、Transformerを理解するための要素でもあるので、図を用いながら簡単に紹介したいと思います。

**自己紹介**

こんにちは！かっつーです テクノロジーと人間との共進化し、なめらかな社会を目指していして、様々なテクノロジーについての勉強や政治、経済、社会や身体についてなどを勉強しています。 このブログでは自分の活動についてや勉強した内容についてアウトプットしていきたいと思います。 このカテゴリーではAIの技術的な概念についてやその具体的な内容などについてわかりやすく解説していきたいと思います。

**この記事の読者ターゲット**

- Residual Networkについて簡単に理解したい方
- 深層学習とニューラルネットワークに興味がある研究者やエンジニア。
- 勾配消失問題に直面している深層ニューラルネットワークの訓練に関わる技術者。
- 画像認識やその他の複雑なタスクで、高い性能を実現したいAI開発者。
- 最新の深層学習技術の動向に関心を持つ学生や教育関係者。

この記事を読むのにかかる時間は「**6分**」です。

### Residual Networkとは何か？

- ResNetは、Microsoft Research(現Facebook AI Research)のKaiming He氏が2015年に考案したニューラルネットワークのモデルである。
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392670/aabbc757-a633-a1b3-63ad-fda8af615fbd.png)
    ![resnet_top.jpg](https://prod-files-secure.s3.us-west-2.amazonaws.com/ce840545-a387-4041-b0a5-714ba383fc8d/946786f1-3b11-4c40-8325-a7492aca0403/resnet_top.jpg)
    

https://deepage.net/deep_learning/2016/11/30/resnet.htmlから引用しました。

当時としては驚異的な層数を誇り、前年度の6倍の層数をもとに作られたニューラルネットワークモデルだった。

当時どれくらいすごかったのかを調べると、2014年のILSVRCの優勝モデルであるGoogleNetは22層でした。しかし、翌年の**ResidualNetは152層と6倍の層数を誇るモデル**になった。

CNNにおいて層を深くすることは、より高度で複雑で詳細な特徴を抽出することができるため、層の多さは非常に重要である。

### モデルの多層化の限界

一般的にCNNのモデルは多層になればなるほど性能が向上するとかが得られていました。

実際に2012年～2014年にかけて少しずつ層が深く多くなっていますよね。

しかし、実際にはそこまで単純なものではありませんでした。

多層化を行うと表現力は上がりそうですが、その一方で**勾配消失問題**に直面します。

※勾配消失問題とは、ニューラルネットワークの層が深くなることで、学習時に誤差が逆伝搬されないことで、勾配がほとんど0に近づいてしまう現象です。具体的にはこちらの記事をご参照ください。

勾配消失問題が発生すると、ニューラルネットワークの学習が進まなくなるので、画像認識の性能が上がらなくなってしまいます。

つまり**、モデルの多層化と勾配消失問題のジレンマを抱えていた**のです。多層したいけど出来ないという壁があったわけですね。

そこで現れたのがResidual Neteworkです。

### ResNetの発想法

- ResidualNetの前にも層を深くする挑戦はあったものの、思い通りに学習が進まないという経緯があった。単純に層を深くすると性能が悪化することが報告されていたから。

ResNetはどのようにモデルの多層化と勾配消失問題のジレンマを解消したのかというと、

Residual Connection （Skip Connection後に違いについて説明します。）という手法を用いて解決しました。

- ある層で求める最適な出力を学習するのではなく、層の入力を参照した残差関数を学習することで最適化する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392670/7de347f4-34b0-5d7f-555e-986e35e4e344.png)


簡単言うと、入力の値をそのまま出力に加算するということです。

通常のCNNでは出力はF(x)になるところを、スキップ接続によって入力した値x（学習する画像などのこと）が出力にも加算されるため、F(x)＋xになるということです。

### Residual Connectionの残差とは何を表しているのか？

残差接続の残差とは何を表しているのかというと、推定したモデルによって説明できずに残った差のことです。統計学では、回帰直線と各観測データとの垂直方向のズレが残差です。

イメージ図は下記です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392670/5d0ab46c-eee1-752d-aba6-7002c2cd39ec.png)

このモデルの場合の残差は、

$$
F(x)=H(x)-x
$$

となる。今回のモデルに当てはめて解釈すると、予測するモデルのH(x)から観測データ（今回の場合画像データなど）とのズレ（残差）を表している。

この右辺のxを左側に移すと、

$$
H(x) = F(x)+x
$$

となる。

残差接続の「残差」は、基本的には「目標出力から入力を引いたもの」、つまり層（または層のシーケンス）が学習すべき残りの変化量を指します。具体的には、ある層の入力xに対して、その層の目標出力がH(x)であるとき、理想的にはこの層はH(x)−x（残差）を学習することになります。

しかし、残差接続では、この層の実際の出力をF(x)+xとし、ここでF(x)は学習すべき残差、つまり変化量を表します。最終的にネットワークはF(x)を通じてH(x)−xを近似しようとします。

これにより、ネットワークは入力xに対して直接加算されるべき残差F(x)を学習することになり、学習プロセスが効率化され、深いネットワークでも効果的に訓練できるようになります。

### Residual ConnectionとSkip Connectionの違いは？

基本的には同じ機能を指して使われますが、スキップ接続には、残差接続以外にも様々な形式があります。

例えば、直接的に層をスキップするだけでなく、異なる操作を伴う場合もあります。

スキップ接続の主な目的は、深いネットワーク内での情報の流れを改善し、勾配消失や勾配爆発の問題を緩和することです。

残差接続はこの目的を達成するための特定の手法を提供しますが、他にも情報を異なる層間で伝達する方法が考えられます。

つまり、モデルによってはSkipのさせかたが異なるので、ケースバイケースで文脈によって異なることがあるということだけ頭に入れておけばよいのではないでしょうか。

### ▢なぜ勾配消失問題が解消できるのか？

つぎに、なぜスキップ接続が勾配消失問題を解消できるのかを数式を用いて説明します。

機械学習ではよく微分がでてきますが、特に重要な性質は連鎖律です。

上記の式の場合の連鎖率はこのような式で表せます。

①

$$
\frac {∂L}{∂x}＝\frac {∂L}{∂H}×\frac {∂H}{∂x}
$$

Lは損失関数を表します。そして、スキップ接続で伝搬される誤差は∂L/∂xです。

また、このResiodualNetworkのところまで伝わってきた誤差は、∂L/∂Hです。

ここで、下記の式を上記の式　∂H/∂x＝の形に当てはめると、

②

$$
H(x) = F(x)+x
$$

$$
\frac {∂H}{∂x}＝\frac {∂(F(x)+x)}{∂x}
$$

となる。

次に、③

$$
\frac {∂(F(x)+x)}{∂x}=\frac {∂F}{∂x}+1
$$

この③の式を最初の①の式に代入すると、

$$
\frac {∂L}{∂x}=\frac {∂L}{∂H}×(\frac {∂F}{∂x}+1)=\frac{∂L}{∂H}\frac{∂F}{∂x}+\frac{∂L}{∂H}
$$

最も右の第2項をみると、ResiodualNetworkのところまで伝わってきた誤差は、∂L/∂Hなので、その誤差がなくなることなく、またたされていることが分かります。

つまり、誤差が減ることなくそのまま伝わっていることが分かります。

勾配消失問題は、誤差がたくさんの層を逆伝搬していく間に、ゼロに近づいてしまうことが問題でした。それがまた、ゼロにならずにたされるとなるとそのまま誤差を伝えることができるので、勾配消失問題を回避することに繋がります。

**まとめ**

ResNetは深層ニューラルネットワークの訓練を改善するために開発されました。このモデルは、従来のCNNの問題点であった勾配消失問題を、残差接続を用いて効果的に解決します。ResNetは、層の入力をそのまま出力に加えることで、深いネットワークでも学習が進むように設計されています。このアプローチにより、152層にも及ぶ非常に深いネットワークの訓練が可能になり、画像認識などの分野で顕著な性能向上が達成されました。

- ResNetは、勾配消失問題に対する解決策として残差接続を導入したニューラルネットワークモデルです。
- 残差接続により、層の入力を出力に直接加算し、深いネットワークでの学習効率を向上させます。
- ResNetは、従来のモデルと比較して非常に深いネットワークの訓練を可能にし、画像認識の精度を大幅に向上させました。
- 勾配消失問題の回避により、深いネットワークが学習可能になり、深層学習の応用範囲が広がりました。