CNN畳み込みニューラルネットワークの基礎知識に関するメモ

1. 畳み込みニューラルネットワーク(CNN)の開発経緯

  • 1986 年、Runmelheart と Hinton らは、逆伝播アルゴリズム (Back Propagation、BP) を提案しました。
  • 1998 年、LeCun は BP アルゴリズムを使用して LeNet5 ネットワークをトレーニングし、CNN の本当の姿を示しました (ただし、現時点のハードウェア レベルではネットワークをトレーニングするのは困難です)。
  • 2006 年、ヒントンは科学論文でディープ ラーニングの概念を初めて提案しました。
  • 2012 年、ヒントンの学生であるアレックス クリジェフスキーは、寮内で GPU を使用してディープ ラーニング モデルをマスターし、視野競技会 ILSVRC 2012 で一気に優勝しました。100 万レベルの ImageNet データ セットでは、その効果はそれを大きく上回りました。従来の方法の (70% 以上 -> 80% 以上)

  学習ビデオはステーション b: 上: からのものです。

Thunderbolt Wz のパーソナルスペース_哔哩哔哩_bilibili

2. 全結合層

全結合層は、多くのニューロンを結合することによって得られます。

  • x1、x2、x3 はこのニューロンの 3 つの励起であり、w1、w2、w3 はこれら 3 つの励起に対応する重みです。
  • -1 はこのニューロンのバイアスです

 1. バックプロパゲーション(BP)

BP アルゴリズムには、信号の順伝播エラーの逆伝播という2 つのプロセスが含まれます。つまり、誤差出力を計算する場合は「入力→出力」の方向に進み、重みや閾値を調整する場合は「出力→入力」の方向に進みます。

 例: BP ニューラル ネットワークを使用したナンバー プレート番号認識

 1. まずカラー RGB 画像を読み取ります。各ピクセルには 3 つの値 (RGB コンポーネント) が含まれています

  • まずグレースケール化します (中央の画像を取得します)。各ピクセル値には 1 つのコンポーネントのみが含まれます。
  • その後、二値化処理を行って白黒画像を取得します。

 2. 5 行 3 列のスライディング ウィンドウを使用して、2 値化された白黒画像上をスライドし、任意の場所にスライドするたびに、スライディング ウィンドウ全体でカバーされるピクセルに対するスライディング ウィンドウ内の白いピクセルの割合を計算します。

  • スライディングウィンドウが右端にスライドした場合は列数が足りませんのでゼロパディングや判定を行ってください スライディングウィンドウが境界を越えそうになったら一時的に5行のスライディングウィンドウにして、 2列のウィンドウ
  • この方法で画像全体を走査すると、5*5 の行列が得られます。

 3. 結果の 5*5 行列を行ごとに拡張し、行ベクトル (1 行、25 列) に結合します。これにより、この行ベクトルがニューラル ネットワークの入力層として使用できるようになります。

4. 入力層が確立されたら、出力層を確認します。ワンホット エンコーディングはタグをエンコードするために一般的に使用される方法です 

  • 上の図は、0 から 9 までの各数字に対応するワンホット エンコーディングを繰り返しなしで示しています。

 5. 入力と出力を行った後、ニューラル ネットワークをトレーニングできます。実際の学習プロセスでは、実際の状況に応じて、入力層の入力ノード数を 25 に設定し、出力層の出力ノード数を 10 に設定し、中間に隠れ層を設定します。

2. 畳み込み層

畳み込み層は畳み込みニューラル ネットワークにおける独特のネットワーク構造です 

コンボリューション: スライディング ウィンドウが特徴マップ上でスライドし、計算されます (コンボリューション カーネルの値と特徴マップの値を乗算し、それらを加算して最終行列の値を取得します。各スライディング ステップで値が計算され、最後に畳み込み結果を取得します) 

 コンボリューションの計算方法:上図左側のオレンジ色の枠内の通り       

(1*1)+(0*0)+(0*1)+(1*0)+(1*1)+(0*0)+(1*1)+(1*0)+(1 *1) = 4

畳み込みの目的は画像の特徴を抽出することです

