AIチップ畳み込みニューラルネットワークの原理

AIチップ畳み込みニューラルネットワークの原理

[[319839]]

畳み込みニューラル ネットワーク (CNN) は、人工ニューロンが特定のカバレッジ領域内の周囲のユニットに応答でき、大規模な画像処理で優れたパフォーマンスを発揮するフィードフォワード ニューラル ネットワークです。 畳み込み層とプーリング層で構成されています。

比較: 畳み込みニューラル ネットワーク、完全接続ニューラル ネットワーク

左: 入力層、活性化関数、完全接続層で構成される完全接続ニューラル ネットワーク (平面)

右: 畳み込みニューラル ネットワーク (ステレオ)。入力層、畳み込み層、活性化関数、プーリング層、完全結合層で構成されています。

畳み込みニューラルネットワークには重要な概念がある。それは深さである。

畳み込み層

畳み込み: 元の入力の特徴を抽出します。簡単に言うと、特徴抽出とは、元の入力の小さな領域から特徴を抽出することです。畳み込み計算プロセスについては後で詳しく説明します。

上図では、左側のブロックが入力レイヤーで、サイズが 32 x 32 の 3 チャンネル画像です。右側の小さな四角は、サイズが 5 x 5、深度が 3 のフィルターです。入力層を複数の領域に分割し、固定サイズのヘルパー フィルターを使用して入力層に対して操作を実行し、最終的に深度 1 の特徴マップを取得します。

上の図は、畳み込みには通常複数のフィルターが使用され、最終的に複数の特徴マップが得られることを示しています。

上図では、6 つのフィルターを使用して畳み込みを実行し、特徴抽出を行い、最終的に 6 つの特徴マップを取得します。これら 6 つのレイヤーを積み重ねると、畳み込みレイヤーの出力が得られます。

畳み込みは、元の入力に対する畳み込みに限定されません。青い四角は、元の入力に対して 6 つのフィルターを使用して 6 つの抽出された特徴マップを取得する畳み込み演算です。緑のブロックは、10 個のフィルターを使用して青のブロックに対して畳み込み演算を実行し、10 個の特徴マップを取得することもできます。各フィルターの深度は、前のレイヤー入力の深度と同じである必要があります。

畳み込みの直感的な理解

上の写真を例に挙げます。

最初の畳み込みでは低レベルの特徴を抽出できます。

2 番目の畳み込みでは、中レベルの特徴を抽出できます。

3 番目の畳み込みでは、高レベルの特徴を抽出できます。

特徴は継続的に抽出され、圧縮され、最終的にはより高レベルの特徴が得られます。つまり、元の特徴が段階的に凝縮され、最終的に得られる特徴はより信頼性の高いものになります。最後の特徴層は、分類、回帰などのさまざまなタスクに使用できます。

畳み込み計算プロセス

左側の領域にある 3 つの大きな行列は、元の画像の入力です。3 つの RGB チャネルは、サイズが 7*7*3 の 3 つの行列で表されます。

フィルター W0 は、サイズが 3*3、深さが 3 (3 つの行列) のフィルター ヘルパーを表します。フィルター W1 もフィルター ヘルパーを表します。畳み込みで 2 つのフィルターを使用したため、畳み込み層の結果の出力深度は 2 になります (緑のマトリックスが 2 つあります)。

バイアス b0 はフィルタ W0 のバイアス項であり、バイアス b1 はフィルタ W1 のバイアス項です。

OutPut は畳み込み後の出力で、サイズは 3*3、深さは 2 です。

計算プロセス:

入力は固定され、フィルターが指定されているので、計算は緑のマトリックスを取得する方法です。

最初のステップは、入力行列にフィルターと同じサイズのスライディング ウィンドウを作成し、スライディング ウィンドウ内の入力行列の部分をフィルター行列の対応する位置で乗算することです。

つまり、対応する位置と掛け合わせて合計すると、結果は0になります。

つまり、対応する位置を掛けて合計すると、結果は2になります。

つまり、対応する位置と掛け合わせて合計すると、結果は0になります。

2 番目のステップでは、3 つの行列の結果を合計し、バイアス項 (0+2+0+1=3) を追加します。これにより、出力行列の左上隅に 3 が表示されます。

3 番目のステップでは、各フィルターにこの操作を実行させて最初の要素を取得します。

ステップ4: ウィンドウを2ステップスライドし、前の手順を繰り返して計算します。

5 番目のステップでは、最終的に 2 つのフィルターによる畳み込み後に生成された深さ 2 の出力結果を取得できます。

考える

①スライドごとにグリッドが2つあるのはなぜですか?

滑るステップの長さはストライドと呼ばれ、S で表されます。 S が小さいほど、より多くの特徴が抽出されますが、主に時間効率の問題を考慮すると、S は一般に 1 にはなりません。 S は大きすぎると画像上の情報が失われる恐れがあります。

② フィルタの辺の長さがSより大きいため、スライディングウィンドウの移動ごとに交差が発生します。交差は複数の特徴抽出を意味しますが、特に画像の中央領域では抽出数が多く、端の抽出数が少ないです。どうすればいいですか?

一般的な方法は、画像の周囲に 0 の円を追加することです。注意深い生徒は、この 0 の円がデモケース、つまり +pad 1 に追加されていることに気付いたかもしれません。 +pad n は、0 の円を n 個追加することを意味します。

③畳み込み後の出力特徴マップのサイズはどれくらいですか?

出力を計算してください=?

注: 畳み込み演算には複数のフィルターを使用できますが、フィルターのサイズは同じである必要があります。

畳み込みパラメータ共有の原則

畳み込みニューラル ネットワークには、重み共有という非常に重要な機能があります。

