ニューラル ネットワークとディープ ラーニング CNN

1. 従来の人工ニューラル ネットワーク (ANN)

従来の人工ニューラル ネットワークは、入力層、隠れ層、出力層の 3 つの層で構成されています。各層は個々のニューロンで構成されています。各接続線は、トレーニングが必要な異なる重み (その値は重みと呼ばれます) に対応しています。
ここに画像の説明を挿入
ここに画像の説明を挿入
入力層を除いて、各層のノードには非線形変換が含まれています。非線形化には活性化関数が必要です。

ここに画像の説明を挿入
ここに画像の説明を挿入
複数のレイヤーによって引き起こされる問題は、複雑さが高すぎて過剰適合につながるため、正則化が必要になることです。
ここに画像の説明を挿入
ここに画像の説明を挿入
バックプロパゲーション アルゴリズム (bp)
ここに画像の説明を挿入
ここに画像の説明を挿入
アルゴリズム プロセスは省略されています。

2.CNN

人工の完全に接続されたニューラル ネットワークでは、2 つの隣接するレイヤー間の各ニューロンがエッジで接続されます。入力層の特徴次元が非常に高くなると、完全に接続されたネットワークがトレーニングする必要があるパラメータが大幅に増加し、計算速度が非常に遅くなります. たとえば、白黒の 28×28 の手書きのデジタル画像、入力 各層には 784 個のニューロンがあります。

中間に隠れ層が 1 つだけ使用されている場合、パラメータ w は 784×15=11760 以上になります; 入力がカラー付き RGB 形式の 28×28 手書き​​デジタル画像である場合、入力ニューロンは 28×28× になります。 3 = 2352... . 完全に接続されたニューラル ネットワークを使用して画像を処理するには、あまりにも多くのトレーニング パラメーターが必要であることは容易にわかります。

畳み込みニューラル ネットワーク (CNN) では、畳み込み層のニューロンは前の層の一部のニューロン ノードにのみ接続されます。つまり、そのニューロン間の接続は完全には接続されず、同じ層で重み w とオフセット b特定のニューロン間の接続が共有されている (つまり、同じである) ため、トレーニングが必要なパラメーターの数が大幅に削減されます。

1.CNNレベル

畳み込みニューラル ネットワーク CNN の構造には、通常、次の層が含まれます。

  • 入力層:データ入力用
  • 畳み込み層: 特徴抽出と特徴マッピング (特徴抽出) に畳み込みカーネルを使用
  • 励起層: 畳み込みも線形演算であるため、非線形マッピングを追加する必要があります
  • プーリング層: ダウンサンプリングを実行し、特徴マップをまばらに処理し、データ計算の量を減らします。(次元削減、オーバーフィット防止)
  • 完全に接続された層: 通常、CNN の最後に再適合して、特徴情報の損失を減らします
  • 出力層: 結果の出力に使用

もちろん、他のいくつかの機能レイヤーを途中で使用することもできます。

  • 正規化層 (バッチ正規化): CNN の特徴の正規化
  • スライス層: 異なる地域のいくつかの (画像) データの個別学習
  • 融合層:特徴学習を独自に行うブランチの融合

1.1 入力層

CNN の入力層の入力形式は、画像自体の構造を保持します。RGB 形式の 32x32 画像の場合、CNN は 3x32x32 ニューロンを入力します。
ここに画像の説明を挿入
ここに画像の説明を挿入

1.2 畳み込み層

いくつかの概念を明確にする必要があります。

  • 受容野(局所受容野)は、
    前層のいくつかの機能を体験することです。畳み込みニューラル ネットワークでは、中間層のニューロンの感覚視野は比較的小さく、前の時間の一部の特徴しか見ることができません.前の層の他の特徴は、感覚視野を他の時間に変換することによって取得できます。同じ層のニューロン。

  • 畳み込みカーネルは、
    視野内の重み行列を感じます

  • 重みの共有

  • 歩幅(歩幅)
    感覚視野から入力までの走査間隔を歩幅(歩幅)と呼びます

  • 境界拡張 (パッド)
    ステップ サイズが比較的大きい場合 (ストライド>1)、エッジの一部の特徴をスキャンするために、感覚視野が「範囲外」になる可能性があるため、境界拡張 (パッド) が必要です。

  • 畳み込みカーネルを使用した感覚視野スキャンによる特徴マップ
    によって生成されるニューロンマトリックスの次の層は、特徴マップ (feature map) と呼ばれます。
    ここに画像の説明を挿入

