3-2.畳み込みニューラルネットワーク(CNN)

2020年4月27日

畳み込みニューラルネットワーク(CNN)

「畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)」はディープニューラルネットワーク(DNN:Deep Neural Network)の1つの手法で画像の認識率が高い成果を上げています。CNNの特徴は中間層に畳み込み層を利用し効率的に特徴を抽出してAIで認識できる点になります。
ここでは中間層に関する各機能の役割について主に説明していきます。
「3-1.ニューラルネットワーク」の基本的な仕組み(活性化関数や学習率、最適化など)は理解頂いている前提で説明しています。

1.畳み込みニューラルネットワーク(CNN)モデル


図1.畳み込みニューラルネットワークモデル(例)

図1はsLab-AI学習サイトで初期で設定されているモデルになります。このモデルを例に畳み込みニューラルネットワークを学習していきます。
図1のモデルの場合、学習してニューロンの重みや閾値を調整する層は畳み込み層と出力(全結合)層となりますので、sLab-AI学習サイトで調整した値(ニューロンの重みや閾値)を確認して頂くことが可能です。
【AIの学習(機械学習)とはニューラルネットワークで説明した通り、入力画像に対して出力ラベルが合致するようにニューロンの重みと閾値が調整されることをいいます。】
畳み込みニューラルネットワーク(CNN)の仕組みや動きは各層の動作から成り立ちますので各層について以下に説明します。

1-1.入力層【①】

入力層は画像1Pixelの情報をそのまま中間層に渡す「伝搬する層」です。情報は何も変更しませんので図1では28*28*1を画像データをそのまま出力します。「28*28」は画像サイズを表していて「*1」はグレースケールを表しています。そのためカラーの場合はRGB*の3情報ありますので「28*28*3」の情報となります。繰り返しとなりますが画像データを中間層へ渡す(伝搬する)だけの役割をしています。
*RGBはRed,Green,Blueの3原色で全てのカラーを3つの色で表現しています。

1-2.畳み込み層【②,④】

畳み込み層は畳み込みニューラルネットワークにおいて最も重要な層となります。役割を一言でいうと「特徴を抽出する層」です。効率的に特徴抽出する仕組みとして情報を小分けにしフィルタを用いて処理しています。


図2.畳み込み層における特徴抽出

図2に示すように情報を画面をフィルタ(Filter)単位に小分けにして該当区分の特徴を抽出します。このように小分けすることで以下のメリットがあります。

畳み込み層のメリット
  • 小さく区分けした画面をフィルタで検出するため効率的に特徴を抽出できます。
  • 畳み込み層の多段利用によりフィルタの組み合わせで複雑な特徴を効率的に抽出できます。
  • 調整するパラメータ(重み、閾値)を削減し計算できます。

説明を簡単にするためサイズを小さくし画像サイズを7pixel*7pixel*1入力の3*3サイズのフィルタを利用した場合について説明しています。フィルタ自体は「カーネル」とも呼ばれ畳み込み層のニューロンを意味します。フィルタ毎に抽出できる特徴が決まりますので畳み込み層での検出できる特徴の数はフィルタ数(ニューロン数)となります。厳密には抽出できるパターンはフィルタ数ですが一致/不一致のような0,1ではなくパターン適合度(入力の線形和の活性化関数)として出力されますので細かく判定されます。

特徴抽出は図2の右下に示すように抽出パターンにおける重み(ニューロン入力)が大きくなることで実現します。ニューロン入力の重みは学習することで調整されますので、フィルタの検出すべき特徴はデータ学習により決まっていきます。通常、モデル全体では畳み込み層を多段にして利用することが多いのでフィルタ相互の組み合わせで複雑な特徴でも抽出可能となります。

図2のように、7*7の入力を3*3のフィルタで区画分けすると個々の区分に対して1つの出力がありますので5*5サイズが出力されることになります。画面の該当区分で特徴を検出した場合に5*5サイズの該当区分が強く出力されることになります。1つのフィルタで画面を5*5サイズに小分けして特徴抽出しますので8個のフィルタがあった場合は5*5サイズの8フィルタ分(5*5*8=200)が出力されます。
つまり、フィルタを用いて画面全体を1Pixelづつ移動させながらフィルタの適合パターンがあるか調べて出力するイメージとなります。フィルタは通常複数ありますので8フィルタの場合は8個の特徴パターンを画面全体調べて適合度を出力(5*5*8=200)することになります。

パラメータ調整は各フィルタ(ニューロン)毎に必要となりますので重みはフィルタサイズ3*3をフィルタ数分必要となります。また、閾値はフィルタ数分の調整が必要となります。また、全結合層(Dense層)と畳み込み層のニューロン(畳み込み層はフィルタ)が同じ条件として調整数だけを比較すると表1のように49(7*7):9(3*3)で約5倍の効率化が図られています(厳密には全く同じ機能でないので単純比較はできませんがあえて比較した結果となります)。また、画面サイズが大きくなると同様に計算できますので差がさらに大きくなることがわかります。

 重み閾値
畳み込み層(畳み込みニューラルネットワーク)3 * 3 * フィルタ数フィルタ数
全結合層[Dense](ニューラルネットワーク)7 * 7 * ニューロン数ニューロン数
表1.CNNとNNの調整パラメータ比較

1-3.MaxPooling層【③,⑤】


図3.MaxPooling層の仕組み

MaxPooling層は入力データをPoolサイズに区切り、その中の最大値を抽出します。そのため、図3に示すように各Pool毎に最大値を出力することでデータ数は1/4(縦横サイズは1/2)になります。

図4.画像縮小

図4の通り最大値をとることで特徴を大まかに抽出でき位置づれに強い特徴抽出が可能となります。また、サイズを縮小できるため計算も早く行うことができるようになります。

1-4.Flat層【⑥】


図5.Flat層の仕組み

Flat層はデータの数値自体は何も変更しませんが並び替えを行います。図5のように3次元など多次元のデータを全て1次元データとして並び替えを行います。並び替えだけ行うためデータ数や中の数値に変更は行いません。

1-5.全結合層(Dense層)【⑦】

図6.全結合層の仕組み

全てのニューロンが全ての入力と結合されている層を全結合層といいます。一般的にニューラルネットワークと記載するモデルの場合は全結合をさしています。本サイトもニューラルネットワークの説明ページでの説明は全結合を説明しています。
通常、出力層は全結合が利用されます。これは出力層が各分類(ラベル)の確率を出力するため、ネットワーク内でここまで特徴抽出した情報をまとめて結論を出す必要があり全情報を凝縮して判断しています。

1-6.Dropout層

Dropout層は図1の畳み込みニューラルネットワークにはありませんが非常に有効な機能です。また、sLab-AI学習サイトでもモデル作成で選択可能となっています。


図7.Dropout層の仕組み

図7のようにDropout層は各ニューロン間の情報伝達をランダムに無効化させる役割を担います。主に過学習を防ぐ仕組みとして利用されており、この仕組みによりAI性能に大きな効果を得る場合があります。除外化率を設定できますので0.3を設定した場合は30%が除外(無効化)され次のニューロンに伝達されないことになります。