2020-12-09深層学習畳み込み神経ネットワーク構造分析

1.構造の概要

まず、従来のニューラルネットワークによる画像の処理を分析します。CIFAR-10で画像を使用する場合、合計3072の機能があります。通常のネットワーク構造を入力すると、第1層の各ニューラルユニットの重みは3072になります。ピクセルの画像を入力した後、さらに多くのパラメータがあり、画像処理に使用されるネットワークの深さは通常10層を超えます。これらを合わせると、パラメータの量が多すぎて、パラメータが多すぎるとオーバーフィットが発生し、画像にも独自の要素があります。機能、これらの機能を使用して従来のネットワークを改革し、処理速度と精度を向上させる必要があります。
画像のピクセルが3つのチャネルで構成されていることに気付きました。この機能を利用して、以下に示すように、画像の32x32x3(CIFARを例として)に対応する3次元空間(幅、高さ、奥行き)にニューロンを配置しました。 :
ここに写真の説明を書いてください
赤は深さが3の入力レイヤーで、出力レイヤーは1x1x10構造です。他のレイヤーの意味は後で紹介しますが、各レイヤーが高さ×幅×奥行きの構造を持っていることが最初にわかりました

2.畳み込み神経ネットワーク層

畳み込みニューラルネットワークには、畳み込み層、プーリング層、および完全に接続された層(畳み込み層、プーリング層、および完全に接続された層)の3つの層があります。
例として、CIFAR-10畳み込みニューラルネットワークを取り上げます。単純なネットワークには、次のレイヤーが含まれている必要があります。
[INPUT-CONV-RELU-POOL-FC]は、[input-convolution-activation-pooling-classificationスコア]です。レイヤーは次のように説明されます。

  • INPUT [32x32x3]入力長32幅32画像、3チャンネル
  • CONV:画像のローカルエリアを計算します.12個のフィルターフリッターを使用する場合、そのボリュームは[32x32x12]になります。
  • RELU:それはまだ励起層max(0、x)であり、サイズはまだ([32x32x12])です。
  • プール:画像の(幅、高さ)に沿ってサンプリングし、長さと幅の寸法を減らします。たとえば、結果は[16x16x12]になります。
  • FC(つまり完全接続)は、分類スコアの最終サイズが[1x1x10]であると計算し、このレイヤーは完全に接続され、各ユニットは前のレイヤーの各ユニットに接続されます。

注:
1。ボリュームとニューラルネットワークには異なるレイヤーが含まれます(たとえば、CONV / FC / RELU / POOLも最も一般的です)
2。各レイヤーは最後のレイヤーを除いて3D構造データを入力および出力します
3.一部のレイヤーはそうではない場合がありますパラメータ、一部のレイヤーにはパラメータがある場合があります(たとえば、CONV / FCがあり、RELU / POOLにはありません)
4。一部のレイヤーにはハイパーパラメータがあり、一部のレイヤーにはハイパーパラメータがない場合があります(たとえば、CONV / FC / POOLがある、RELUにはありません)
下の図は一例です。3次元で表現することはできず、1つの列にしか展開できません。
ここに写真の説明を書いてください
各レイヤーの具体的な詳細については、以下で説明します。

2.1畳み込み層

畳み込み層は、畳み込みニューラルネットワークのコア層であり、計算効率が大幅に向上します。
畳み込み層は多くのフィルタで構成され、各フィルタはごく一部だけ、それだけで元の画像の小さな部分に接続されるたびに持って、UFLDLの写真は:
ここに写真の説明を書いてください
これは、スライドし続けフィルタの結果であり、
私たちはここにさらに深く説明すると、入力する画像は3次元であるため、各フィルターにも3つの次元があります。フィルターが5x5x3であるとすると、上の画像のアクティベーション値と同様のマッピング、つまり畳み込みも取得されます。下図では、この特徴をアクティビションマップと呼び、その計算方法はwT×x + bwT×x + bです。ここで、wは5x5x3 = 75データで、調整可能な重みです。
複数のフィルターを使用できます。

ここに写真の説明を書いてください
さらに深く進むと、スライドするときに3つのハイパーパラメーターがあり
ます。1。深さ、深さ。フィルターの数によって決まります。
2.ストライド、ストライド、各スライドの間隔、上記のアニメーションは一度に1つの数字のみをスライドします
つまり、ステップ長は1です。3。ゼロパディング、ゼロパディングの数は、必要に応じて、ゼロを使用します。画像の領域を拡大します。ゼロの数が1の場合、長さは+2になります。
ここに写真の説明を書いてください
の図の灰色の部分は補数のゼロです。以下は1次元の例です:
ここに写真の説明を書いてください
出力スペースの寸法の計算式は次のとおりです。