ここに画像の説明を挿入
ここで与えられた例は、入力画像 (5 5 3)、畳み込みカーネル (3 3 3)、2 つ (フィルター W0、W1)、および 2 つのバイアス b (Bios b0、b1) があり、畳み込み結果の出力ボリュームです。 (3 3 2)、ストライド = 2。

入力: 7 7 3 は pad = 1 (画像の境界の行と列の両方にゼロが埋められ、ゼロが埋められた行と合計の数が 1) であるためです。

(カラー画像の場合、一般に 3 チャンネルと呼ばれる RGB の 3 色があり、7*7 は画像の高さ h * 幅 w を指します)

、ゼロパディングの役割は、画像境界の特徴を抽出できるようにすることです。

畳み込みカーネルの深さを 3 に設定する必要があるのはなぜですか? これは、入力が 3 チャネルであるため、畳み込みカーネルの深さが入力の深さと同じでなければならないためです。畳み込みカーネルの幅 w については、高さ h を変更できますが、幅と高さが等しくなければなりません。

畳み込みカーネルは o[0,0,0] = 3 (Output Volume の下の明るい緑色のボックスの結果) を出力しますが、この結果はどのように取得されますか? 実際、重要なのは、行列の対応する位置を乗算して加算することです (行列の乗算と混同しないでください)。

=> w0[:,:,0] * x[:,:,0] 青色領域行列 (R チャネル) + w0[:,:,1] * x[:,:,1] 青色領域行列 (G チャネル) ) + w0[:,:,2] * x[:,:,2] 青色領域行列 (B チャネル) + b0 (y = w * x + b であるため、負けないでください)

最初の項目 => 0*1 + 0*1 + 0*1 + 0*(-1) + 1*(-1) + 1*0 + 0*(-1) + 1*1 + 1*0 = 0

第 2 項 => 0 * (-1) + 0 * (-1) + 0 * 1 + 0 * (-1) + 0 * 1 + 1 * 0 + 0 * (-1) + 2 * 1 + 2 * 0 = 2

第三項 => 0*1 + 0*0 + 0*(-1) + 0*0 + 2*0 + 2*0 + 0*1 + 0*(-1) + 0*(-1) = 0

畳み込みカーネル出力 o[0,0,0] = > 最初の項目 + 2 番目の項目 + 3 番目の項目 + b0 = 0 + 2 + 0 + 1 = 3

o[0,0,1] = -5 はどのように取得されますか?

ここではstride = 2なので、入力ウィンドウは赤いボックスの領域である2つのステップをスライドする必要があり、操作は以前と同じです

最初の項目 => 0*1 + 0*1 + 0*1 + 1*(-1) + 2*(-1) + 2*0 + 1*(-1) + 1*1 + 2*0 = - 3

第 2 項 => 0 * (-1) + 0 * (-1) + 0 * 1 + 1 * (-1) + 2 * 1 + 0 * 0 + 2 * (-1) + 1 * 1 + 1 * 0 = 0

第3項 => 0 * 1 + 0 * 0 + 0 * (-1) + 2 * 0 + 0 * 0 + 1 * 0 + 0 * 1 + 2 * (-1) + 1 * (-1) = - 3

畳み込みカーネル出力 o[0,0,1] = > 最初の項目 + 2 番目の項目 + 3 番目の項目 + b0 = (-3) + 0 + (-3) + 1 = -5

次に、この畳み込みカーネル ウィンドウ サイズで入力画像をスライドさせ、畳み込みを行って結果を取得します。畳み込みカーネルが 2 つあるため、2 つの出力結果が得られます。

ここの友人は、出力ウィンドウを取得する方法について質問があるかもしれません。

式は次のとおりです。出力ウィンドウの幅 w = (入力ウィンドウの幅 w - 畳み込みカーネルの幅 w + 2 * パッド)/ストライド + 1、出力の高さ h = 出力ウィンドウの幅 w

上記の例では、出力ウィンドウの幅 w = (5 - 3 + 2 * 1)/2 + 1 = 3 とすると、出力ウィンドウのサイズは 3 * 3 になります。出力が 2 つあるため、3 3 2 となります
ここに画像の説明を挿入

ここに画像の説明を挿入
受容視野には畳み込みカーネルがあります. 受容視野の重み w 行列を畳み込みカーネルと呼びます. 入力に対する受容視野の走査間隔をストライドと呼びます. ステップサイズが比較的大きい (ストライド> 1) エッジの一部のフィーチャをスキャンするために、視野が「範囲外」になる場合があります. この場合、境界拡張 (パッド) が必要であり、境界拡張を次のように設定できます0 またはその他の値。ステップのサイズと境界拡張値はユーザー定義です。

