多層パーセプトロンを使用して画像認識を行うことができます。
しかし多層パーセプトロンで画像認識を行うにはいくつか問題点があります。
そこで今回はより効率的に画像認識を行うことができる畳み込みニューラルネットワークについて調べました。
多層パーセプトロンの問題点
先日の記事では多層パーセプトロンによってMNISTデータセットを学習させ、手書き数字の認識を行いました。
しかし多層パーセプトロンによる画像認識は次のような問題点があります。
- データの形状が壊れてしまう
- 学習するパラメータの数が多い
一つ目はデータの形状が壊されてしまうことです。
多層パーセプトロンを用いて手書き数字の識別を行う際に、画像データを入力していました。
しかし入力した画像は二次元であるのに対して、多層パーセプトロンの入力は一次元配列でした。そのため二次元配列を一次元配列に変換する必要がありました。
このように次元の変換を行うためにデータの形状が壊されてしまいます。
二つ目に学習するパラメータが多いことです。
今までの多層パーセプトロンは層への入力と各層のユニット同士がすべて結合している全結合層でした。
そのため一つの層の重み数は 入力数 × ユニット数 必要です。
MNISTデータセットの画像データは、 28 × 28 の小さなものでした。
しかしこの小さな画像でも、1層だけで784 × ユニット数 個の重みが必要となります。
これがさらに大きな画像となり、多層パーセプトロンの層を重ねていくと学習させるパラメータは膨大な数になってしまいます。
これらの問題点を解決したのが畳み込みニューラルネットワークです。
畳み込みニューラルネットワーク
畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)は、従来の多層パーセプトロンの問題点を改善したニューラルネットワークです。CNNは画像認識の分野で広く使用されています。
多層パーセプトロンはどの層も全結合で構成されていましたが、CNNは次の三つの結合方法で構成されています。
- 畳み込み層(Convolution層)
- プーリング(Pooling)層
- 全結合層
CNNは上記の層を次のように並べてネットワークを構成します。
各層の特徴については次に説明します。
畳み込み層
畳み込み層では「畳み込み演算」を行います。
畳み込み演算では二つのパラメータを用います。一つ目は入力として画像などの二次元配列を用います。二つ目に多層パーセプトロンでの重みに相当する「フィルタ」です。このフィルタは入力と同様に二次元配列です。
それでは畳み込み演算の具体例を次に示します。
図のようにフィルタを入力に対して少しずつ動かし、入力とフィルタの対応している部分を掛け合わせたものの和をとっています。
また畳み込み演算時にフィルタがずれる量のことを「ストライド」といいます。ストライドを大きくすればするほど演算結果の大きさは小さくなります。
畳み込み演算前に入力に対して「パディング」を行うことがあります。パディングは入力データの外周の外側に値0の要素を埋め込んで、入力データの大きさを大きくします。これによって演算結果の大きさを調整することができます。
演算結果の行列の大きさは次の式から計算することができます。
畳み込み演算後、演算結果にバイアスを足します。バイアスはスカラーで、演算結果の各要素にバイアスを足し合わせます
プーリング層
プーリングは指定した範囲の要素をまとめ、入力の大きさを小さくします。
プーリング演算の具体例を次に挙げます。
このようにプーリングは指定範囲何にある特徴的なデータを抜き出します。
このプーリングによてデータの位置のズレやノイズがあったとしてもそれらを吸収します。
プーリングには上記のようなMaxプーリング以外にも、指定範囲内の平均をとるAverageプーリングなどがあります。
全結合層
全結合層は今までの多層パーセプトロンと同様に層への入力と出力するユニットがすべて結合している層です。
まとめ
- 多層パーセプトロンにはデータ構造の破壊やパラメータ数が多いなどの問題点がある。
- 上記の問題点を改善したものとして畳み込みニューラルネットワーク(CNN)がある。
- CNNは畳み込み層・プーリング層・全結合層などから構成されている。
関連記事