(W-F + 2P)/ S + 1(W-F + 2P)/ S + 1


ここで、wは入力のサイズ、fはフィルターのサイズ、pはゼロパディングのサイズ、sはステップサイズです。この図では、ゼロパディングが1の場合、出力は5桁、ステップサイズは2、出力は3桁です。これ
まで神経のすごいという概念は関与していなかったようですが 、神経学的な観点から理解してい
ます。上記の各活性化値は次のとおりです。wT×x + bwT×x + b、この式は私たちによく知られています。これはニューロンのスコアリング式であるため、各アクティベーションマップをフィルターの傑作と見なすことができます.5つのフィルターがある場合、5つの異なるフィルターが同時に1つのパーツに接続されます。
畳み込みニューラルネットワークには、もう1つの重要な機能があります。重みの共有同じフィルター上の異なるニューラルユニット(スライドウィンドウ)の 重みは同じです。これにより、ウェイトの数が大幅に削減されます。
このように、各レイヤーの重みは同じであり、各フィルター計算の結果は畳み込みになります(バイアスbは後で追加されます)。
ここに写真の説明を書いてください
これは、畳み込みニューラルネットワークの名前のソースでもあります。
下の図は間違っています。公式ウェブサイトhttp://cs231n.github.io/convolutional-networks/#convを参照 し、エラーを見つけて、畳み込みの動作原理を理解してください。

ここでは、各フィルターの重量wを3つの部分に変更していますが、ニューロンではwx + bの形式が引き続き使用されています。
-逆伝播:この種の畳み込みの逆伝播は依然として畳み込みであり、計算プロセスは比較的単純です
-1x1畳み込み:ネットワーク内の最初のネットワークなど、一部の記事では1 * 1畳み込みを使用 しますこれにより、複数の内部積を効果的に実行できます。入力には3つのレイヤーがあるため、各レイヤーには少なくとも3つのwsが必要です。
つまり、上記の動的グラフのフィルターが1x1x3に変更されます。-膨張した畳み込み。最近、研究が行われています( たとえば、 FisherYuとVladlenKoltun)は、畳み込み層にハイパーパラメータを追加しました:拡張。これはフィルターのさらなる制御です。効果をオンにしましょう。膨張が0に等しい場合、畳み込みw [0] x [0] + w [1] x [1] + w [2] x [2];膨張を計算します。 = 1の場合、次のようになります。w[0] x [0] + w [1] x [2] + w [2] x [4];つまり、処理する各画像は1で区切られます。これにより、より少ないレイヤーを使用して空間情報を融合できます。たとえば、最上層に2つの3x3 CONVレイヤーを使用します。これは、5x5(有効な受容フィールド)の役割を果たす2番目のレイヤーです。拡張畳み込みを使用する場合、これは効果的です。受容フィールドは指数関数的に成長します。

 

2.2プーリングレイヤー

以上のことから、畳み込み層以降の結果はまだ多く、スライディングウィンドウの存在により多くの情報が重なり合っているため、畳み込み層で得られた結果を重なり合うことなく複数のポイントに分割するプーリング層があります。パーツを選択してから、各パーツの最大値、平均値、2ノルム、またはその他の
ここに写真の説明を書いてください
任意の値を選択します。例として、最大値を含む最大プールを取り上げましょう。-逆伝播:最大値の勾配が以前に反転されましたその効率は、バックプロパゲーション中に改善されますので、ここでは、一般的に最大活性値を追跡し、伝播するとき、私はすでにそれを学んだ。
プーリングを取り除く-Getting。一部の人々はそのプールのような、不必要だと思うすべての畳み込みネット 多くの人が、生成モデルにとってプーリング層は重要ではないと考えています。プーリング層は、将来の開発で徐々に減少または消失する可能性があるようです。

2.3その他のレイヤー

  1. 正規化レイヤー以前は、人間の脳の抑制効果をシミュレートするために正規化レイヤーが使用されていましたが、徐々に役に立たないと思うので、あまり使用しません。このペーパーでは、AlexKrizhevskyのcuda-convnetライブラリAPIの役割を紹介します。
  2. 完全に接続されたレイヤー、この完全に接続されたレイヤーは、以前に学習したものと同じです。前述のように、最終的な分類レイヤーは完全に接続されたレイヤーです。

2.4FCレイヤーからCONVレイヤーへの変換

