ファーウェイは再び大きな動きを始めているのだろうか?CV 新しいアーキテクチャ: VanillaNet: 深層学習におけるミニマリズムの力 論文読書ノート


前に書く

  2日前のVALSEカンファレンスではファーウェイの記事に衝撃を受けましたが、正直言ってパフォーマンスはちょっと爆発的でした。Githubのテーブルを見てみると、層数が増えるとパラメータの数が恐ろしいですが、推論速度は以前のモデルよりもはるかに高速です。

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

1. 概要

  Abstract全体を見ると具体的な内容はなく、つまりこの記事で提案するVanillaNetは左フックでResNet、右フックでSwim-Transformerなどが使えるということです。主な理由は、超ディープ、ショートカット、自己注意メカニズムの導入を避けるためであり、複雑なアクティベーション関数はありません。

2. はじめに

  最初の段落では AI の開発と役割について簡単に説明し、2 番目の段落では AlexNet の紹介と ResNet のフォローアップから始まり、このモデルの設計がますます複雑になっていることを示していますが、同時にそのモデルの設計が複雑になっていることを示しています。パフォーマンスはどんどん良くなっていきます。3 番目のセクションは Transformer の本拠地であり、依然としてモデルの奥深さを強調しています。4 番目の段落は前から次への移行であり、より深く、より複雑なモデル構造を展開するのが難しいことを示しています。5 番目の段落で問題が示されており、フラット ネットワークは勾配消失問題に悩まされ、一部のディープ ネットワークのパフォーマンスは以前の AlexNet や VGG をはるかに超えているため、モデル構造の設計に注意を払う人はほとんどいません。
  6 番目の段落でトピックが紹介されていますが、この記事では VanillaNet を提案しています。モデルの構造は単純です: モデルの超深度、ショートカット分岐、およびセルフアテンション操作が削除されています。したがって、非線形層を徐々に除去して推論速度を維持するトレーニング戦略が提案されています。ネットワークの非線形性を強化するために、他のモデルよりもはるかに効果的なシリーズベースの活性化関数が提案されています。最後にもう 1 つ、VanillaNet は非常に強力なので、私の作品をフォローしに来てください。

3. 単一バニラの神経構造

  ほとんどの SOTA 分類モデルは 3 つの部分で構成されます。ステム ブロックは入力 3 チャネル画像をマルチチャネルに変換し、ダウンサンプリングを伴います。本体モジュールは有用な情報を学習するために使用され、完全に接続された層は分類器に使用されます。 .出力。本体モジュールには 4 つのステージがあり、各ステージは複数の同一のブロックによって積み重ねられます。各段階の後、機能チャンネルの数は増加しますが、幅と高さは減少します。
  次の段落では、ResNet と ViT は奥が深すぎて、ViT には複数の自己注意層が必要であると不満を述べます。
  現在の AI チップの開発では、Lao Huang の NVIDIA GPU が実際に開発されたため、当初制限されていた FLOP やパラメータ量はもはやボトルネックではありません。したがって、モデルの複雑な設計とより深いブロックが速度を制限する主な要因となっています。したがって、この記事では、次の図に示す VanillaNet を提案します:
ここに画像の説明を挿入します
VanillaNet は依然として 3 段階の設計ですが、違いは深さであり、各段階は 1 つのレイヤーのみで構築されています。

  6 層 VanillaNet を例に挙げます。幹: 畳み込み層4 × 4 × 3 × C 4\times4\times3\times C4×4×3×C、ステップ サイズは4 44、意志3 33層チャンネルの入力画像はCCにマッピングされます。チャンネルCで。ステージ 1、2、および 3 では、ステップ サイズ2 2特徴マップのサイズを削減するために最大プーリング層2が使用され、チャネル数は2 22回。ステージ 4 では、その後の平均プーリングによりチャネル数は増加しません。最後の完全に接続された層が分類結果を出力します。各畳み込み層のカーネル サイズは1 × 1 1\times11×1に続き、アクティベーション層とバッチ正規化層が続きます。これは全体の構造であり、ショートカットや余分なブロックはありません。
  VanillaNet は比較的単純で浅いネットワークであるため、モデルのパフォーマンスが低下するため、その非線形性を強化するための一連の手法が提案されています。

4. VanillaNet のトレーニング

4.1 ディープトレーニング戦略

  2 つの畳み込み層と活性化層をトレーニングする戦略は、単一の畳み込み層をトレーニングする場合とは異なり、トレーニング エポックが増加するにつれて活性化関数を徐々に減らす必要があります。トレーニングの最後に、2 つの畳み込み層を 1 つに融合して、推論時間を短縮できます。
  活性化関数A ( x ) A(x)の場合ReLU や Tanh などのA ( x )は、次のような固有のマッピングと結合されます。
