畳み込みニューラル ネットワーク (CNN) とその原理の詳細な紹介

序文

  この記事では、畳み込みニューラル ネットワーク (CNN) の基本的な概念をまとめ、詳細に説明します。この記事を通じて、畳み込みニューラル ネットワーク (CNN) について非常に包括的に理解することができ、Deep Learning の入門学習として最適です。 。このブログの全内容はこちらです!


1. 畳み込みニューラルネットワークとは

  畳み込みニューラル ネットワーク (CNN) の概念は 1980 年代から 1990 年代まで遡ることができますが、当時のハードウェアおよびソフトウェア技術が比較的後進的であり、さまざまな深層学習理論が提案されていたため、この概念はしばらく「隠蔽」されました。次々と数値計算機器が発達し、畳み込みニューラル ネットワークが急速に発展しました。では、畳み込みニューラル ネットワークとは一体何なのでしょうか? 手書き数字認識を例に挙げると、認識プロセス全体は次のとおりです。

画像の説明を追加してください

図 1: 手書き数字の認識プロセス

  上記のプロセスは、手書き数字を認識するプロセス全体です。私は以前にこのプロジェクトに関する関連ブログを書き、コードをオープンソース化しました。興味のある学生は参照してください: CNN ベースの MINIST 手書き数字認識プロジェクト コードと原理の詳細な説明そうは言っても、プロセス全体を次のレイヤーで計算する必要があることがわかります。

  • 入力レイヤー: 入力画像とその他の情報
  • 畳み込みレイヤー: 画像の基礎となる特徴を抽出するために使用されます。
  • プーリング層: 過剰適合を防止し、データ次元を削減します。
  • 全結合層: 畳み込み層とプーリング層によって得られた画像の基礎的な特徴と情報を要約します。
  • 出力層:全結合層の情報に従い、最も確率の高い結果が得られる

  最も重要な層は畳み込みニューラル ネットワークの名前の由来でもある畳み込み層であることがわかりますが、これらの層の内容については以下で詳しく説明します。

2. 入力層

  入力層は比較的単純です. 畳み込みニューラル ネットワークは主に画像関連のコンテンツを処理するため、この層の主な仕事は画像などの情報を入力することです。コンピュータ?それは明らかに異なります. 入力画像の場合, まず対応する 2 次元行列に変換する必要があります. この 2 ビット行列は画像の各ピクセルのピクセル値で構成されます. 例を見ることができます,下図に示すように、手書きの数字「8」の画像がコンピュータによって読み取られ、ピクセル値で構成される 2 次元マトリックスに保存されます。

画像の説明を追加してください

図 2: 数字の 8 のグレースケール画像とそれに対応する 2 次元行列

  上の画像はグレースケール イメージとも呼ばれます。これは、各ピクセルの値が 0 ~ 255 (純粋な黒から純粋な白) の範囲であり、色の強度を示しているためです。白黒画像もあり、各ピクセル値は 0 (純粋な黒) または 255 (純粋な白) のいずれかになります。私たちの日常生活で最も一般的なのは、赤、緑、青の 3 つのチャネルを持つ RGB 画像です。各チャンネルの各ピクセル値の範囲も 0 ~ 255 で、各ピクセルの色の強度を示します。ただし、日常の処理は基本的にグレースケール画像です。これは、操作が簡単であるため (値の範囲が小さく、単色)、一部の RGB 画像もニューラル ネットワークに入力する前にグレースケール画像に変換されます。これは、計算の便宜のためでもあります。そうでない場合、3 つのチャネルのピクセルを一緒に処理すると、非常に多くの計算量が必要になります。もちろん、コンピューターのパフォーマンスの急速な発展により、一部のニューラル ネットワークは 3 チャンネルの RGB 画像を処理できるようになりました。

  これで、入力層の機能が、画像をピクセル値で構成される対応する 2 次元行列に変換し、この 2 次元行列を保存して、後続の層の操作を待つことであることがわかりました。

3. 畳み込み層

  インポート後の写真はどうすればよいですか? 画像の 2 次元行列を取得し、特徴を抽出すると仮定すると、畳み込み演算により、特徴が存在する領域の高い値が決定され、それ以外の場合は低い値が決定されます。このプロセスは、コンボリューション カーネルで積の値を計算して決定する必要があります。現在の入力画像が人間の頭であり、抽出する必要がある特徴が人間の目であると仮定すると、人間の目をコンボリューション カーネルとして使用し、人間の頭の画像上を移動することで目の位置を決定します。プロセスは次のようになります。