異なる接続方法を除いて、完全に接続されたレイヤーと畳み込みレイヤーは、相互に変換できる内部積で計算され
ます。1。FCがCONVレイヤーの作業を行う場合、そのマトリックスのほとんどの位置が0(スパースマトリックス)であることに相当します。
2. FCレイヤーをCONVレイヤーに変換すると、各レイヤーの部分接続がすべてのリンクになるのと同じです。たとえば、K = 4096のFCレイヤーの入力が7×7×512の場合、対応する畳み込みレイヤーはF = 7、Pになります。 = 0、S = 1、K = 4096出力は1×1×4096です。
例:
cnnが224x224x3の画像を入力し、いくつかの変更を行った後、レイヤーが7x7x512を出力するとします。その後、2つの4096FCレイヤーと最後の1000FCを使用して分類スコアを計算します。以下は、これら3つのfcレイヤーをConvに変換するプロセスです:
1 F = 7のconvレイヤーの出力は[1x1x4096]; 2。F
= 1のフィルターが使用され、出力は[1x1x4096];
3. F = 1のconvレイヤー使用され、出力は[1x1x1000]です。

変換するたびに、FCパラメーターがconvパラメーター形式に変換されます。変換されたシステムでより大きな画像が渡されると、計算は非常に早送りされます。たとえば、上記のシステムに384x384の画像を入力すると、最後の3つのレイヤーの前に[12x12x512]の出力が得られ、上記で変換されたconvレイヤーは[6x6x1000]、((12-7)/ 1 + 1 = 6)を取得します。ワンクリックで6x6の分類結果が得られました。
これは、元の36回の反復よりも高速です。これは実用化の手法です。
さらに、ステップサイズが32の畳み込みレイヤーの代わりに、ステップサイズが16の2つの畳み込みレイヤーを使用して上の画像を入力すると、効率が向上します。

3畳み込み神経ネットワークを構築する

以下では、CONV、POOL、FC、RELUを使用して、畳み込みニューラルネットワークを構築します。

3.1階層

以下の構造で構築します

INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC
  •  

ここで、N> = 0(通常はN <= 3)、M> = 0、K> = 0(通常はK <3)です。
ここで注意してください:多層で小さいサイズのCONVを使用することをお勧めします。
どうして?
たとえば、33x3と7x7convレイヤーの場合、すべて7x7の受容フィールドを取得できますが、3x3には次の利点があります。1。3レイヤー
の非線形の組み合わせは、
1レイヤーの線形の組み合わせよりも表現力が強い; 2.3レイヤー小さいサイズの畳み込み層のパラメーターの数は少なく、3x3x3 <7x7;
3.逆伝播では、中間層の結果を格納するためにより多くのメモリを使用する必要があります。

GoogleのInceptionアーキテクチャとMicrosoftResearch AsiaのResidualNetworksはどちらも、上記の構造よりも複雑な接続構造を作成していることは注目に値します。

3.2レイヤーサイズ

  1. 入力層:入力層は通常、32(CIFAR-10など)、64、96(STL-10など)、224(一般的なImageNet ConvNetsなど)、384、512などの2の指数形式です。
  2. 畳み込みレイヤー:通常、3x3や最大5x5などの小さなフィルター、ステップサイズは1に設定されます。ゼロパディングを追加すると、畳み込みレイヤーは入力のサイズを変更しない場合があります。大きなフィルターを使用する必要がある場合は、多くの場合、最初のフィルターになります。最初のレイヤーは、ゼロパディング方式P =(F-1)/ 2を使用します。
  3. プーリングレイヤー:一般的な設定では、2x2の最大プーリングレイヤーを使用します。3x3を超える最大プーリングレイヤーはめったにありません。
  4. ステップサイズが1より大きい場合、またはゼロパディングがない場合は、ステップサイズとフィルターが十分に堅牢であるかどうか、およびネットワークが均等かつ対称的に接続されているかどうかに細心の注意を払う必要があります。
  5. ステップサイズが1の場合、パフォーマンスが向上し、プーリングとの互換性が高くなります。
  6. ゼロパディングの利点:ゼロをパディングしない場合、エッジ情報はすぐに破棄されます
  7. コンピュータのメモリ制限を考慮してください。たとえば、224x224x3の画像を入力し、フィルタは3x3、合計64のフィルタ、パディングは1です。各画像には72MBのメモリが必要ですが、GPUで実行している場合はメモリが不足する可能性があるため、フィルタなどのパラメータを7x7に調整し、ストライドを2に調整できます(ZFネット)またはfiler11x11、ストライド4。(AlexNet)

