Res-NetでSkip-Connectionを解説!

勾配消失問題

前回、勾配消失問題についてあっさり解説しました!

melheaven.hatenadiary.jp

とりあえずCNNを活用する場合、
層が深くなりがちなので、誤差逆伝播法により、
誤差関数の勾配が0に近くなり、学習が進まねえ...!

劣化問題(Degradation)

実はネットワークモデルの層を深くすると、
勾配消失問題に加えて、劣化問題(Degradation)も重要視されています。

CNNでは層を深くして、精度向上を図ってきました。
理由としては、機械学習モデルは層を深くすればするほど、
理論上、良い精度が得られるだろうと考えられていたようです。
しかしある一定の層を越えると精度は向上せず、
単に層を深くするだけでは、かえって訓練誤差が低下します。

訓練誤差とは訓練(教師あり)データの学習精度なので、
過学習とはまた別のお話です。

qiita.com

劣化問題と勾配消失問題を緩和できたのが、以下のRes-Netです。

Res-Net

Res-Netの論文です。

arxiv.org

Res-Netのモデル構造には特殊な点が存在します。
手前の層の入力と後ろの層の出力を接続しています。

単なる順伝播型ニューラルネットワークに加えて、
手前の層の入力を恒等変換したブロックを、
後ろの層の出力層の活性化関数の入力口
足し合わせています。

f:id:electric-city:20200923140712p:plain
Res-NetにおけるSkip-Connection

上記の左側ブロックをBuilding/plainブロック、右側ブロックをBottleNeckブロックと呼びます。

2015年のILSVCR(The ImageNet Large Scale Visual Recognition Challenge)で優勝しました。
どうやら勝因はこのSkip-Connectionにより、
152層も繋ぎ合わせることができた点です。

Res-Netは何が優れてる?

中身で実現されている内容としては、
層が深くなればなるほど、モデルの学習精度は既に良好です。
深い層では入力値を与えても、出力値にほぼ変化はありません。

勾配消失問題で出てきた問題でも、
深い層にすると、入力値と出力値の差は小さくなり、勾配が小さくなるといった話がありました。
こうなると深い層において、入力と出力間で恒等変換をしていることになります。

どうせ恒等変換しているなら、Skip-Connectionを活用してショートカットで与えてあげようとしてるそうです。

勾配消失問題が解決している要因は、
誤差逆伝播を行う際に、Skip-Connectionを経由して、
勾配が直接下層から上層へ伝播していることが要因にあります。
(活性化関数の微分を示す連鎖律を通して、伝播する勾配が限りなく小さくなる事を避ける)

qiita.com


劣化問題が解決している要因は以下の記事を参照ください。

qiita.com

Res-Netの強化版ーDenseNet

ResNetでは手前の層の入力と後ろの層の出力を接続して、
活性化関数手前で手前の層の入力値を直接足し合わせました。

これにより精度が向上しました。

では前後の関係だけでなく、
その他の層全てと接続するともっと高い精度が得られるのでは?と考えられたモデルです。

DenseNetの論文
arxiv.org

わかりやすいサイト
deepsquare.jp