CVPR2017: 高密度接続畳み込みネットワーク DenseNet 「高密度接続畳み込みネットワーク」

元のアドレス

https://arxiv.org/abs/1608.06993

最初の知り合い

深さ畳み込みニューラル ネットワークでは、順伝播および逆伝播中に関連する情報と勾配が多くの層を通過する必要があるため、勾配の分散と勾配の消失の問題が発生します。この種の問題を解決するために、ResNet に代表される関連作品では、 および < A で が採用されています。 i=5>early layerlater layer 間に短絡接続を確立する方法。

次の図は、ResNet の残差ブロックの設計を示しています。

ここに画像の説明を挿入します
この記事では、このコアに基づいてDenseNet、すべてのネットワーク層を同じ解像度で接続し、ネットワーク層間の情報フローをさらに最大化することを提案します。 l 層を持つ従来の畳み込みニューラル ネットワークには合計 l の接続がありますが、DenseNet 設定では l(l+1)/2 の接続があります。以下に示すように。

勾配消失の問題を解決することに加えて、DenseNet には「特徴の伝達、特徴の再利用を強化し、パラメータの量を削減する」という利点もあります。

ここに画像の説明を挿入します
上の図を見るだけで、この設計は実装が非常に面倒だと思われるでしょう。異なるレイヤ間で構築する必要があります。skip connection しかし、実際には、 resnet 接続を短絡します。 add オペレーションは concate オペレーションになり、各レイヤーの入力に以前のすべてのレイヤーの情報が含まれるようになります。

input( x l x_l バツl ) = [ x 0 , x 1 , . 。 。 , x l − 1 x_0, x_1, ..., x_{l-1} バツ0 バツ1 ...,バツl1

各レイヤーの入力では、以前のすべてのレイヤーの機能マッピングが考慮されるため、ネットワーク内には複数の情報フロー ルートがあり、各レイヤーは直接アクセスできます。 > loss function および origin input 情報から計算された勾配に変換します。これも 深い監視の一種です< /span> a> (徹底した監視)。

DenseNet アーキテクチャでは、ネットワークに追加される情報 (現在の層の出力) と保持される情報 (前のネットワーク層の出力) が明確に区別されるため、ネットワークの各層は次のように設計されています。非常に狭く (チャネル数が少ない)、ネットワークの「集合的な知識」に少数の機能マップを追加するだけです。分類子は、ネットワーク内のすべての特徴マップに基づいて決定を行います。この深く狭い構造により、DenseNet のパラメータ数も比較的少なくなります。

最終的に、DenseNet はより少ないパラメータでより良いパフォーマンスを達成でき、全体的なパフォーマンスも SOTA に達しました。また、一部の著者は、DenseNet下流のタスクで事前トレーニングされたモデルに依存せずにさらに高い精度を達成できることをインタビューで指摘しました (参考リンク [2] を参照)。

友人

ResNetとの違い

実際、前のセクションの説明から、この 2 つの違いは非常に明白になりました。著者は 2 つの式もリストしました。ResNet の場合、 l 層の出力は
ここに画像の説明を挿入します
として表現でき、DenseNet の出力は として表現できます。 =3> ResNet はアイデンティティ マッピング用に追加の短絡接続を追加するのに対し、DenseNet は以前のすべての特徴出力を結合し、どちらも勾配分散の問題を解決できることがわかります。 ResNet の場合、勾配は恒等関数を通じて後の層から前の層に直接流れることができますが、加算演算により情報の流れが妨げられる可能性があります。 DenseNet を使用すると、各層がさまざまなレベルで勾配と情報フローを直接取得できます。
ここに画像の説明を挿入します

DenseNet ネットワーク構造
ここに画像の説明を挿入します
上の図に示すように、DenseNet は主に複数の Dense ブロックで構成されています。各ブロックの特徴マップの解像度は同じであるため、直接適用< a i=2>高密度接続操作 (concat)。ダウンサンプリング操作はブロック間に適用され、特徴マップのスケールを縮小します。これは、記事内では と呼ばれます。これには、畳み込み操作とプーリング操作 [bn + 1x1 conv + 2x2 avgpool] が含まれます。 trasition layers

DenseNet には、新しいハイパーパラメータ Growth rate (成長率) があります。ブロックの初期入力フィーチャの次元は k 0 k_0 であると仮定します。 k0 、増加率が k の場合、高密度結合操作を適用した後、 l l l レイヤーの入力フィーチャのディメンションはk_0 + k*(l-1) です。他のネットワークとは異なり、DenseNet は非常に狭い (つまり、各ノード/各層の[図 2 の各点] の出力特徴の寸法が比較的小さい) 、k=12 など)、非常に良い結果が得られました。そして著者は、これについての良い説明も見つけました。なぜなら、 特徴マップをネットワーク、各レイヤーは独自の出力 (k 個の特徴マップ)をステータスに追加します。したがって、成長率を使用して、グローバル状態の新しい情報に対する各層の出力の寄与を調整できます。グローバル状態を書き込むと、ネットワーク内のどこからでもアクセスできるようになり、従来のネットワーク アーキテクチャとは異なり、レイヤーごとに複製する必要がありません。 collective knowledge

