畳み込み層について その2

前回の続き

前回をまとめると

  • 画像は基本3次元の形状で、形状には大切な空間的情報が含まれている。
  • 入力の形状を意識したニューラルネットワークの構築には、「畳み込み層」と「プーリング層」を用いる。
  • 畳み込み層で行われる畳み込み演算の処理に使われるフィルターが重みパラメータに相当する。

次はプーリング層。プーリングは縦・横方向の空間を小さくする演算。
f:id:Owatank:20170707153411p:plain
プーリングには最大値を取るMaxプーリング、平均値を取るAveプーリングがある。
上の画像ではMaxプーリングを行なっている。地味に色んなサイト見てもMaxプーリングしか見たことがない。。。。。
またこの場合 プーリングのウィンドウサイズは 2x2 であり、2x2 の領域に対して最大値となる要素を入力の値から取り出している。またストライド値は 2 である。一般的にはプーリングのウィンドウサイズとストライドの値は同じ値に設定するらしい。

プーリング層の特徴として

  • 学習するパラメータを持たない(フィルターなどを持たない。最大値を取る処理などを行うだけ)
  • チャンネル数は変化しない(入力と出力のチャンネル数は変化しないということ)
  • 微小な位置変化に対して頑健(入力データの小さなズレに対してプーリングは同じような値を返す。)

3つめに関しては、プーリングの処理で見る領域内で入力の値がシャッフル(ズレが起こる)されても、最大値は変わらないので出力はシャッフルする前と後で同じになる、という感じだろうか。

畳み込みとプーリングの処理でよく見かける「パディング」と「ストライドについて

パディング

パディングは、畳み込みの処理を行う前に、入力データの周囲に固定の値(0など)を埋めること。
f:id:Owatank:20170707155614p:plain
画像では、幅1のパディングを適用している。幅1のパディングとは入力の周囲を幅1ピクセルの 0 で埋めることを言う。
入力は (4,4) から幅1のパディングで (6,6) になってるのがわかる。

パディングの処理を行う理由としては、出力サイズの調整に使われる。と言うのも
input -> Conv1_1 -> Conv1_2 -> Conv1_3 -> ... Conv1_n -> MaxPool1
上のような第一層の畳み込みを考えるとき、パディングを行わないと、出力サイズが1回の畳み込みを終えるごとに小さくなっていくのでConv1_nに到達する前に出力サイズが 1 になることもありえてしまう。出力サイズが 1 になると言うことはそれ以上畳み込み演算を行えなくなってしまうということなのでこれを回避するためにパディングという処理を行う必要が出てくる。

ストライド

ストライドはフィルターの適用する位置の間隔(ずらす間隔)の値のことをさす。
畳み込みにおいて入力サイズが (7,7) のデータに対し、ストライドが 2 のとき出力サイズは (3,3) になる。
ストライドの設定値を大きくすると、出力サイズは小さくなる。逆にパディングの幅の値を大きくすると、出力サイズは大きくなる。

入力とフィルターサイズ、ストライドとパディングの値による出力サイズの関係式として
f:id:Owatank:20170707161104p:plain
上が成り立つ。入力サイズを(H,W)、フィルターサイズを(FH,FW)、出力サイズを(OH,OW)、パディングの値を P、ストライドの値を Sとしている。

フィルターサイズなどの値の設定としては、上の式が必ず割り切れるようにしないといけない。

どうでもいいけどこの式自作のデータセットで画像認識を行う際必要だった。