畳み込みカーネルのサイズは、ユーザーによって定義されます、つまり、定義された視野のサイズです; 畳み込みカーネルの重み行列の値は、畳み込みニューラル ネットワークのパラメーターです. オフセット項目を持つために、畳み込みカーネルにはオフセット転置 b を付けることができ、それらの初期値はランダムに生成でき、トレーニングによって変更できます。

感覚視野を畳み込みカーネルでスキャンして生成されるニューロン行列の次の層を特徴マップ(feature map)と呼びます.
ここに画像の説明を挿入
同じ特徴マップ上のニューロンが使用する畳み込みカーネルは同じなので,これらのニューロンは重みを共有し,畳み込みカーネルの重みとそれに付随するオフセットを共有します。特徴マップは畳み込みカーネルに対応します. 3 つの異なる畳み込みカーネルを使用すると、3 つの特徴マップを出力できます: (受容野: 5×5, ストライド: 1)
ここに画像の説明を挿入

1.3 インセンティブ層

励起層は、畳み込み層の計算がまだ線形計算であるため、主に畳み込み層の出力に対して非線形マッピングを実行します。使用されるアクティベーション関数は、一般的に ReLu 関数です。

  • ReLU 関数を使用する理由

y = w * x + b から、活性化関数が使用されていない場合、各ネットワーク層の出力は線形出力であり、実際に私たちがいる実際のシーンは、さまざまな非線形分布であることがわかります。

これは、活性化関数の機能が線形分布を非線形分布に変換することであることも示しています。これは、実際のシーンに近づけることができます。
ここに画像の説明を挿入

  • シグモイド関数の代わりに ReLU 関数を使用する理由

x -> の場合、出力は定数値になります。これは、勾配を求めるときに関数の 1 次偏微分を取得する必要があるためであり、シグモイドであろうと tanhx であろうと、それらの偏微分は 0、つまり、いわゆる勾配があります。消失の問題により、最終的に重みパラメーター w と b が更新されなくなります。対照的に、Relu ではそのような問題はなく、さらに x > 0 の場合、Relu の導出 = 1 となるため、バックプロパゲーションの dw と db の計算が大幅に簡素化されます。

シグモイドを使うと勾配爆発の問題もあります. 例えば, 順伝播と逆伝播の反復回数が多い場合, シグモイドは指数関数であるため, 結果のいくつかの値は反復で累積されてしまいます. exponential. が大きくなり、最終的に NaN とオーバーフローにつながります。
ここに画像の説明を挿入

1.4 プーリング層

ここに画像の説明を挿入

プーリング層は通常、畳み込み層 + Relu の後にあり、その機能は次のとおりです。

1. 入力行列のサイズを縮小し (幅と高さのみ、深さは除く)、主な特徴を抽出します。(プーリング後に機能が一定の損失を被ることは否定できないため、一部のクラシック モデルではプーリング レイヤーが削除されています)。

その目的は明らかで、後続の操作での計算を減らすことです。

2. 一般的には mean_pooling (平均プーリング) と max_pooling (最大プーリング) が使用されます. 入力行列には変換 (translation) と回転 (rotation) があり, 特徴の不変性を保証できます.

mean_pooling は, 入力行列のプーリング領域の平均値を計算することです. ここで, 入力行列をスライドするプーリングウィンドウのステップサイズはストライドに関連することに注意してください. 一般に, ストライド = 2. max_pooling 最大プーリング
ここに画像の説明を挿入
は出力対応位置に各プーリング領域の最大値。
ここに画像の説明を挿入

1.4 全結合層

完全に接続されたレイヤーは、主にフィーチャを再調整してフィーチャ情報の損失を減らします。出力レイヤーは主に、最終的なターゲット結果を出力する準備ができています。たとえば、VGG の構造図を次の図に示します。

1.5 正規化レイヤー

  • バッチ正規化