個人的には、主に concat 関係が原因であると考えていますが、各ノードが出力する特徴量の次元が依然として非常に広い場合、ビデオ メモリと計算が大幅に増加します。余談ですが、著者は「グローバル状態は一度書き込めば、レイヤーごとにコピーする必要がなく、ネットワーク内のどこからでもアクセスできます」と述べています。 " ですが、既存のフレームワークの concat 操作では基本的にコピー用に追加のスペースが空き、ネットワーク全体が大量のスペースを占有することになります。メモリの量は異なりますが、メモリを節約する効率的な実装もあります。参照リンク[2]を参照してください。

各密ブロックでは、ボトルネック構造も使用できます。まず 1x1 conv を使用して入力の次元を削減し、次に 3x3 conv を使用します。このような構造を DenseNet-B と呼びます。さらに、次元削減操作も transition layer ごとに実行できます。実験では、チャネル数は元の 0.5 倍に削減されました。このアーキテクチャはと呼ばれます。 a> と呼ばれます。 DenseNet-C。両方を使用する場合は、DenseNet-BC

ImageNet データ セットの分類タスクに使用される DenseNet の具体的なネットワーク構造は次のとおりです。

ここに画像の説明を挿入します

ここでの各convbn-relu-conv 操作を表していることに注意してください。これは記事「深い残差ネットワークにおけるアイデンティティ マッピング」を参照しています。 bn-relu-conv を使用した事前アクティベーションが元の resnet よりも優れていることが証明されています。詳細については、リンク [3] を参照してください。

いくつかの実験:

いくつかの実験結果を紹介しますが、より詳しい実験については原文をご覧ください。

次の表は、CIFAR および SVHN データ セットのモデルの結果を示しています: ① DenseNet は同じパラメータの下でより良いパフォーマンスを示し、DenseNet は同じパフォーマンスの下でより少ないパラメータを持っています; ② 深さが増加するにつれて、モデルが過学習にならず、最適化が困難になる; ③ DenseNet はより強力な過学習防止能力を備えている可能性がある データ拡張を使用しない場合、DenseNet のパフォーマンスが向上し、容量とパフォーマンスが向上します [ただし、C10 に対する k=24 の効果は k よりも悪いです) =12 】。

ここに画像の説明を挿入します