A ' ( x ) = ( 1 − λ ) A ( x ) + λ x A'(x)=(1-\lambda)A ( x)+\ラムダ x( × )_=( 1l ) A ( x )+λ x
ここでλ\lambdaλは平衡修正A ' ( x ) A'(x)' (x)活性化関数の非線形ハイパーパラメーター。注文しますそしてEEE はそれぞれ現在のエポックとエポックの総数を表し、λ = e E \lambda=\frac{e}{E}=Eしたがって、トレーニングの開始時は、e = 0 , A ' ( x ) = A ( x ) e=0,A'(x)=A(x)e=0 ( × )_=A ( x )は、モデルに強い非線形性があることを意味します。トレーニングが収束すると、最終的にA ' ( x ) = x A'(x)=x( × )_=x、2 つの畳み込み層の間に活性化関数がないことを示します。

  次に、各層のバッチ正規化とその後の畳み込みが 1 つの畳み込み演算に変換されます。

W ∈ RC out × ( C in × k × k ) W\in\mathbb R^{C_{out}\times(C_{in}\times k\times k)}WRCあなた_× C× k × k )B ∈ RC out B\in \mathbb R^{C_{out}}BRCあなた_はそれぞれ畳み込み層の重みとバイアスです。C_{in} に C を入力します。Cチャンネル、出力C out C_{out}Cあなた_チャネル数、コンボリューション カーネル サイズはkkですkバッチ正規化のスケール、平行移動、平均、微分はそれぞれγ 、 β 、 μ 、 σ ∈ RC out \gamma,\beta,\mu,\sigma\in\mathbb{R}^{C_{out}}c b メートルpRCあなた_ 表示,于是 batch 归一化和卷积的融合操作可表示为:
W i ′ = γ i σ i W i , B i ′ = ( B i − μ i ) γ i σ i + β i W_i'=\frac{\gamma_i}{\sigma_i}W_i,B_i'=\frac{(B_i-\mu_i)\gamma_i}{\sigma_i}+\beta_i W=p私はc私はW私はB=p私は( B私はメートル私はc私は+b私はここで、添え字i ∈ { 1 , 2 , … , C out } i\in\{1,2,\ldots,C_{out}\}{ 1 2 Cあなた_}はii 番目を表しますiチャネルの出力値。

  次に、2 つの1 × 1 1\times1をマージします。1×1畳み込み。入力特徴と出力特徴はそれぞれx ∈ RC in × H × W x\in\mathbb R^{C_{in}\times H\times W}バツRC× H × Wy ∈ RC out × H ' × W ' y\in\mathbb R^{C_{out}\times H'\times W'}yRCあなた_× H ×W」'であるため、畳み込み演算は次のように表すことができます:
y = W ∗ x = W ⋅ im 2col ( x ) = W ⋅ X y=W*x=W\cdot\mathrm{im}2\mathrm{col}( x )=W\cdot Xy=Wバツ=W私は2( x )=WXここで∗ *∗ は畳み込み演算を表します。⋅ \cdot行列の乗算を表します。X ∈ R ( C in × 1 × 1 ) ( H ' × W ' ) X\in\mathbb R^{(C_{in}\times1\times1)(H'\times W')}バツR( C× 1 × 1 ) ( H ×W」' )im2col {\text{im2col}}から生じますim2col演算は、入力をコンボリューション カーネルに対応する形状に変換します。1 × 1の場合、1\times11×convolutionの場合、重なっている部分でコンボリューションカーネルをスライドさせる必要はありません(重なっている部分がないため)。したがって、2 つの畳み込み層の重み行列はW 1 W^1W1 W 2 W^2 W2 の場合、活性化関数を使用しない 2 つの畳み込み演算は次のように表すことができます:
y = W 1 ∗ ( W 2 ∗ x ) = W 1 ⋅ W 2 ⋅ im 2col ( x ) = ( W 1 ⋅ W 2 ) ∗ X y =W ^1*(W^2*x)=W^1\cdot W^2\cdot\text{im}2\text{col}(x)=(W^1\cdot W^2)*Xy=W1( W2× =W1W2私は2( x )=( W1W2 )Xこれまでのところ、2 つの1 × 1 1\times11×1畳み込みはスムーズに融合され、推論速度が低下しません。

4.2 シリーズインフォームドアクティベーション機能

  現在主流の活性化関数には、Rectified Linear Unit (ReLU) とそのバリアント PReLU、GeLU、Swish が含まれます。これらは、単純で浅いネットワークの非線形性によって制限されます。深いネットワークと比較して、これらの活性化関数は系統的に研究されていません。 。
  ニューラル ネットワークの非線形性を改善するには、非線形活性化層を積み重ねる方法と、各活性化層の非線形性を高める方法の 2 つがありますが、主流のネットワークのほとんどは前者を選択しており、並列コンピューティングの高い可能性が残されています。
  直接的なアイデアの 1 つは、積層された活性化層の非線形能力を向上させることです。活性化層を直列に積層することが深いネットワークの鍵となります。対照的に、活性化層を同時に積層することは良い方法です。単層活性化関数をA ( x ) A(x)と表します。A(x),其中 x x xは入力で、関数は ReLU と Tanh です。スタックA ( x ) A(x)A(x) 可以表示为:
A s ( x ) = ∑ i = 1 n a i A ( x + b i ) A_s(x)=\sum_{i=1}^n a_i A(x+b_i) s( × )=i = 1ある私は( ×+b私は)ここで、nnn はスタックされた活性化関数の数を表します、ai a_iある私はbi b_ib私ははそれぞれ活性化関数のスケールとバイアスです。活性化関数の非線形性は、同時スタッキングによって強化できます。
  Series の近似能力をさらに高めるために、BNET と同様に、近傍を変更することで入力を変更し、グローバルな情報を学習します。具体的には、与えられた入力特徴X ∈ RH × W × CX\in\mathbb R^{H\times W\times C}バツRH × W × C、ここでHHHWWWCCCはそれぞれ入力の幅、高さ、チャネル数です。したがって、活性化関数は次のように形成されます。
A s ( xh , w , c ) = ∑ i , j ∈ { − n , n } ai , j , c A ( xi + h , j + w , c + bc ) A_s (x_{ h,w,c})=\sum\limits_{i,j\in\{-n,n\}}a_{i,j,c}A(x_{i+h,j+w, c}+b_c)s( ×h w c)=i , j { n , n }あるi j c( ×i + h j + w c+bc)ここで、h ∈ { 1 , 2 , … , H } h\in\{1,2,\ldots,H\}h{ 1 2 H }w ∈ { 1 , 2 , … , W } w\in\{1,2,\ldots,W\}w{ 1 2 W }c ∈ { 1 , 2 , … , C } c\in\{1,2,\ldots,C\}c{ 1 2 C } . n=0の場合n=0n=0のとき、A s ( x ) = A ( x ) A_s(x)=A(x)s( × )=A ( x )この記事では、シリーズを構築するための活性化関数として ReLU を使用します。次に、サイズKK
  の畳み込みカーネルの計算の複雑さを分析します。Kの畳み込み層は、それぞれC_{in} の入力チャネル番号と出力チャネル番号 CCC アウト C_{アウト}Cあなた_、計算量は次のとおりです:
O ( CONV ) = H × W × C in × C out × k 2 \mathcal{O}(\mathrm{CONV})=H\times W\times C_{in}\times C_{ out}\times k^2O (変換)=H×W×C×Cあなた_×k2直列活性化層のコストは
次のとおりです: O ( SA ) = H × W × C in × n 2 \mathcal{O}(\text{SA})=H\times W\times C_{in}\times n^ 2=H×W×C×n2以降:
O ( CONW ) O ( SA ) = H × W × C in × C out × K 2 H × W × C in × n 2 = C out × k 2 n 2 \frac{\mathcal{O}( \text{CONW})}{\mathcal{O}(\text{SA})}=\frac{H\times W\times C_{in}\times C_{out}\times K^2}{H\ W\times C_{in}\times n^2}=\frac{C_{out}\times k^2}{n^2}O ( CONW )=H×W×C×n2H×W×C×Cあなた_×K2=n2Cあなた_×k2VanillaNet-B 4 4位4 つのステージを例に。C out = 2048 C_{out}=2048Cあなた_=2048k = 1 k=1k=1n = 7 n = 7n=7、上式の比は84 8484したがって、提案された活性化層の計算の複雑さは、畳み込み層の計算の複雑さよりも低くなります。

5. 実験

  ImageNet データセット。

5.1 アブレーション実験

活性化関数における系列数の影響

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

トレーニングテクニックの影響

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

ショートカット分岐の影響

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

5.2 注意力の可視化

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

5.3 SOTAアーキテクチャとの比較

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

5.4 COCO データセットの実験

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

6. 結論

  この記事では、単純で浅いニューラル ネットワークの実現可能性を研究し、モデルの非線形性を強化するために VanillaNet をトレーニングするための深いトレーニング戦略とシリーズ アクティベーション関数を提案します。VanillaNets は実験結果からも非常に効果があることが分かりましたので、ぜひ皆さんも試してみてください。

付録 A: ネットワーク構造

ここに画像の説明を挿入します
各畳み込み層の後には活性化層が続きます。VanillaNet-13-1.5×の場合、チャンネル数は1.5倍となります。VanillaNet-13-1.5׆ の場合、ステージ 2、3、および 4 で適応プーリングがさらに使用され、対応する形状は40 × 40 40\times40 になります。40×4020 × 20 20\times2020×2010 × 10 10\times1010×10

付録 B: トレーニングの詳細

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

  この Huawei の記事は短く簡潔であり、基本的なスキルを実際に反映しています。この「ディープ」ラーニングの時代に、あえて浅いネットワークに挑戦するのは本当に素晴らしいことです。

おすすめ

転載: blog.csdn.net/qq_38929105/article/details/131245415