Res-NetでSkip-Connectionを解説!
劣化問題(Degradation)
実はネットワークモデルの層を深くすると、
勾配消失問題に加えて、劣化問題(Degradation)も重要視されています。
CNNでは層を深くして、精度向上を図ってきました。
理由としては、機械学習モデルは層を深くすればするほど、
理論上、良い精度が得られるだろうと考えられていたようです。
しかしある一定の層を越えると精度は向上せず、
単に層を深くするだけでは、かえって訓練誤差が低下します。
訓練誤差とは訓練(教師あり)データの学習精度なので、
過学習とはまた別のお話です。
劣化問題と勾配消失問題を緩和できたのが、以下のRes-Netです。
Res-Net
Res-Netの論文です。
Res-Netのモデル構造には特殊な点が存在します。
手前の層の入力と後ろの層の出力を接続しています。
単なる順伝播型ニューラルネットワークに加えて、
手前の層の入力を恒等変換したブロックを、
後ろの層の出力層の活性化関数の入力口で
足し合わせています。
上記の左側ブロックをBuilding/plainブロック、右側ブロックをBottleNeckブロックと呼びます。
2015年のILSVCR(The ImageNet Large Scale Visual Recognition Challenge)で優勝しました。
どうやら勝因はこのSkip-Connectionにより、
152層も繋ぎ合わせることができた点です。
Res-Netは何が優れてる?
中身で実現されている内容としては、
層が深くなればなるほど、モデルの学習精度は既に良好です。
深い層では入力値を与えても、出力値にほぼ変化はありません。
勾配消失問題で出てきた問題でも、
深い層にすると、入力値と出力値の差は小さくなり、勾配が小さくなるといった話がありました。
こうなると深い層において、入力と出力間で恒等変換をしていることになります。
どうせ恒等変換しているなら、Skip-Connectionを活用してショートカットで与えてあげようとしてるそうです。
勾配消失問題が解決している要因は、
誤差逆伝播を行う際に、Skip-Connectionを経由して、
勾配が直接下層から上層へ伝播していることが要因にあります。
(活性化関数の微分を示す連鎖律を通して、伝播する勾配が限りなく小さくなる事を避ける)
劣化問題が解決している要因は以下の記事を参照ください。
Res-Netの強化版ーDenseNet
ResNetでは手前の層の入力と後ろの層の出力を接続して、
活性化関数手前で手前の層の入力値を直接足し合わせました。
これにより精度が向上しました。
では前後の関係だけでなく、
その他の層全てと接続するともっと高い精度が得られるのでは?と考えられたモデルです。
DenseNetの論文
arxiv.org
わかりやすいサイト
deepsquare.jp