ResNetは知ってるけど、DenseNetってなに?って思って調べたら面白かった。
どっちも勾配消失させない為の構造だが、どんな違いがあるのだろうか。
DenseNetの仕組み
 これが普通のConvolution Network
Residualではskipした結果を足し合わせる(sum)。残差を学習する事で勾配消失を避けられ、深い層でも学習が進むようになった。
しかし、足し合わせたら元の情報を保ってないので情報の伝達を邪魔しているのではないかと考えた。
そこで、Dense Blockではそのまま前の結果を結合(concatenate)する事にした。Dense Blockを用いる事で前の情報をそのまま加味することが出来る。
層毎にKの層が増えていくとすると
で表せられる。
K0->入力層の数
K ->畳み込みの出力層の数(Grouth Rate)
l ->l番目のlayer
上記でも説明したように、出力をk channelになるように畳み込む
さらに 1x1 convolutionを行い次元数を削減してから 3x3 convolutionを行うことで計算量が軽くなる。
利点
computational efficiency
 ResNetの場合 C chanel のinputに C chanel のoutputで O(CxC)となる DenseNetの場合 lxk chanel のinputに k chanel のoutputでO(lxkxk)となる kはcよりかなり小さくて良いので、DenseNetより計算量が少なくなる。特徴量の複雑さ
層を重ねる毎に特徴量は複雑になる。最終的に一番最後の複雑な特徴量を使う
前の層を結合することで、すべてのレベルの複雑な特徴量を加味出来る