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

完了

ディープ ラーニング モデルはあらゆる種類の機械学習に使用できますが、画像などの数値の大きな配列で構成されるデータを処理する場合には特に便利です。 画像を使用する機械学習モデルは、"コンピューター ビジョン" と呼ばれる人工知能分野の基礎であり、ディープ ラーニング手法はこの分野における近年のすばらしい進歩に貢献しています。

この分野でのディープ ラーニングの成功の中核となるのは、"畳み込みニューラル ネットワーク" (CNN) と呼ばれる種類のモデルです。 CNN は通常、画像から特徴を抽出し、これらの特徴を完全に接続されたニューラル ネットワークに供給して予測を生成することによって機能します。 ネットワークの特徴抽出層には、個々のピクセル値の大きな配列から、ラベル予測をサポートする小さな特徴セットに特徴の数が減るという効果があります。

CNN 内の層

CNN は複数の層で構成されており、それぞれで特徴の抽出やラベルの予測における特定のタスクが実行されます。

畳み込み層

基本レイヤーの種類の 1 つは、画像の重要な特徴を抽出する "畳み込み" 層です。 畳み込み層は、画像にフィルターを適用することによって機能します。 フィルターは、重みの値の行列で構成される "カーネル" によって定義されます。

たとえば、3 x 3 のフィルターは次のように定義できます。

 1  -1   1
-1   0  -1
 1  -1   1

画像は、ピクセル値の行列でもあります。 フィルターを適用するには、フィルターを画像に "重ね"、フィルター カーネルの下にある対応する画像のピクセル値の "加重和" を計算します。 その結果は、画像と同じサイズの新しい値の行列の中で、同等の 3 x 3 パッチの中央のセルに割り当てられます。 たとえば、次のピクセル値を持つ 6 x 6 の画像があるとします。

255 255 255 255 255 255 
255 255 100 255 255 255
255 100 100 100 255 255
100 100 100 100 100 255
255 255 255 255 255 255
255 255 255 255 255 255

画像の左上の 3 x 3 パッチにフィルターを適用すると、次のようになります。

255 255 255      1  -1   1    (255 x 1)+(255 x -1)+(255 x 1) +
255 255 100  x  -1   0  -1  = (255 x -1)+(255 x 0)+(100 x -1) +   = 155
255 100 100      1  -1   1    (255 x1 )+(100 x -1)+(100 x 1)

結果は、次のように、新しい行列の対応するピクセル値に割り当てられます。

 ?   ?   ?   ?   ?   ?  
 ?  155  ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?

ここで、フィルターが移動します ("畳み込み")。通常は、"ステップ" サイズ 1 を使用し (右に 1 ピクセルずつ移動します)、次のピクセルの値が計算されます。

255 255 255      1  -1   1    (255 x 1)+(255 x -1)+(255 x 1) +
255 100 255  x  -1   0  -1  = (255 x -1)+(100 x 0)+(255 x -1) +   = -155
100 100 100      1  -1   1    (100 x1 )+(100 x -1)+(100 x 1)

これで、新しい行列の次の値を入力できます。

 ?   ?   ?   ?   ?   ?  
 ?  155 -155 ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?
 ?   ?   ?   ?   ?   ?

このプロセスを繰り返して画像のすべての 3 x 3 パッチにフィルターを適用すると、次のような値の新しい行列が生成されます。

?   ?   ?    ?    ?   ?
?  155 -155 155 -155  ?
? -155 310 -155  155  ?
?  310 155  310   0   ?
? -155 -155 -155  0   ?
?   ?   ?    ?    ?   ?

フィルター カーネルのサイズにより、端にあるピクセルの値を計算することはできません。通常は、"埋め込み" 値 (通常は 0) を適用します。

0   0   0    0    0   0
0  155 -155 155 -155  0
0 -155 310 -155  155  0
0  310 155  310   0   0
0 -155 -155 -155  0   0
0   0   0    0    0   0

畳み込みの出力は、通常、活性化関数に渡されます。これは多くの場合、負の値が 0 に設定されるようにする "整流線形ユニット" (ReLU) 関数です。

0   0   0    0    0   0
0  155  0   155   0   0
0   0  310   0   155  0
0  310 155  310   0   0
0   0   0    0    0   0
0   0   0    0    0   0

結果の行列は、機械学習モデルのトレーニングに使用できる特徴値の "特徴マップ" です。

: 特徴マップの値は、ピクセルの最大値 (255) を超える場合があります。そのため、特徴マップを画像として視覚化するには、特徴値を 0 ~ 255 の範囲に "正規化" する必要があります。

次のアニメーションは、畳み込みのプロセスを示しています。

