ResNet モデルの原理

ResNet と Vgg の主な違いは次のとおりです。

1. ResNet は Vgg よりも深いネットワーク構造を持っています

2. Vgg と比較して、ResNet は残留接続の構造を導入します。

3. ResNet は BatchNorm レイヤーを導入し、ResNet がより深いネットワーク構造をトレーニングできるようにします

4. ResNet は、ダウンサンプリングに Vgg のプーリング層の代わりに stride=2 の畳み込み層を使用します。

5. ResNet と Vgg 設計の大きな違いは、ResNet の機能マップ サイズが半分になると、畳み込み層チャネルの数が 2 倍になることです。

VGG

 

ResNet ネットワークは、2015 年に Microsoft Labs の He Kaiming およびその他の偉大なマスターによって提案されました。同年の ImageNet コンペティションで分類タスクで 1 位、ターゲット検出で 1 位を獲得しました。COCO データセットの物体検出と画像セグメンテーションで 1 位を獲得しました。

ResNet は VGG に基づいて変換されます。スキップ接続レイヤーのスキップ接続は、勾配の消失、勾配の爆発、その他の現象を回避するために導入されています

1. スキップ接続とは何ですか?

スキップ接続は、ディープ ニューラル ネットワークの異なる層間のノードを接続する方法です。従来のニューラル ネットワークでは、信号は入力層から出力層に送信され、各隠れ層の出力は次の層に送信される前にアクティベーション関数によって処理される必要がありますが、スキップ接続は信号を同時に送信します。現在のレイヤーを、より深いレベルの次のレイヤーに戻します。つまり、中間レイヤーを「スキップ」します。そして、このクロスレイヤー接続により、情報伝達が高速化され、勾配の消失が回避され、より多くの情報が保持されます。

2、スキップ接続の利点

ディープ ニューラル ネットワークの場合、スキップ接続の利点は次のとおりです。

1. 勾配消失の問題の解決
ニューラルネットワーク層の数が増加するにつれて、勾配消失の問題はさらに深刻になり、深いノードを効果的に更新することが困難になり、トレーニングプロセスさえ完全に停滞します。スキップ接続はより多くの情報を保持できるため、層間接続を通じて異なる層間で勾配を伝播させることができ、勾配消失の問題を効果的に解決できます。

2. モデル学習の高速化
スキップ接続により、中間層を経由せずに直接次の深い、ニューラルネットワークの伝送経路を短縮し、情報の伝達速度を高速化することができます。ニューラルネットワーク全体のトレーニング速度。

3. モデルの汎化能力の向上
一部のディープニューラルネットワークの学習においては、学習セットとテストセットの違いにより、過学習という現象が発生します。スキップ接続を追加すると、より多くの情報を保持できるため、モデルの汎化能力が強化され、過学習のリスクが軽減されます。

残差ネットワークは BN の上に構築され、差は多項式で近似されます。利点は、解に近い重量応答がより敏感であり、最適な解を学習するのが容易であることです。

レスネット

ネットワークの深さが重要なのはなぜですか?

CNN は低レベル、中レベル、高レベルの特徴を抽出できるため、ネットワークの層が増えるほど、さまざまなレベルで抽出できる特徴が豊富になります。さらに、より深いネットワークによって抽出された特徴はより抽象的であり、より多くの意味情報を持っています。

なぜ単純にネットワーク層の数を増やすことができないのでしょうか?

对于原来的网络,如果简单地增加深度,会导致梯度弥散或梯度爆炸。

この問題の解決策は、初期化層と中間の正規化層 (バッチ正規化) を正規化して、数十層のネットワークをトレーニングできるようにすることです。

虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题,网络层数增加,但是在训练集上的准确率却饱和甚至下降了。这个不能解释为overfitting,因为overfit应该表现为在训练集上表现更好才对。
退化问题说明了深度网络不能很简单地被很好地优化。
作者通过实验:通过浅层网络+ y=x 等同映射构造深层模型,结果深层模型并没有比浅层网络有等同或更低的错误率,推断退化问题可能是因为深层的网络并不是那么好训练,也就是求解器很难去利用多层网络拟合同等函数。

劣化の問題を解決するにはどうすればよいでしょうか?

深い残留ネットワーク。深いネットワークの後の層がアイデンティティ マップである場合、モデルは浅いネットワークに縮退します。次に、私たちが今解決しなければならないのは、恒等マッピング関数を学習することです。ただし、一部の層を潜在的なアイデンティティ マッピング関数 H(x) = x に直接適合させることは困難であり、これがディープ ネットワークのトレーニングが難しい理由である可能性があります。ただし、以下に示すように、ネットワークが H(x) = F(x) + x として設計されている場合。残差関数 F(x) = H(x) - x の学習に切り替えることができます。F(x)=0 である限り、恒等マップ H(x) = x を構成します。さらに、フィッティング残差は大きくなければなりませんより簡単に。

ResNet モデルの原理

VGG ネットワークは特徴表現において大きな利点がありますが、深いネットワークをトレーニングするのは非常に困難ですこの問題を解決するために、研究者はドロップアウトや正規化 (バッチ正規化) などの一連のトレーニング手法を提案しました。

2015 年、He Kaiming は、ネットワーク学習の難易度を軽減し、勾配消失の問題を解決するためにResidual Network (ResNet) を提案しました。

写真

図 1 グラデーションの消失

ResNet では、スキップ接続を導入することで、CNN が残差マッピングを学習できるようになります。残留構造 (ボトルネック)を図 2 に示します。