次の表と図は、ImageNet での DenseNet-BC のパフォーマンスと ResNet との比較を示しています。より少ないパラメータを使用して同じパフォーマンスが得られます。
ここに画像の説明を挿入します
DenseNet の最大の特徴は、各層が以前のすべての層の出力結果を直接取得できることです。著者訓練されたネットワークがこの機能を使用するかどうかを調査するために実験が行われました。 次の図は、C10+ でトレーニングされた DenseNet の l レイヤーと前の s レイヤー間の平均重みを示しています。横軸ははターゲット層 (ブロック内の順序) を表し、縦軸はソース層 (現在のターゲット層の入力、前の s 層の出力) を表します。この図は、現在のレイヤーによる前のレイヤーの出力フィーチャの再利用率を表すことができます。著者は主に次の 4 つの結論について述べています。

  • 同じ高密度ブロックでは、複数のレイヤーを通過した後もノード出力の重みが高くなります。これは、以前のレイヤーから抽出された特徴が、より深いレイヤーで直接使用されることを示しています。 .;
  • トランジション レイヤーでも、前の Denseblock [ブロック 1] 内のすべての前のレイヤーの機能が使用されます。
  • 2 番目と 3 番目の密なブロックの遷移層は、前のブロックの再利用率が非常に低く、遷移層の出力に冗長な機能があることがわかります< a i=2>。これは、DenseNet [DenseNet-C] の圧縮の必要性を裏付ける証拠も提供します。
  • 最後のブロックでは、分類層は前の層の特徴情報も使用しますが、 最後のいくつかの層の出力を使用することを好みます は、分類タスクに有益ないくつかの高レベルの意味論的特徴がネットワークの最後の数層で生成されることを示しています。

ここに画像の説明を挿入します

レビュー

DenseNet は、2017 年の CVPR の最優秀論文です。そのアイデアはシンプルで、効果は良好です。著者が [1] で述べたように、ネットワーク構造と実装を理解せずに、 密な接続Densely Connectedという言葉を聞いたとき、パラメータがたくさんあり、モデルが非常に複雑であるに違いないとすぐに思いました。 。 複雑な。後で記事のネットワーク図を見たとき、これは単に線が増えただけで、実装は非常に複雑なはずだと思いました。 skip connection

しかし、実際には、この記事と ResNet の最大の違いは、+ から concat 操作が [論理的に] 変更されただけであり、これはほんの詳細です。 、2 つの異なるネットワーク構造が生まれ、密な接続操作により、各層は前のすべての層の出力を直接取得できるようになります。この特性により、作者は高いパフォーマンスを維持しながら [少ないパラメータと少ない計算量] でネットワークを非常に狭く設計することができ、この設計は[過学習防止] の機能を提供します。

過学習防止に関して、著者は、ニューラル ネットワークの各層によって抽出された特徴は入力データの非線形変換に相当し、深さが増すにつれて変換の複雑さが徐々に増加すると説明しました。 (非線形関数のさらなる合成)。 ネットワークの最後の層 (最も複雑な層) の機能に直接依存する一般的なニューラル ネットワーク分類器と比較して、DenseNet は浅い低複雑度の機能を包括的に利用できるため、汎化パフォーマンスが向上したスムーズな決定関数。実際、DenseNet の汎化パフォーマンスが他のネットワークよりも優れていることは理論的に証明できます。DenseNet が結論を証明するのとほぼ同時に、arXiv で公開された昨年の論文 (AdaNet: Adaptive Structural Learning of Artificial Neural Networks) (定理 1 を参照)本文では、DenseNet に似たネットワーク構造の汎化誤差限界が小さいことを示しています。

また、レーダー画像のディレクションと医療画像のディレクションに取り組む学生から、この種のDense Block設計が実際に多くの改善をもたらすことも学びました。理由の 1 つは、これらの分野のデータ量が少なく、他のネットワーク アーキテクチャがオーバーフィットする可能性が高いためだと思います。

参考

[1] CVPR 2017 の最優秀論文の著者の解釈: DenseNet の「何を」、「なぜ」、「どのように」
[2] DenseNet の簡単な分析と Pytorch メモリ効率の高い実装
[3] ResNetV2: ResNet の詳細な分析< /span>

おすすめ

転載: blog.csdn.net/qq_36560894/article/details/122502413