畳み込みニューラルネットワーク(Convolutional neural network)

CNN

畳み込みニューラルネットワーク(Convolutional neural network; CNN)は、画像解析を行う深層学習のアルゴリズムの一つである。従来のニューラルネットワークは、入力されたデータをそのまま中間層にあるニューロンに流して、処理を続けていく。これに対して、CNN は、入力されたデータを、畳み込み演算やプーリング演算などを施してから、ニューロンに流して処理を続けていくようにな構造になっている。

一例として、モノクロ画像を処理する CNN の構成を以下のように図示した。この図をみると、この CNN では、入力されたデータは、2 回の畳み込み演算を行ったあとに 1 回のプーリング演算を行なって画像サイズを縮小させている。縮小された画像は続いて、2 回の畳み込み演算と 1 回のプーリング演算によって、画像サイズがさらに小さくなっていく。このような作業を何回か繰り返した後に、2 次元の画像を 1 次元のベクトルに変換して、従来のニューラルネットに流している。

畳み込みニューラルネットワークの例。

畳み込み層

畳み込み層では、画像全体に対してフィルタをかけて、そのフィルタを通して物体の局所領域を検出して、画像中の物体の位置のずれに頑健になる。例えば、3 × 3 の行列を用意して、これをフィルタとして、画像の左上から畳み込み演算を行うと次のようになる。

\[ \begin{bmatrix} 0 & 2 & 0 \\ 1 & 0 & 3 \\ 3 & 1 & 0 \end{bmatrix} \circ \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 1 \end{bmatrix} = sum \begin{bmatrix} 0 \times 1 & 2 \times 0 & 0 \times 1 \\ 1 \times 0 & 0 \times 1 & 3 \times 0 \\ 3 \times 1 & 1 \times 0 & 0 \times 1 \end{bmatrix} = 3 \]
畳み込みニューラルネットワークの畳み込み層の例1

次に、右へ 1 ピクセルをずらして、もう一度畳み込み演算を行う。

畳み込みニューラルネットワークの畳み込み層の例2

1 行目の畳み込みが完了すると、2 行目に移動してから引き続き畳み込み演算を行う。

畳み込みニューラルネットワークの畳み込み層の例3

このような畳み込み演算を行うと、最終的に画像は次のように畳み込まれる。

畳み込みニューラルネットワークの畳み込み層の例4

スライド

上のように畳み込みを行う際に、フィルタを 1 ピクセルずつ動かしていた。実際には、フィルタを 1 ピクセルずつ動かすだけでなく、2 ピクセルごとあるいは 3 ピクセルごとに動かすこともある。

畳み込みニューラルネットワークの畳み込み層でスライド距離を大きくする例

ゼロパッティング

上のように、畳み込みを行うと、画像のサイズが縮小される。畳み込みによる画像が小さくなるのを防ぐために、畳み込みを行う前に、既存の画像のまわりを 0 で埋めることがある。これをゼロパッティングという。

畳み込みニューラルネットワークで、ゼロパッディングさせることによって畳み込みによるサイズ縮小を抑えることができる。

プーリング層

プーリング演算では、ある大きさの枠を決めて、その枠を既存画像の行列データに当てはめてから、その領域内にあるデータに対して何らかの演算を行なっている。CNN では、一般的には、枠領域内に存在している数値のうち最大値を出力 max pooling が行われている。プーリング演算によって画像サイズが大きく減少し、より特徴的な情報しか残らなくなる。例えば、3 × 3 の枠で max pooling を行うと、次のようになる。

畳み込みニューラルネットワークのプーリング層の計算例1

このプーリング演算を画像の終わりまで行うと、次のようになる。

畳み込みニューラルネットワークのプーリング層の計算例2

カラー画像

カラー画像の場合は、1 枚の画像から赤色、緑色、青色の 3 つのチャンネルに分解できる。このようなカラー画像に対して、CNN で畳み込み演算やプーリング演算を行うとき、フィルタを 3 枚用意すればよい。

References

  • 定番の Convolutional Neural Network をゼロから理解する. DeepAge. 2016. LINK: Website