✂️

【論文まとめ】Pruning Filter in Filter

2022/06/26に公開

論文情報

Meng, Fanxu, et al. "Pruning filter in filter." Advances in Neural Information Processing Systems 33 (2020): 17629-17640.
https://arxiv.org/abs/2009.14410

概要

  • プルーニング手法はFilter Pruning(FP)とWeight Pruning(WP)に大別できる
    • FPは専用のハードウェアなしに計算量削減が可能だが、WPと比較して圧縮率の観点で劣る
  • フィルターF ∈ \mathbb{R}^{C×K×K}C本のStripeとして扱うStripe-Wise Pruning(SWP) を新たに提案
  • FPの利点であるハードウェア非依存な点はそのままに、よりプルーニングの"粒度"を細かくしている
  • Filter Skelton という学習可能な行列を用いることで、SWPを容易に実装可能
  • SWPはFPベースの手法と比較してより効率的で、明らかな精度低下なしにstate-of-the-artの圧縮率を達成

Stripe-wise Pruning(SWP)のポイント

この論文では、SWPというフィルタ内の構造に着目した手法が提案されている。下図はある畳み込みのフィルタのL1ノルムを示しており、フィルタごとにそれぞれ重要な重みによる"形状"があるとのこと。この形状に基づいて、各フィルタから不要な部分を削除する。
プルーニングの粒度が細かいため、精度低下が起こりにくく、また構造的に重みを削除するため、計算量も削減できるというのがこの手法のメリットのよう。

既存手法について

Weight Pruning(WP)

  • 各重みのL1ノルム等の値をもとに、不要な重みをゼロに置き換える。
  • 削除される重みの場所は構造的になっていないので、汎用のハードでは計算量を削減できない

Filter/Channel Pruning

  • 畳み込み層のフィルターやチャンネル単位でプルーニングを行う
  • L1ノルム等の指標を削除するまとまりごとに算出する
  • 構造的に重みが削除されるため、計算量の削減が容易
  • WPよりは精度低下する傾向

Group-wise Pruning

  • group lasso regularizationを用いて、下図のような構造的なスパース性をを学習させ、それに基づいてプルーニング
  • im2colで実装された畳み込みの場合、計算量を削減することができる
  • フィルタごとに、フィルタ内で不要となる箇所がおそらく異なるため、精度低下を引き起こす可能性がある

Filter Skeleton

最適なフィルタ形状を見つけるため、Filter Skeleton(FS)が用いられている。

あるl番目の畳み込み層の重みをW^l\in\mathbb{R}^{N \times C \times K \times K}とする。Nはフィルタ数、Cは入力チャンネル数、Kはカーネルサイズを示す。このとき、FSのサイズは\mathbb{R}^{N \times K \times K}、つまりフィルタごとにK \times Kの値をもつ。

FSは学習時に対応する重みへと掛け合わされる。また、FSがスパースになるように、FSのL1ノルムによる正則化をロスに加える。閾値\deltaを下回った重みは更新しないようにする。こうすることによって、フィルタの不要な部分を削るように学習が進んでいく。

推論時には、このFSと重みをマージさせた重みを使用する。追加の計算コストは発生しない。

実験

Group-wise Pruningとの比較

Group-wise Pruningと比較して、提案手法SWPの方が精度を維持しつつプルーニング可能であることが示されている。
著者らはこの結果をもとに、Group-wise Pruningでは各フィルタの独立性の仮定が崩れ、表現力が低下しやすいと主張している。

各種プルーニング手法との比較

下表にはそれぞれCIFAR-10, ImageNetでの比較結果が示されている。
近年の各種プルーニング手法と比較して、パラメータ数・FLOPSどちらにおいても優れた結果となったとのこと。

フィルタの可視化

VGG19のフィルタを可視化した結果が下図である。図中左側が入力側の層、右側が出力側の層を表している。
中間部分の層では多くのストライプが削除されていることから、中間の層での冗長性が高いことを示唆していると著者らは述べている。

実装

Pytorchによる著者らの実装が公開されている。
https://github.com/fxmeng/Pruning-Filter-in-Filter

Discussion

ログインするとコメントできます