コンボリューションの特徴

  • ローカル認識メカニズムを備えています。スライディング計算はスライディング ウィンドウの形式で特徴マップ上で実行されるため、ローカル認識機能があります。
  • 重み共有:スライディング処理中、コンボリューションカーネルの値は変化しないため、重み共有の特性を持ちます。

1.重み共有の利点 (BP ニューラル ネットワークとの比較)

  • ここでのパラメータはニューロンの重みを指します。
  • 重みを共有すると、畳み込みニューラル ネットワークのパラメータの数が大幅に削減されます。

2. 畳み込みのプロセス 

実際のアプリケーションでは、畳み込み演算は多次元特徴行列に対して実行されることがよくあります。

畳み込みカーネルの深さは入力特徴行列と一致している必要があり (ここでの深さはチャネル、つまりチャネルの数を指します)、それらはすべて 3 次元です。畳み込みによって得られる最終行列は 3 です。チャネル入力特徴行列と 3 チャネルの畳み込みカーネルはそれぞれ畳み込みに対応し、対応する加算後に畳み込み行列が得られます。

 3. まとめ

1. コンボリューション カーネルのチャネルは入力フィーチャ レイヤーのチャネルと同じです (3 つのチャネルとも)

2. 出力特徴行列チャネルはコンボリューション カーネルの数と同じです (2 チャネルの出力特徴行列は、コンボリューション カーネル 1 とコンボリューション カーネル 2 を介して最終的に取得されます)

4.考える

(1) オフセットバイアスが加わった場合の計算方法は?

最終的な畳み込みによって得られた行列の各要素とオフセットを加算するだけです

 (2) 活性化関数はどのように計算するのですか?

一般的に使用されるアクティベーション関数

  • アクティベーション関数を使用する理由 線形計算プロセスに非線形要素を導入し、非線形問題を解決できるようにします。
  • Relu アクティベーション関数は、実際にはすべての負の値を除外し、正の値のみを変更せずに残します。これは実際のアプリケーションでよく使用されます。
  • 誤差を逆伝播する過程で、シグモイド活性化関数を使用すると、導関数の解法が非常に面倒になります
  • Relu 活性化機能を使用する場合、ウェイトは一度非活性化状態になると再度活性化することができないため、学習プロセス中、最初は特に大きな学習率を使用しないことをお勧めします。多数のニューロンの不活性化。

(3) 畳み込みプロセス中に範囲外の状況が発生した場合はどうすればよいですか?

 

  • 通常の状況では、パディングを使用して、処理する画像の周りに直接ゼロを埋め込むことができます。ゼロ パディング後は、範囲外の状況になることなく畳み込みを通常どおり実行できます。

 

  • パディングのピクセル p: 一般に、実際のアプリケーション プロセスでは、両側が同時にゼロで埋められます。つまり、左右上下が対称です。ゼロ パディング操作
  • 上の図では片側だけを補っているので、pを付けるだけで十分です
  • N = ( 4 - 3 + 1 )/ 2 + 1 = 2 なので、最終的には 2*2 の特徴行列になります。

3. プーリング層

 プーリング層の目的は、特徴マップをまばらに処理し、データ計算量を削減することです。

maxpooling downsampling : プーリング コアの対応する範囲内で最大値を見つけて、最大ダウンサンプリング操作を実行します。 

Averagepooling Downsampling Layer : プーリング コアの対応する範囲内の平均値を見つけて、平均ダウンサンプリング操作を実行します。 

プーリング層の特徴

1. トレーニング パラメーターはありませんが、最大値または平均値を見つける操作は元の特徴マップに対して実行されます。

2. 特徴行列の幅 (w) と高さ (h) のみが変更され、深さ (チャネル) は変更されません。

3. 一般に、プーリング カーネルのサイズ (poolsize) とストライド (stride) は同じであり、特徴マップを一定の割合で縮小して、計算をより便利にすることができます (これは一般的なケースにすぎず、そうではありません)絶対)

4. 誤差の計算

3層BPニューラルネットワークを使って説明する

 パラメータ:

  • 最初の層: 入力層: 2 つのノード    \巨大な\chi_{1}   と   \巨大な\chi_{2}
  • 第 2 層: 隠れ層: 3 つのノードは    \巨大な\シグマ活性化関数であり、\巨大な\オメガ_{11}^{(1)}   その   \巨大な\オメガ_{21}^{(1)}  合計が対応する重み\巨大な b_{1}^{(1)}とバイアスになります。

