CNNについて
今日書きたいのはConvolutional Neural Networkがどのように学習を進めるか?
CNNの内部ではどのようなことが起きているかです
自分の中でCNNの中でどのように画像データが扱われているのか具体的なイメージが湧かなかったため一つ一つ整理していこうかと
まず元の画像データが5*5*3のデータであるとき
5*5とは縦と横の画素数ピクセル 1ピクセルに数字が存在する 3とはRGBの層 赤、緑、青の三色
Convolutional Neural Networkでは画像の空間状態を保存していく
今までは5*5*3のデータを1*75の数字の羅列にして行列計算を行っていたが
Convolution Layer が一部分ずつ画像を抜き出す
以下CS231nのノートからの引用です
ここにおけるInputVolumeが画像のデータ
5*5*3のデータが(5+1*2)*(5+1*2)*3のデータとなっている、これは元のデータが縮約されすぎないように画像の外枠に0が付け足されていることによる
またここではConvLayerは3*3で、stride=2(どれくらい3*3をずらすか)で設定されている
Convlayerのoutputは(7-3)/2+1の二乗つまり3*3
depthは重みパラメーターの数だけあります
ここでの重みフィルターは
Convlayerによって取り出されて来た画像データ一つ一つに対し行列計算を行い、一つの値を返す
それをまた3*3に配列する
基本的に重みフィルタはあくまで、畳み込み処理によってある特定のものをうまく抽出するものにすぎません。例えば縦のエッジとか横のエッジとか。
つまり重みフィルタが複雑になっていくというよりかは、その畳み込み処理を繰り返すことで複雑な特徴を結果的に捉える