画像の説明を追加してください

図 3: 人間の目の特徴を抽出するプロセス

  畳み込みプロセス全体を通じて、新しい 2 次元行列が得られます。この 2 次元行列は、特徴マップ (Feature Map) とも呼ばれます。最後に、得られた特徴マップに色を付けることができます (私はちょうど作成しています(値が高いと白、値が低いと黒など)、最終的に以下に示すように人間の目の特徴を抽出できます。

画像の説明を追加してください

図 4: 人間の目の特徴を抽出した結果

  上記の説明を見ると少し混乱するかもしれませんが、心配しないでください、まず第一に、コンボリューション カーネルも 2 次元行列です。もちろん、この 2 次元行列は 2 次元行列よりも小さいか等しいです。入力画像の行列. コンボリューションカーネルは入力画像の2次元行列を通過します. 行列は常に移動しており, 積が加算されるたびに, この位置の値として, プロセスは次の図:

画像の説明を追加してください

図 5: 畳み込みのプロセス

  プロセス全体が次元削減プロセスであり、コンボリューション カーネルのノンストップ移動計算を通じて画像内の最も有用な特徴を抽出できることがわかります。通常、コンボリューション カーネルによって計算された新しい 2 次元行列を特徴マップと呼びます。たとえば、上のアニメーションでは、下に移動する濃い青色の四角形がコンボリューション カーネルであり、上の水色の四角形が特徴マップです。

  読者の中には、コンボリューション カーネルが移動するたびに中間位置が計算されることに気づいた方もいるかもしれませんが、入力画像の 2 次元行列の端は 1 回しか計算されません。

  慎重に考えてみましょう、エッジが 1 回だけ計算され、中央が毎回複数回計算される場合、結果として得られる特徴マップではエッジの特徴も失われ、最終的には不正確な特徴抽出につながります。元の入力画像の 2 次元行列の周囲に 1 つまたは複数の円を拡張することで、各位置が公平に計算され、特徴が失われないようにします。このプロセスは、次の 2 つの場合に見られます。拡張による損失はパディングとも呼ばれます。

  • Padding の値は 1 で、円が拡張されます。

画像の説明を追加してください

図 6: Padding が 1 の場合の畳み込みのプロセス
  • Padding の値は 2 で、円を 2 つ展開します。

画像の説明を追加してください

図 7: Padding が 2 の場合の畳み込みのプロセス

  状況がさらに複雑な場合はどうなるでしょうか? カラー画像を抽出するために 2 つのコンボリューション カーネルを使用するとどうなるでしょうか? カラー画像には 3 つのチャネルがあること、つまり、カラー画像には 3 つの 2 次元行列があることを以前に紹介しました。もちろん、ここでは例として最初のチャネルのみを使用します。この時点では、2 セットのコンボリューション カーネルを使用し、各セットのコンボリューション カーネルは、自身のチャネルの 2 次元行列の特性を抽出するために使用されます。先ほど述べたように、最初のチャネルのみを考慮するため、必要なのは2 セットの畳み込みを使用するには、カーネルの最初の畳み込みカーネルを使用して特徴マップを計算できます。そのプロセスは次の図に示されています。

画像の説明を追加してください

図 8: 2 つのコンボリューション カーネルによるコンボリューションのプロセス

  上のアニメーションを見るとちょっとわかりにくいですよね?説明すると、先ほどの考え方によれば、入力画像は 3 チャンネルのカラー画像なので、入力画像のサイズは 7×7×3 となり、最初の 7 × 7 の 2 次元行列から特徴を抽出する最初のチャネルのみを考慮し、その後は畳み込みカーネルの各セットの最初の畳み込みカーネルを使用するだけで済みます。これはバイアス項目であり、最終的な計算結果をそれに追加することができ、最終的に計算を通じて特徴マップを取得できます。複数の畳み込みカーネルを含むいくつかの特徴マップがあることがわかりますが、ここでは 2 つの畳み込みカーネルのみを使用しているため、2 つの特徴マップが得られます。

  以上が畳み込み層に関する知識ですが、もちろんこの記事は単なる紹介なので、まだ詳しく説明されていない複雑な内容がいくつかありますが、これについては後で学習してまとめる必要があります。

4. プーリング層

  また、畳み込みカーネルの数と同じだけの数の特徴マップがあると先ほど述べましたが、実際には、状況はさらに複雑になるはずで、より多くの畳み込みカーネルが存在するため、より多くの特徴マップが存在することになります。写真が多いということは、多くの機能が得られることを意味しますが、それほど多くの機能が必要なのでしょうか? 実際、必要のない機能はたくさんあり、これらの冗長な機能は通常、次の 2 つの問題を引き起こします。

  • 過学習
  • 次元が高すぎる

  この問題を解決するには、プーリング層を使用できます。では、プーリング層とは何でしょうか? プーリング層はダウンサンプリングとも呼ばれます。つまり、畳み込み演算を実行した後、得られた特徴マップを抽出し、最も代表的な特徴を抽出します。これにより、過剰適合と次元削減を軽減できます。プロセスは次のようになります。

画像の説明を追加してください

図 9: プーリングのプロセス

  それでは、特徴抽出にはどのようなルールを使用すればよいのかと疑問に思う読者もいるかもしれません。実際、このプロセスは畳み込みプロセスに似ており、小さな正方形のボックスが画像上を移動しますが、この正方形のボックスから最も代表的な特徴を抽出するたびに、最も代表的な特徴をどのように抽出するかという疑問が再び生じます。 . 性的特徴については、通常次の 2 つの方法があります。

  • 最大プーリング

    名前が示すように、最大​​プーリングは正方形内のすべての値の最大値を毎回取得することであり、この最大値は現在位置の最も代表的な特徴に相当します。プロセスは次のとおりです。

画像の説明を追加してください

図 10: 最大プーリングのプロセス

      ここで説明が必要なパラメータがいくつかあります。
      ① kernel_size = 2: プーリング プロセスで使用される正方形のサイズは 2×2 です。畳み込みのプロセスにある場合、畳み込みカーネルのサイズが 2× であることを意味します。 2 ②
      stride = 2: 正方形が 2 つの位置 (左から右、上から下) に移動するたびに、このプロセスは実際には畳み込み演算と同じです。 ③ パディング = 0: これは、この値が次の場合、以前に導入されました
      。 0、拡張が実行されていないことを意味します

  • 平均プーリング

    平均プーリングはこの正方形の領域内のすべての値の平均値を取ることです. ここでの各位置の値が特性に与える影響を考慮すると, 平均プーリングの計算も比較的単純です. 全体のプロセスは下図に示されています:

画像の説明を追加してください

図 11: 平均プーリングのプロセス

  パラメータの意味は上で紹介した最大プーリングと同じですが、平均プーリングを計算する際には切り上げが行われることに注意してください。

  上記はプーリング層のすべての操作に関するものです。もう一度おさらいしましょう。プーリング後、より代表的な特徴を抽出し、不要な計算を減らすことができます。これは実際のニューラル ネットワークの計算にとって非常に重要です。これは有益です。ネットワークは実際には非常に大規模であり、プーリング層の後ではモデルの効率が大幅に向上します。したがって、プーリング層には多くの利点があり、その利点は次のように要約されます。

  • パラメータの量を減らしながらも、元の画像の本来の特徴を保持します。

  • 過剰適合を効果的に防止

  • 畳み込みニューラル ネットワークに翻訳不変性をもたらす

    上記 2 つの利点については以前紹介しましたが、翻訳不変性とは何でしょうか? 次の図に示すように、前の例のいずれかを使用できます。

画像の説明を追加してください

図 12: プーリングの変換不変性

  2 つの元の画像の位置が異なっていることがわかります。1 つは正常で、もう 1 つは人間の頭がわずかに左に移動しています。畳み込み演算後、対応する特徴マップが得られます。これら 2 つの特徴マップ元の画像の位置と対応しており、片方の目特徴の位置は正常で、もう一方の目特徴の位置はわずかに左にずれています。人間はそれを区別できますが、ニューラル計算後に誤差が生じる可能性があります。ネットワーク、表示されるはずなので 目のあるところに目がありません、どうすればよいですか?このとき、プーリングレイヤーを使用してプーリング処理を行うと、プーリング前は 2 枚の写真の目の特徴の位置が同じではありませんでしたが、プーリング後は目の特徴の位置が同じになっていることがわかります。後続のニューラル ネットワークの基礎となります。計算は利便性をもたらします。この特性はプーリングの変換不変性です。

5. 全結合層

  上の人間の頭の例を想定すると、畳み込みとプールによって人間の目、鼻、口の特徴が抽出されました。これらの特徴を使用して、写真が人間の頭であるかどうかを識別したい場合はどうすればよいでしょうか? この時点で必要なのは、抽出されたすべての特徴マップを「平坦化」し、その次元を1 × x 1×xに変更することだけです。1×x、このプロセスは完全接続のプロセスです、つまり、このステップでは、すべての特徴を拡張して計算を実行し、最終的に入力画像が人物であるかどうかの確率である確率値を取得します。プロセスは次のとおりです。

画像の説明を追加してください

図 13: 完全接続のプロセス

  このプロセスだけを見るとあまり明確ではないため、次の図に示すように、前のプロセスを完全に接続された層と組み合わせることができます。

画像の説明を追加してください

図 14: プロセス全体

  2 つの畳み込みと最大プーリングを経て、最終的な特徴マップが得られることがわかります。このときの特徴は計算後に得られるため、代表性が比較的強いです。最後に、全結合層の後、1 つの層に拡張されます。 -次元ベクトル、別の計算の後、最終的な認識確率が得られます。これが畳み込みニューラル ネットワークの全プロセスです。

6. 出力層

  畳み込みニューラル ネットワークの出力層は比較的理解しやすいです。全結合層で得られた 1 次元ベクトルを計算して認識値の確率を求めるだけです。もちろん、この計算は線形でも非線形でも構いません。 。深層学習では、認識する必要がある結果は一般に複数のカテゴリであるため、各位置には現在の値として認識される確率を表す確率値があり、最大の確率値が最終的な認識結果となります。トレーニング プロセス中に、最高のモデル精度を達成するためにパラメーター値を継続的に調整することで認識結果をより正確にすることができます。

画像の説明を追加してください

図 15: 出力層の概略図

7. プロセス全体を確認する

  畳み込みニューラル ネットワークの最も古典的なアプリケーションは手書きの数字認識です。たとえば、数字の 8 を手書きした場合、畳み込みニューラル ネットワークはそれをどのように認識するのでしょうか? 識別プロセス全体を次の図に示します。

画像の説明を追加してください

図 16: 手書き数字認識のプロセス
  1. 手書きの数字の画像をピクセルの行列に変換します
  2. Padding が 0 ではないピクセル マトリックスに対して畳み込み演算を実行します。目的は、エッジの特徴を保存し、特徴マップを生成することです。
  3. 6 つの畳み込みカーネルを使用してこの特徴マップ上で畳み込み演算を実行し、6 つの特徴マップを取得します。
  4. 各特徴マップでプーリング操作 (ダウンサンプリング操作とも呼ばれます) を実行し、特徴を保持しながらデータ フローを削減し、前の層のそれぞれの特徴マップと非常に長い 6 つの小さなマップを生成します。サイズ
  5. 2 番目の畳み込み演算は、プーリング演算後に取得された 6 つの小さな画像に対して実行され、より多くの特徴マップが生成されます。
  6. 2 番目の畳み込みによって生成された特徴マップに対してプーリング操作を実行します (ダウンサンプリング操作)。
  7. 2 回目のプーリング操作で取得したフィーチャに対して最初の完全接続を実行します。
  8. 最初の完全接続の結果に対して 2 回目の完全接続を実行します。
  9. 2 番目のフル リンクの結果に対して最後の操作を実行します。この操作は線形でも非線形でも構いません。最後に、各位置 (0 から 9 までの合計 10 個の位置) に確率値があります。この確率値は入力された手書き番号を現在位置番号として認識する確率を求め、最終的に最も確率の高い位置の値を認識結果として採用します。右上が私の手書き番号、右下がモデル(LeNet)の認識結果であることが分かりますが、最終的な認識結果は私が入力した手書き番号と一致していることが分かります。画像の左上、このモデルが手書きの数字を正常に認識できることを示しています

要約する

  以上がこのブログの全内容ですが、非常に内容が充実しており、まとめるのにかなりの時間を要しましたので、皆様と一緒に学び、進歩していけたら幸いです。また、私のレベルが限られているため、間違っている場合は読者の皆様が修正していただければ幸いです。ありがとうございます。次のブログでお会いしましょう!

おすすめ

転載: blog.csdn.net/IronmanJay/article/details/128689946