中間ノードを例として計算します。 

\巨大なy_{1}  同様に合計  \巨大なy_{2}  の値を 求めます  

 

1. ソフトマックス活性化関数の計算過程

 Softmax アクティベーション関数を使用する理由

理由:出力の   合計が確率分布に一致する\巨大なy_{1}  ことを  期待します。\巨大なy_{2}

 

2.クロスエントロピー損失、クロスエントロピー損失関数

1. 多分類問題の場合 (ソフトマックス出力、すべての出力確率の合計は 1)

\huge H=-\sum _{i} o _{i}^{*} log(o_{i})

2. 2 つの分類問題 (シグモイド出力、各出力ノードは互いに無関係)

\LARGE H=-\frac{1}{N}\sum_{i=1}^{N} [ o_{i}^{*}log o_{i}+(1-o_{i}^{*} )log(1- o_{i})]

ソフトマックス出力の使用は確率出力と一致します (すべての確率の合計は 1)。
シグモイド出力の使用は確率出力と一致しません。

この式より、クロスエントロピーを用いた損失の計算式が得られます。

 

5.誤差の逆伝播

 誤差勾配を計算します   \巨大な\オメガ_{11}^{(2)}  (偏導関数を求めます)。 

黄色のボックス内の偏導関数を個別に計算します。

 

 得られる値は、誤差を各ノードに逆伝播し、各ノードの損失勾配を取得することに相当します。

 

6. 体重の更新

重みを更新するための式は非常に簡単ですが、探している勾配の方向が損失を最も速く減らす方向 であるかどうかはわかりません

 

実際の学習では、学習用のバッチを設定することがよくあります。各バッチの学習後、バッチの損失と勾配が計算されます。勾配はありますが、この勾配はこのバッチにとって最適です。これは必ずしも当てはまりません。データ全体。そこで、バッチ トレーニングで勾配をより適切に更新するために、オプティマイザー (optimizer) の概念が導入されます。 

 

7. オプティマイザー

 

次の最適化を行います: 勢いの部分をもう 1 つ追加します。

現在のバッチの勾配の計算に加えて、前のバッチの勾配も追加されます。

 \LARGE g_{(t+1)} はこのバッチの勾配、\LARGE g_{(t)}は前のバッチの勾配、\LARGE g_{(t+1)}^{*} およびこのバッチの実際に更新された勾配です。

 勢いを加えることで、サンプルノイズの干渉を効果的に抑制できます。

 

このオプティマイザーにより、学習率が向上します。 

 バッチが進むにつれて   \large \frac{\alpha }{\sqrt{S_{t}+\varepsilon }}  最終的にはどんどん小さくなっていきます → 更新の強度がどんどん小さくなっていることを意味しており、更新に使われる学習率も徐々に小さくなっているように見えます。

短所: 学習率の低下が速すぎるため、収束する前にトレーニングが停止する可能性があります。

学習率も調整し、Adagrad オプティマイザーの改良版です。Adagrad オプティマイザーと比較すると、RMSProp は実際に 2 つの係数を追加して学習率の減衰を制御します。 

 

 

6. いくつかのオプティマイザーの効果の比較 

 

  • SGD は遅いですが、勾配更新の方向は理想的です。
  • Momentum を搭載した SGD はスタートが悪かったものの、すぐに正しい道を見つけました
  • Adagrad と RMSProp は方向が正しいだけでなく、高速です
  • Adam オプティマイザーの効果はここでは示されていません。

 

実際のプロジェクトでは、より一般的に使用されるものは次のとおりです。

  1. 勢いのあるシンガポールドル
  2. アダム

Adam オプティマイザーの方が良い結果が得られるため、Adam オプティマイザーを使用することを選択する人も多いかもしれませんが、論文では依然として SGD オプティマイザーを勢いよく使用している著者が多く、選び方は依然として実情に依存します

おすすめ

転載: blog.csdn.net/weixin_45897172/article/details/128345978