3.3ケース

  1. LeNet。cnnの最初の成功したアプリケーション(1990年代のYann LeCun)。彼の強みは、郵便番号、数字などです。
  2. AlexNet。コンピュータービジョンで最初に広く使用されました(Alex Krizhevsky、Ilya Sutskever、Geoff Hintonによる)。2012年のImageNet ILSVRCチャレンジは、LeNet構造に似ていますが、多層の畳み込み層が重ねられた、より深く、より大きく輝いています。
  3. ZFNet。ILSVRC2013の優勝者(MatthewZeilerとRobFergus)。ZFNet(Zeiler&Fergus Netの略)として知られるようになりました。Alexnetの構造パラメーターを調整し、中間の畳み込み層を拡張して、最初の層のフィルターを作成しました。そして、ステップサイズが削減されます。
  4. GoogLeNet。ILSVRC2014の優勝者(GoogleのSzegedy et al。)は、パラメーターの数を大幅に削減しました(60Mから4Mに)。ConvNetの最初のFCレイヤーの代わりに平均プーリングを使用して、多くのパラメーターを排除しました。次のようなバリアント:Inception-v4。
  5. VGGNet。ILSVRC2014のランナーアップ(KarenSimonyanとAndrewZisserman)は、深さの利点を証明しました。Caffeで使用できます。ただし、パラメーターが多すぎて(140M)、計算量が多くなります。しかし、今では不要なものがたくさんあります。パラメータは削除できます。
  6. ResNet。(Kaiming He et al)。ILSVRC2015の受賞者。2016年5月10日現在、これは最も先進的なモデルです。DeepResidualNetworks (2016年3月公開)IDマッピングの改良版もあり ます。
    その中にはVGGがあります。計算コストは​​次のとおりです。
INPUT: [224x224x3]        memory:  224*224*3=150K   weights: 0
CONV3-64: [224x224x64]  memory:  224*224*64=3.2M   weights: (3*3*3)*64 = 1,728
CONV3-64: [224x224x64]  memory:  224*224*64=3.2M   weights: (3*3*64)*64 = 36,864
POOL2: [112x112x64]  memory:  112*112*64=800K   weights: 0
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M   weights: (3*3*64)*128 = 73,728
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M   weights: (3*3*128)*128 = 147,456
POOL2: [56x56x128]  memory:  56*56*128=400K   weights: 0
CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*128)*256 = 294,912
CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
POOL2: [28x28x256]  memory:  28*28*256=200K   weights: 0
CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*256)*512 = 1,179,648
CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
POOL2: [14x14x512]  memory:  14*14*512=100K   weights: 0
CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
POOL2: [7x7x512]  memory:  7*7*512=25K  weights: 0
FC: [1x1x4096]  memory:  4096  weights: 7*7*512*4096 = 102,760,448
FC: [1x1x4096]  memory:  4096  weights: 4096*4096 = 16,777,216
FC: [1x1x1000]  memory:  1000 weights: 4096*1000 = 4,096,000



TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)
TOTAL params: 138M parameters
  •  

メモリが最も使用される場合、最初のいくつかのCONVレイヤーでは、パラメーターは基本的に最後のいくつかのFCレイヤーにあることに注意してください。最初のFCには100Mがあります。

3.4メモリ使用量

メモリは主に次の側面で消費されます:
1。多数のアクティベーション値と勾配値。テスト時には、現在のアクティベーション値を保存し、以前のアクティベーション値を下位レイヤーに破棄することしかできません。これにより、アクティベーション値の保存量が大幅に削減されます。
2.パラメータのストレージ、逆伝播中の勾配、およびモメンタム、Adagrad、またはRMSPropが使用される場合のキャッシュがストレージを占有するため、推定パラメータによって使用されるメモリは、通常、少なくとも3倍にする必要があります。3
。ネットワークが実行されるたびにグラフィックデータのバッチなど、あらゆる種類の情報を覚えておいてください。
ネットワークに必要なメモリが多すぎると推定される場合は、画像のバッチを適切に減らすことができます。結局、アクティベーション値は多くのメモリスペースを占有します。

その他の情報

  1. CONVパフォーマンスのSoumithベンチマーク
  2. ConvNetJSCIFAR-10デモ ブラウザのConvNetsリアルタイムデモンストレーション。
  3. 人気のConvNetsツールであるCaffe
  4. Torch7の最先端のResNets

 

おすすめ

転載: blog.csdn.net/qingfengxd1/article/details/110928363