けの〜のブログ

ガッキーでディープラーニングして教育界に革命を起こす

CNNについて ②

前回の記事で畳み込み、Convolutionがどのように行われるか書きました。

 

ある画像がInputとして与えられて、その一部分を見て、重みフィルターをかけて特徴を取り出す。

ここまではいい。

ここまでは理解できるんだが、、、

 

二層目以降の畳み込みの操作がわからない

一層目の操作はこうだ 可視化して見ると

ConvNetJS CIFAR-10 demo

f:id:keno-lasalle-kagoshima:20171105170902p:plain

f:id:keno-lasalle-kagoshima:20171105170929p:plain

ある画像が与えられた時に、重みフィルターがここでは16個設定されており(フィルターのサイズは5×5×3)、16枚のフィルターによって抽出された画像が出力される。

ここまではわかる

問題は二層目以降である

f:id:keno-lasalle-kagoshima:20171105171517p:plain

先ほどのConvolution層で32×32の16枚の画像が途中でPoolingが施され16×16の画素数となった16枚の画像が Convolutionされる際に
重みフィルターがここでは5×5×16が20個設定されている

なぜ16なんだ、、、

16枚の画像それぞれに独自のフィルターが16個設定され、それらが画像全体から特徴を取り出してその合計が出力される

f:id:keno-lasalle-kagoshima:20171104211907p:plain

 

この例で説明するとXに16枚の画像が並び、フィルターW0に5×5が16個縦に並んでいるのである。それがw0~w19まで並ぶ

この計算だと画像Xi(i=0~15)にフィルターw0i(Xiに対応する5×5のフィルター それぞれのXiに対し1つ)で計算した値のが出力される

その和が16×16で出力され、それが20個できる

 

ここで疑問なのが

なぜ重みフィルターが5×5が16個も作られるか

一つの重みフィルターが16枚の画像から特徴を抽出してくるのではダメなのか

 

また、16枚の画像に対して赤青緑でまた分けて5×5×3の重みフィルターを重ねるのではダメなのか、、、

 

ここをどうにかして理解したい

 

畳み込み層の重みはフィルタそのものなので最適化の対象となるパラメータはフィルタということになる。