Batch Normalization (バッチ正規化) は、ニューラル ネットワーク層の途中で前処理操作を実現します。つまり、前の層の入力は、ネットワークの次の層に入る前に正規化されます。これにより、「勾配分散」を効果的に防ぐことができます。ネットワークトレーニングを高速化します。
バッチ正規化の具体的なアルゴリズムは下の図に示されています:
ここに画像の説明を挿入
トレーニングのたびに、batch_size サイズのサンプルがトレーニングのために取得されます. BN 層では、ニューロンは特徴と見なされ、batch_size サンプルは、batch_size の値を持つことになります次に、各ニューロンの xi 次元でこれらのサンプルの平均と分散を実行し、式を通じて xi∧ を取得し、パラメータ γ と β を通じて線形マッピングを実行して、それぞれの対応する出力 yi を取得します。ニューロン。BN レイヤーでは、各ニューロンの次元にパラメーター γ と β があり、重み w と同様にトレーニングによって最適化できることがわかります。

畳み込みニューラル ネットワークでバッチ正規化を実行する場合、通常、ReLu によってアクティブ化されていない特徴マップはバッチ正規化され、出力は励起層の入力として使用されます。これにより、部分的な調整の効果が得られます。励起関数の導関数。

1 つのアプローチは、特徴マップ内のニューロンを特徴次元として使用することです。パラメーター γ と β の合計は 2×fmapwidth×fmaplength×fmapnum に等しいため、パラメーターの数は多くなります。

別のアプローチは, 特徴マップを特徴次元と見なすことです. 特徴マップ上のニューロンは, この特徴マップのパラメータ γ と β を共有します. パラメータ γ と β の合計は 2×fmapnum に等しく, 平均と分散はbatch_size トレーニング サンプルの各特徴マップ ディメンションの平均と分散として計算されます。

注: fmapnum はサンプルの特徴マップの数を指し、特徴マップにはニューロンのような特定の順序があります。

バッチ正規化アルゴリズムのトレーニング プロセスとテスト プロセスの違い:

トレーニング プロセス中、バッチ サイズの数のトレーニング サンプルを毎回トレーニングのために CNN ネットワークに入れます。出力の計算に必要な平均と分散は、BN レイヤーで自然に取得できます。

テスト プロセスでは、多くの場合、1 つのテスト サンプルのみを CNN ネットワークに入力します。つまり、サンプル入力が 1 つしかないため、BN 層で計算される平均と分散は 0 になります。したがって、BN 層の入力も非常に大きく表示される. CNN ネットワークの出力にエラーを引き起こす問題. したがって、テスト プロセスでは、トレーニング セットのすべてのサンプルが BN レイヤーで正規化されるときに、各次元の平均と分散を使用する必要があります. もちろん、計算の便宜上、BN で各 batch_num 回正規化できます層 正規化するときは、各次元の平均と分散を加算し、最後に平均を再度計算します。

  • 局所応答の正規化

Local Response Normalization の正規化方法は、主に (ReLu の後) 異なる隣接する畳み込みカーネルの出力間で発生します。つまり、入力は ReLu 後に異なる特徴マップで発生します。

LRN の式は次のとおりです。

b(i,x,y)=a(i,x,y)(k+α∑min(N−1,i+n/2)j=max(0,i−n/2)a(j, x,y)2) β

その中で、
a(i,x,y) は、i 番目の畳み込みカーネルの出力の (ReLu レイヤーを介した) 特徴マップ上の (x, y) 位置の値を表します。
b(i,x,y) は、LRN 後の a(i,x,y) の出力を表します。
N は畳み込みカーネルの数、つまり入力特徴マップの数を表します。
n は、自分で決定した近傍の畳み込みカーネル (または特徴マップ) の数を表します。
k、α、β はハイパーパラメータであり、ユーザーによって調整または決定されます。

BNとの違い:BNはミニバッチのデータに基づいており、近隣の正規化はそれ自体で決定する必要があるだけです.BNトレーニングには学習パラメータがあります.BN正規化は主に異なるサンプル間で発生し、LRN正規化は主に異なるサンプル間で発生します.異なるサンプル 畳み込みカーネルの出力の間。

2. CNN アプリケーション シナリオ

畳み込みニューラル ネットワークのアプリケーションは重要ではなく、データ予測と画像処理の 2 つの主要なカテゴリがあります。当然のことながら、データ予測についてこれ以上言う必要はありません. 画像処理には、主に画像の分類、検出、認識、およびセグメンテーションへのアプリケーションが含まれます。

  • 画像分類: シーン分類、オブジェクト分類

  • 画像検出: 顕著性検出、オブジェクト検出、セマンティック検出など

  • 画像認識:顔認識、文字認識、ナンバープレート認識、行動認識、歩行認識など

  • 画像セグメンテーション: 前景セグメンテーション、セマンティック セグメンテーション


参考:

おすすめ

転載: blog.csdn.net/Mason_Chen/article/details/110305156