写真

図2 残留構造

図 2 の残差構造では、入力 x は最初は 1 x 1 畳み込みカーネル、64 畳み込み層、最後に 1 x 1 畳み込みカーネル、256 畳み込み層であり、次元は最初は小さくなり、次に大きくなります。ネットワークの出力は H(x) です. スキップ構造分岐が導入されていない場合は H(x) = F(x) となります. 連鎖則に従って x を導出する際の勾配はますます小さくなります. 分岐 H(x) = F(x) + x を導入して x を導出した後、得られる局所勾配は 1 となり、勾配を逆伝播しても勾配は消えません。

図3はResNetの構造であり、18層、34層、50層、101層、152層のフレーム詳細を示しており、図中の「×2」と「×23」は畳み込み層が2回繰り返されていることを示しています回または23回。すべてのネットワークが 5 つの部分、つまり conv1、conv2_x、conv3_x、conv4_x、conv5_x に分割されていることがわかります。

写真

図 3 ResNet の構造

図 3 の Conv1 は、7  7 コンボリューション カーネルを使用します。チャネル数が同じ場合、コンボリューションパラメータの計算量は、7×7コンボリューションカーネルの方が3×3コンボリューションカーネルより多くなりますが、チャネル数がばらつく場合、チャネル数が少ない場合は、 、大規模なコンボリューション カーネルを使用できます。

最初の畳み込み層のチャネル数が 3 の場合、3 つの 3 x 3 コンボリューション カーネルは 1 つの 7 x 7 コンボリューション カーネルと同じ受容野効果を持ちますが、1 つの 7 x 7 は 3 つの 3 x 3 よりも優れたパラメーターが多くあります。VGGの第19層とResNetの第34層におけるパラメータの計算量を図4に示します。7×7コンボリューションカーネルを用いたResNet第34層の計算量は、VGG第19層に比べて大幅に少なくなります。 3 つの 3 x 3 畳み込みを使用します。

写真

図4 パラメータの計算

図 3 の畳み込み層 conv2_x と conv3_x の出力サイズは、それぞれ 56 x 56 と 28 x 28 です。畳み込み層 conv2_x が conv3_x に対してスキップ構造を採用している場合、特徴マップの次元が一貫していないため、直接追加することはできませんこのとき、ジャンプ構造は畳み込みを使用して特徴マップの次元が一貫していることを確認し、特徴マップを追加できます。

図 3 の最後の行の FLOP (浮動小数点演算) は、フレームワークの複雑さを測定できる浮動小数点演算の数を指します。フレームワークの複雑さは重みとバイアスに関連しています。入力画像の高さ、幅、チャネル数はそれぞれ H_in、W_in、D_in で表され、出力特徴マップの高さ、幅、チャネル数はそれぞれ H_out、W_out、D_out で表されます。 ; コンボリューションカーネルの幅と高さをそれぞれ F_w、F_h で表し、 N_p は特徴マップ上の点の計算量を表し、その計算式は次のとおりです。

写真

畳み込みの FLOP を計算する式は次のとおりです。

写真

完全接続層の場合、入力特徴マップは 1 x N_in のベクトルに拡張され、出力ベクトルの次元は 1 x N_out になります。完全接続層の FLOP を計算する式は次のとおりです。

写真

ネットワークの複雑さは、ツールキット Flops を使用して PyTorch で計算できます。

写真

図 5 ResNet 34 および VGG 16 ネットワークの FLOP

ResNetコードの再現

ResNet ネットワークは VGG 19 ネットワークを参照しており、それに基づいて変更されています。変更は主に、ResNet がダウンサンプリングに stride=2 の畳み込みを直接使用し、完全に接続された層をグローバル ネットワークに置き換えているという事実に反映されています。平均的なプール層。

ResNet は、以下の図 5 に示すように、2 つの残差構造を使用します。左の図は浅いネットワークに対応しており、入力と出力の次元が一致している場合、入力を出力に直接追加できます。右側の画像はディープネットワークに対応します。次元が一致しない場合 (次元の 2 倍に相当)、1 x 1 畳み込みを使用して、最初に次元を減らし、次に次元を増やします。

写真

図5 残留構造

2 つの残差構造のコード実装は次のとおりです。クラス BasicBlock(nn.Module) は浅いネットワーク ResNet 18/34 の残差ユニットを参照します。

写真

クラス BottleNeck(nn.Module) は、ディープ ネットワーク ResNet 50/101/152 の残りのユニットを参照します。

写真

ResNet の全体的な構造は次のとおりです。

写真

ResNet クラスの forward( ) 関数は、ネットワーク データのフローを指定します。

(1) データがネットワークに入った後、最初に畳み込み (conv1) が実行され、次にダウンサンプリング プール (f1) が実行されます。

(2) 次に、中間の畳み込み部分 (conv2_x、conv3_x、conv4_x、conv5_x) を入力します。

(3) 最後に、データは平均プーリング (avgpool) と完全接続層 (fc) を介して出力され、結果が得られます。

真ん中の畳み込み部分は主に下図の青枠部分で、赤枠部分の[2, 2, 2, 2]と[3, 4, 6, 3]はbolckの繰り返し回数を表しています。

写真

ResNet18 と他の Res シリーズ ネットワークの違いは主に conv2_x  ~ conv5_x であり、他のコンポーネントは同様です。

写真

おすすめ

転載: blog.csdn.net/qq_38998213/article/details/132502386