今回は、畳み込みニューラルネットワーク(CNN)が、なぜ画像認識に適しているのかを理解するために、CNNの各層の働きに注目して構造を見ていきます。

畳み込みネットワークの構成
前回、前々回の記事
Deep learningで画像認識②〜視覚野と畳み込みニューラルネットワーク 〜
Deep learningで画像認識③〜ネオコグニトロンとは?〜
でも紹介しましたが、CNN(畳み込みニューラルネットワーク)では、
① 畳み込みフィルタ層:画像の濃淡パターンを検出する(エッジ抽出等の特徴抽出)
② プーリング層:物体の位置が変動しても同一の物体であるとみなす(位置ズレを許容する)
これらの層を組み合わせることによって、画像から特徴量を抽出する働きを担っています。
一方、特徴量を抽出するだけでは、画像の識別はできません。識別には、「特徴量に基づいた分類」が必要です。この分類の役割を担っているのが、全結合層と出力層です。
③ 全結合層:①②を通して特徴部分が取り出された画像データを一つのノードに結合し、活性化関数(後述)によって変換された値(特徴変数)を出力する。ノードの数が増えると特徴量空間の分割数が増し、各領域を特徴付ける特徴変数の数が増える。
④ 出力層:全結合層からの出力(特徴変数)を元に、ソフトマックス関数を用いて確率に変換し、それぞれの領域に正しく分類される確率を最大化する(最尤推定法)ことによって分類を行う。
注目したいのは、以下のように層を段階的に加えていくことによって、画像識別精度が向上するということです。
(i)例えば、入力画像を画素値が画素数だけ並んだ行列と考え、直接出力層に入力し、最尤推定法などによって分類することができます。これは、最もシンプルなニューラルネットとなり、認識精度は高くないですが、これだけでも画像の分類は可能です。

最もシンプルなニューラルネット(X1, X2・・・, Xmは入力画像の画素値)
(ii)次に、入力画像と出力層の間に全結合層を入れることによって、全結合層のノードの数の分だけ特徴量空間の分割数が増し、各領域を特徴づける変数が増えるため、より正確に分類できるようになり認識精度は少し向上します。

ノードの数の分だけ特徴量空間の分割数が増し、より正確な分類が可能
(X1, X2・・・, Xmは入力画像の画素値)
(iii)そして、画像分類のコアである、畳み込みフィルタ層とプーリング層を全結合層の前に入れることによって、画像データに特化した特徴量の抽出が可能となり、認識精度が大きく向上します。

画像データに特化した特徴量の抽出が可能となり、認識精度が大きく向上
図4に示すように、CNNでは、畳み込みフィルタ層とプーリング層の積み重ねにより、画像データに特化した特徴量を取り出し、その特徴量に基づく分類を全結合層と出力層において行っている、ということができます。
活性化関数とドロップアウト層
CNNでは、入力画像とそれに対応する正解データが学習データとして与えられ、パラメータ(畳み込みフィルタや全結合層の結合重みなど)を最適化することによって学習が行われます。
このパラメータの最適化を効率的に行うテクニックとして代表的なものに以下の2つが挙げられます。
① フィルター適用後の画像データに活性化関数(ReLU: Rectified Linear Unit)を適用する。
② オーバーフィッティングを避けるためにドロップアウト層を入れる。
①の活性化関数(ReLU)とは、0未満の出力値を全て0にする関数で、ある閾値以上の部分だけを意味のある情報として次の層に送る働きをします。畳み込みフィルターや全結合層の後に置かれ、抽出された特徴をより強調する働きがあります。
②のドロップアウト層は、過学習を防ぐ働きがあります。過学習とは、学習データだけが持つ特徴に対して過剰な最適化が行われることにより、未知のデータに対する正解率が下がることを意味します。ドロップアウト層は、全結合層のノード群と出力層の間の接続の一部をランダムに切断することで過学習を防ぐ働きがあります。
この活性化関数(ReLU)とドロップアウト層を図4に加えたものが、最終的なCNNの全体像になります(図5)。

CNNの全体像
(図4にReLUとドロップアウト層が加わる)
図5では、畳み込みフィルタ層とプーリング層を一組しか入れていませんが、これらを積み重ねて多層化することによって、さらに新しい特徴が抽出され、認識精度が向上します。
また、入力画像の種類によって、「正規化層」と呼ばれる画像の前処理を行う層を入れたり、全結合層を多層化したり、ドロップアウト層を省いたりと様々なバリエーションがあります。
次回は、Kerasと呼ばれるDeep Learingのライブラリを使って、図5のようなシンプルなCNNの実装にトライしてみます。
【参考文献】
[1] TensorFlowで学ぶディープラーニング入門,中井悦司,マイナビ.
[2] ディープラーニングと画像認識ー基礎と最近の動向ー,岡谷貴之