MLSys 2020という学会で発表された面白そうな論文を読んだ。タイトルは「What is the State of Neural Network Pruning?」で、Neural Network Pruningについてメタアナリシスを行った論文。
概要
pruningに関するメタアナリシス論文。標準化されたベンチマークやmetricsが無いことが分かった。そこでShrinkBench(https://github.com/jjgo/shrinkbench)というオープンソースのpruning評価用のフレームワークを作成した。
著者らは81本のpruning論文を調査したところ、データセットやネットワークの比較の無いものや、他のpruning技術との比較が無いものなどが多く、適切にどの手法が良いのかを比較することが難しかった。
Pruningについて
pruning手法は大体pruneとfine-tuneを繰り返す手法が多い。 pruneの仕方にはsparsity structure, scoring, scheduling, fine-tuningの4つの観点で選択ポイントがある。
structure
ランダムにパラメータを削減する手法だと、現代のH/Wでは速度向上につながらない可能性がある。そこで、何らかの構造的なグルーピングからパラメータを削減する手法がある。
Scoring
重みの係数やgradientsなどから不要なパラメータを抽出するのが一般的。局所的にスコアを比較する手法や、大局的にスコアの低いパラメータを探し出すなどの手法がある。
Scheduling
何ステップごとに枝刈りを行うかも一つのポイント。複雑な関数によってSchedulingを決定する手法も出てきている。
Fine-tuning
枝刈り前の状態からファインチューニングするのが一般的だが、もっと前の段階や初期状態からファインチューニングする手法も提案されている。
評価指標
ストレージサイズを重視するのか、推論速度を重視するのかなど、様々な指標が存在しうる。そこには効率と質のトレードオフが存在する。FLOPsや画像分類のTop-1~5の性能で測られることが多い。
Lessons from the Literature
Pruningの効果
論文を調査していくと、pruningは効果があるということが分かった。小規模なpruningによって性能が向上した例もあったという。
ファインチューニングする手法の方がランダムに初期化して再学習するよりも効果的な例の方が多い。
パラメータ数を固定して比較した場合、スパースなモデルが密なモデルよりも性能がいいことがある。
しかし、モデルアーキテクチャを改善した場合(ResNet vs VGGのようなケース)の方がpruningよりも効果的な傾向にあった。
Missing Controlled Comparisons
しっかりとした比較が行われることが少ない。これは標準化された結果報告基準がないためだろうと述べている。
2010年以前の論文と比較されづらいのに加えて、近年の手法であっても比較されていない論文は多い。データセットもImageNetやMNISTで比較されることが多いが、MNISTはグレイスケールだし単純なモデルでも99%の精度が出たりするので、実験対象として適切ではない。データセットと評価指標が論文によってバラバラなので適切に比較することが困難である。また、モデルやデータセットが同じであっても、augmentationやハイパーパラメータ、使用するライブラリによって差が出るので直接比較が難しい。さらに、微妙な違いであっても、改善率1%以下を報告している論文が多いので、もともとのモデルの性能で大きく結果が左右されることになる。
そのほかにも、ResNetやVGGと述べられても、複数のバリエーションが存在するので一意に特定することができない。また酷いものだと存在しないようなアーキテクチャを既存のモデルとして述べているようなものもあったという。
それに加えて、 モデルの圧縮率や速度向上も論文によって微妙に定義が異なっていることもあり、比較の妨げとなる。
ではどうするか?
著者らは以下のような指針を定めて、手法を比較することを提案している。
- アーキテクチャ・デーセット・メトリクスを正確に決める。
- 少なくとも3つのペアの大規模データセット・最近のモデルで比較する
圧縮率と速度向上の計算式を定義する - ImageNetではTop-1とTop-5を報告する
- メトリクスを報告する際は、prune前のモデルの同じメトリクスを報告する
- 比較対象とする手法と一緒にトレードオフのカーブを図示する
- トレードオフカーブは5段階の圧縮率でプロットする
- 報告する数値は平均と標準偏差も出す
- 同じライブラリ、データ読み込みなどできるだけコードを比較対象とそろえる。
これらの比較が出来る環境としてShrinkBenchというフレームワークを作成している。
ShrinkBenchを使って実験したところ、以下のような発見があったという
- 圧縮率と速度向上のトレードオフは完全に相関するものではない。なのでどちらか一方だけではなく、両方を報告する必要がある。
- データとモデルの組み合わせによって、有効なpruning手法が変わる場合がある
- 初期モデルの重みによって手法の優劣が変わる場合がある。
所感
pruningは近年非常に重要な研究分野で論文も多く出ているが、このようにメタアナリシスを行うとどの手法が良いと一概にいうことは難しいかもしれないと感じた。
ただ新しい手法を考案しても計算量の問題もあって多くの既存研究と比較するのはコストが大きいため、この論文で提案されているようなShrinkBenchのようなフレームワークを研究者が活用して、統一的なスコア報告がなされるようになると研究がもっと進みやすいかと思われる。