A filter kernel is convolved across an image of a triangle, extracting features that emphasize the three edges and corners

  1. 畳み込み層に画像が渡されます。 この場合、画像は単純な幾何学的図形です。
  2. 画像は、0 ~ 255 の値を持つピクセルの配列で構成されます (カラー画像の場合は、通常、赤、緑、青のチャネルの値を持つ 3 次元配列です)。
  3. 通常、フィルター カーネルはランダムな重みで初期化されます (この例では、フィルターのピクセル値に対する影響を強調するために値を選択していますが、実際の CNN では通常、初期の重みはランダムなガウス分布から生成されます)。 このフィルターは、画像データから特徴マップを抽出するために使用されます。
  4. このフィルターは画像全体で畳み込まれ、重みの合計とそれぞれの位置に対応するピクセル値を乗算して特徴値が計算されます。 負の値が 0 に設定されるように、整流線形ユニット (ReLU) 活性化関数が適用されます。
  5. 畳み込みの後、特徴マップには抽出された特徴の値が含まれており、多くの場合、画像の主要な視覚的属性が強調されています。 この場合、特徴マップでは、画像内の三角形の辺と角が強調されています。

通常、畳み込み層では、複数のフィルター カーネルが適用されます。 各フィルターによって異なる特徴マップが生成され、すべての特徴マップがネットワークの次の層に渡されます。

プーリング層

画像から特徴の値を抽出した後は、"プーリング" (または "ダウンサンプリング") 層を使用して、抽出された主要な識別する特徴を維持したまま、特徴の値の数を減らします。

最も一般的なプーリングの 1 つが、フィルターが画像に適用されると、フィルター領域内の最大ピクセル値のみが保持される "最大プーリング" です。 たとえば、次の画像のパッチに 2 x 2 プーリング カーネルを適用すると、結果は 155 になります。

0   0
0  155

2 x 2 プーリング フィルターの効果によって、値の数が 4 から 1 に減っていることに注意してください。

畳み込み層と同様に、プーリング層は特徴マップ全体にフィルターを適用することによって機能します。 次のアニメーションは、画像マップの最大プーリングの例を示しています。

A filter kernel is convolved across an image of a triangle, extracting features that emphasize the three edges and corners, max pooling for an image map.

  1. 畳み込み層のフィルターによって抽出された特徴マップには、特徴値の配列が含まれています。
  2. プーリング カーネルは、特徴の値の数を減らすために使用されます。 この場合、カーネルのサイズは 2 × 2 であるため、特徴の値の数が 4 分の 1 になった配列が生成されます。
  3. プーリング カーネルは、各位置で最高のピクセル値のみを保持しながら、特徴マップ全体で畳み込まれます。

ドロップ層

CNN における最も困難な課題の 1 つは、"オーバーフィット" を回避することです。この場合、結果として得られるモデルはトレーニング データに対しては適切に機能しますが、トレーニングされていない新しいデータに対して適切に一般化されていません。 オーバーフィットを軽減するために使用できる手法の 1 つは、トレーニング プロセスによって特徴マップがランダムに除去 (または "ドロップ") される層を含めることです。 これは直感に反するように思えるかもしれませんが、モデルが学習によりトレーニング画像に過剰に依存しないことを保証する効果的な方法です。

オーバーフィットを緩和するために使用できるその他の手法としては、トレーニング画像をランダムに反転、ミラーリング、または傾斜させることによって、トレーニングのエポック間で異なるデータを生成する方法があります。

平坦化層

畳み込み層とプーリング層を使用して画像内の目立つ特徴を抽出した後、結果として得られる特徴マップは、ピクセル値の多次元配列になります。 平坦化層は、特徴マップを、完全に接続された層への入力として使用できる値のベクトルに平坦化するために使用されます。

完全に接続された層

通常、CNN は完全に接続されたネットワークで終わります。このネットワークでは、特徴値が入力層に渡され、1 つまたは複数の非表示層を通過し、出力層で予測値が生成されます。

基本的な CNN アーキテクチャは次のようになります。

A CNN consisting of a convolutional layer, a pooling layer, a dropping layer, a flattening layer, and a fully connected layer

  1. 画像は畳み込み層に入力されます。 この場合、2 つのフィルターがあるため、各画像から 2 つの特徴マップが生成されます。
  2. 特徴マップはプーリング層に渡されます。この層では、2 x 2 プーリング カーネルによって特徴マップのサイズが縮小されます。
  3. オーバーフィットを防ぐために、ドロップ層によって特徴マップの一部がランダムにドロップされます。
  4. 平坦化層では、残りの特徴マップ配列を取得し、ベクトルに平坦化します。
  5. ベクトルの要素が完全に接続されたネットワークに入力され、予測が生成されます。 この場合、ネットワークは、可能性がある 3 つの画像クラス (三角形、正方形、円) の確率を予測する分類モデルです。

CNN モデルをトレーニングする

ディープ ニューラル ネットワークと同様に、CNN は複数のエポックにわたってトレーニング データのバッチを渡すことによってトレーニングされ、各エポックで計算された損失に基づいて重みとバイアスの値を調整します。 CNN の場合、調整された重みの逆伝播には、畳み込み層で使用されるフィルター カーネルの重みと、完全に接続された層で使用される重みが含まれます。