いわゆる重み共有とは、入力画像が与えられた場合、フィルターを使用して画像をスキャンすることを意味します。フィルター内の数字は重みと呼ばれます。画像の各位置は同じフィルターによってスキャンされるため、重みは同じになり、共有されていることを意味します。

プーリング層

上の図は、プーリングが特徴マップを圧縮することを示しており、プーリングはダウンサンプリングとも呼ばれます。特定のエリアの最大値または平均を選択してそのエリアを置き換えると、そのエリア全体が集中化されます。以下はプーリング操作を示しています。フィルター サイズ、ストライド、プーリング方法 (最大または平均) を指定する必要があります。

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

畳み込み - 活性化 - 畳み込み - 活性化 - プーリング - ... - プーリング - 完全接続 - 分類または回帰

順方向伝播と逆方向伝播

畳み込み層の順方向伝播プロセスについては、以前に説明しました。これを復習するための図を以下に示します。

畳み込み層のバックプロパゲーションのプロセスについて次に説明します。

バックプロパゲーションの目的: パラメータ w を更新します。したがって、最初に dJ/dw を計算する必要があります。勾配 dJ/dout が前の層から渡されると仮定すると、連鎖律によれば、dJ/dw = dJ/dout * dout/dw = dJ/dout * x となります。コンピュータの変数名の付け方の都合上、図のように dJ/dout は dout と記録され、dJ/dw は dw と記録されます。この表記法は後でも使用されます。

まず、dw と w は同じサイズであることは明らかです。点に面積を掛けても面積が得られます。次に、バックプロパゲーションのプロセスは、dout の要素に入力層ウィンドウの行列を乗算して dw 行列を取得し、次にウィンドウをスライドして次の dw を計算し続け、最後に取得した複数の dw を合計し、w = w - dw を実行してバックプロパゲーションの計算を完了することと同等です。

上記のバックプロパゲーションでは、1 つのフィルターのパラメータを更新できますが、他のフィルターも必要になります。

2 つの異なるプーリング プロセス (プーリング層の順方向伝播) を図で見てみましょう。

プーリング層でバックプロパゲーションを行う場合、最大プーリング法と平均プーリング法でも異なる方法を採用します。

マックスプーリングでは、順方向計算時に、2×2の各領域内の最大値が選択されます。ここで、各小領域内の最大値の位置を記録する必要があります。バックプロパゲーション中は、最大値のみが次のレイヤーに寄与するため、残差は最大値の位置に渡され、領域内の他の 2*2-1=3 の位置はゼロに設定されます。具体的な処理は以下のとおりで、4×4行列内のゼロ以外の位置は、先に計算した各小領域の最大値の位置となります。

平均プーリングでは、残差を 2*2=4 の部分に分割し、前方の小さな領域にある 4 つのユニットに渡す必要があります。具体的なプロセスは図に示されています。

畳み込みネットワークアーキテクチャの例

VGGNet は、畳み込み層とプーリング層を多数備えており、はるかに深い構造になっています。 1 つのバージョンには 16 層があり、もう 1 つのバージョンには 19 層があります (より一般的に使用されています)。

VGGNetの特徴:

フィルターは 3*3 のみなので、より多くの機能が計算され、粒度がより細かくなります。同時に、プーリングのパラメータも固定されます。

注: 従来、畳み込みニューラル ネットワーク層の数が増えても、必ずしも結果が良くなるわけではありません。 2016 年には、152 層のディープ残差ネットワークが導入されました。詳細は後ほど紹介します。

では、VGGNet をトレーニングするにはどれくらいのメモリ オーバーヘッドがかかるのでしょうか?

図からわかるように、トレーニング プロセス中、224*224*3 の画像には 138M のパラメーターが含まれ、93MB のメモリが占​​有されます。したがって、各バッチ内の画像の数はメモリによって制限される必要があります。つまり、93 * 画像数 < 合計メモリ容量です。

<<:  人工知能とデザインの未来

>>:  1 つの記事で NLP 実装の難しさを理解する

推薦する

...

...

効率が1200倍にアップ! MIT、医薬品製造向けの新たなAIモデルを開発

海外メディアTech Xploreによると、MITの研究者らは最近、新しいタンパク質分子の構造を事前...

...

Linux オブジェクトアロケータ スラブアルゴリズム

[[414991]]この記事はWeChatの公開アカウント「Linux Kernel Things」...

...

...

JavaScript アルゴリズムを使用するための 6 つの実用的なヒント

[[208068]] 1. 2つの数値を入れ替える通常、2 つの数値の値を交換する方法としては、新し...

...

TensorFlow 機械学習の初心者向けガイド: 線形回帰を実装するには?

TensorFlow 入門記事: 初心者でも理解できる TensorFlow 入門小学校で受けた理...

ドローン自動化システムの産業への応用を探る

世界中の企業は、競合他社に対して競争上の優位性を獲得するのに役立つ高度なテクノロジーを常に探していま...

落とし穴を避けよう!ニューラルネットワークの欠点と短所を数え上げよう

最近、ディープラーニングが大々的に宣伝されており、人々はニューラル ネットワークをあらゆる場所で使用...

ディープラーニングとマシンビジョンの重要性を分析!ロボットを自由にさせる?

ディープラーニングは産業用ロボットの中核技術であり、ロボットが制約から解放され、環境の変化に応じて自...

ディープ ニューラル ネットワークを構築するための 20 の「未熟な」ヒント

当社の機械学習ラボでは、数多くの高性能マシンで何万時間ものトレーニングを行って豊富な経験を蓄積してき...

Googleのエンジニアリングディレクターがアルゴリズム改善の背後にある数字を明らかに

Google は検索の問題を解決したと多くの人が考えていますが、Google の観点から見ると、検索...