スキップしてメイン コンテンツに移動

「A Survey of Model Compression and Acceleration for Deep Neural 」の邦訳と感想 [その1]

今回は以前話した本ブログのコンセプト「基礎と応用」の応用編ということで、
「A Survey of Model Compression and Acceleration for Deep Neural Networks」の邦訳と簡単な感想を記載しようと思う。
前の投稿ではDeepLearning x HWについての論文をまとめると書いたが、今回はどちらかというとHWに適用する前の段階で、いかにして論理的または経験的にネットワークを圧縮、高速化するかという内容だ。もちろん本文で紹介されている研究には、特定のアーキテクチャに特化させた手法を提案しているものもある。
この論文はIEEE信号処理マガジンに掲載され、2017年10月にarXivに公開されたものである。(この情報あってるかな?? (;^ω^) )
なお、筆者の英語力は期待できるほどのものではないので、あくまで参考程度にとどめておくことをおすすめする。むしろ間違った解釈があればご指摘頂きたい。(´・ω・`)
論文は全部で9章からなるので、1〜2, 3〜5, 6〜7, 8〜9それぞれ分割して、合計4回くらいの投稿にしようと考えている。今回は概要と1、2章を対象にする。

A Survey of Model Compression and Acceleration for Deep Neural Networks

Yu Cheng, Duo Wang, Pan Zhou, Member, IEEE, and Tao Zhang, Senior Member, IEEE
Paper URI

Abstract

近年、DCNN (Deep Convolutional Neural Network)は多くの画像認識タスクにおいて、めざましい成功をおさめている。しかし、実存するDCNNモデルの高価かつメモリ集中な計算は、小メモリ資源のデバイスやレイテンシ要求の厳しいアプリケーションで利用することを難しくしている。このような中で、深いモデルに対してそのモデルパフォーマンスを下げることなく、モデルの圧縮や高速化を実施することは自然な発想であり、ここ数年では特に優れた進展が見受けられる。この論文ではCNNモデルの縮小化と高速化における最先端の技術を調査した。これらの技術は大きく以下の4つに分類される。
  1. parameter pruning and sharing
  2. low-rank factorization
  3. transfered/compact convolutional filters
  4. knowledge distillation
モデルのパラメータプルーニングとシェアリングについてはじめに述べ、その後他の技術について紹介する。それぞれの性能、関連するアプリケーション、利点と欠点について、洞察に富んだ解析を提供する。その後、最近で非常に成功したい手法をいくつか検討する。例えば、dynamic network や stchastic depths networks などについてである。次に、進化的行列および、モデルの性能評価に利用される主要なデータセット、近年のベンチマークの効用についてまとめた。最後に、残された課題とこのトピックの今後の展望について議論する。

-----------------------------------------------------------
おお、概要だけでも十分に面白そうだ(^q^)
英語が読みやすいのも日本人としてはポイントが高い。
ちなみに、主の感想はブロックを分けて書いていくことにする。
他に良い区切り方を知っている方は教えてほしい。
-----------------------------------------------------------

Introduction

ここ数年でDNNはたくさんの注目を集め、異なるアプリケーションに応用されながら、その多くにおいて劇的な精度向上を果たしている。これら多くは数百万から数十億のパラメータに依存しており、GPUの超高速計算能力が重要な役割をはたしている。
例として、60百万のパラメータを含んだAlexnet (2012)や、1億のパラメータをもつFacebookの顔認識Deep face (2014)等があり、これらを良い結果を得られるようにトレーニングするには多くの時間を消費する。また、全結合層を含んだアーキテクチャのパラメータ数は10億にも達する。参照
より多くのレイヤーとノードを持つ大規模なニューラルネットワークが検討されるにつれて(特にオンライン学習やインクリメンタル学習などのリアルタイムアプリケーションにおいて)、ストレージと計算コストの削減がますます重要になってきた。また、近年で目撃されるVR, AR, ウェアラブルデバイスの凄まじい進歩は、研究者たちに「ディープラーニングステムを制限された計算資源しかもたないデバイスに搭載する」という根本的な課題に挑戦する機会を与えている。効率的なディープラーニング手法は、AI分野における分散システムや組み込みデバイス、FPGAに大きな影響を与えている。例えば、ResNet-50はそれぞれの画像の計算において、95MBのメモリ容量とそれ以上の 浮動小数点の積算を必要とするが、その冗長な重みを排除することでパラメータを75%、計算時間を50%に抑えつつ、通常通りに動作させることが可能である。
これらの目標を達成するには、機械学習や最適化、コンピュータアーキテクチャ、データ圧縮、インデックス作成、ハードウェア設計など、多くの分野にまたがる統制されたソリューションが必要である。この論文ではディープラーニングの最新の圧縮法と高速化についてレビューし、上記のアプローチを以下の4つに分類した。(概要で既出)
  1. parameter pruning and sharing
    モデルパラメータの影響しないパラメータを削除することで、冗長性を減らす。
  2. low-rank factorization
    行列、テンソル分解を利用して深いCNNにおける有益なパラメータを見積もる。
  3. transfered/compact convolutional filters
    データの保持と計算の複雑性を削減ための、特別な構成のコンボリューションフィルタを設計する。
  4. knowledge distillation
    蒸留を利用して、大きなネットワークの出力を再現するような小さなネットワークを学習する。
4つのタイプの要約を以下の表に示す。なお、1,2,4は全結合層とコンボリューション層の双方を含むネットワークに対して比較可能な性能を達成しており、3はコンボリューション層対してのみ設計される。2はCPU/GPU環境で容易に実装でき、1は各タスクごとに異なる手法を複数組み合わせて実現する。
enter image description here
Yu Cheng, Duo Wang, Pan Zhou, Member, IEEE, and Tao Zhang, Senior Member, IEEE, “A Survey of Model Compression and Acceleration for Deep Neural Networks,” TABLE Ⅰ

それぞれの手法は独立に設計されており、互いに補完するができる。例えば、tranfered layersとparamerter pruning & sharingの組み合わせと model quantization & binarizationとlow-rank apporoximationは共に利用することができ、さらに高速化が可能である。それぞれのテーマ、特性、利点、欠点については、続くセクションで述べていく。

-----------------------------------------------------------
今までこういった圧縮手法を個人的に分類してきたけれど、
ここでは綺麗に分類されている!!(^q^)
新しい手法も今後この手法で分けてみることにしよう。
また組み合わせのパターンも参考になる。
-----------------------------------------------------------

Parameter pruning and sharing

初期の研究で、ネットワークのプルーニングがそのネットワークの複雑性の削減とオーバーフィッティングに対処することに対して効果的であることが示された。その後、DNNモデルを圧縮してモデル性能にとって重要でないパラメータを取り除くことが広く研究されるようになった。
これらのテクニックは更にmodel quantization and binarization、parameter pruning and sharing、designing structural matrixの3つのカテゴリに分類することができる。

Quantization and Binarization

ネットワークの重みを表現するビット数を削減することで圧縮を行う方法である。
GongらWuらはK平均スカラ量子化をパラメータに適用した。Vanhouckeらはパラメータの8-bit量子化することで、僅かな精度の低下で 大幅に高速化できることを示した。論文Deep learning with limited numerical precisionでは確率的ラウンディングによる16-bitの固定小数点表現により、僅かな分類誤差で著しいメモリサイズの圧縮を実現した。
Deep Compression は初めに重要ではないコネクションを刈り取り、疎結合なネットワークを再トレーニングする手法である。次に、更なる圧縮のため、weight sharing によってコネクションを量子化してハフマン符号化を適用する。下の表が示すように、普通にニューロンの接続を学習させた後に小さな重みを削減するフィルターをかける。最後に疎結合を保ったまま再度ネットワークをトレーニングする。
enter image description here
Yu Cheng, Duo Wang, Pan Zhou, Member, IEEE, and Tao Zhang, Senior Member, IEEE, “A Survey of Model Compression and Acceleration for Deep Neural Networks,” Fig. 1
Towards the Limit of Network Quantizationでは、ヘッシアン重みをネットワークの重みの重要度を測るために利用する手法とその量子化誤差の平均によりネットワークのパラメータをクラスタリングできることを述べている。
全ての重みが1-bitに量子化されたケース(binary weight neural network)には、多くの研究が存在する。例えば、BinaryConnectBinaryNetXNORNetなどがある。これらの主要なアイディアは直接CNNをバイナリ化された重みまたは活性を学習することである。また、Deep neural networks are robust to weight binarization and other non-linear distortionsでは、誤差逆伝播によりトレーニングされたネットワークが、バイナリ化を含む特定の重みの歪みに対して復元力を持つことを示した。

欠点
バイナリ化されたネットワークは大きなGoobLeNetのような大きなCNNを扱う時に急激に精度が落ちる。また他の問題点として、既存のバイナリ化スキームは単純なマトリックスの近似を基にしていること、量子化の影響による精度の低下を無視していることも挙げられる。
この問題に取り組むために、Loss-aware Binarization of Deep Networksはproximal newton algorithm !? (^q^) を導入して、ヘッシアンの対角近似を用いてバイナリ重みの誤差を直接最小化する。Neuralnetworks with few multiplicationsは確率的に重みのバイナリ化と隠れ状態の計算における乗算を符号変化に変換することで、トレーニング時の浮動小数点の積算を減少させた。

-----------------------------------------------------------
終盤は読んだことのない論文もあり、知らないことが多かった。
proximal newton algorithmの邦訳が分からん。( ;∀;)
そもそもnewton algorithmって何? ニュートン法のこと??
最後の2つはしっかり読んでみたいなー
-----------------------------------------------------------

Pruning and Sharing

ネットワークの圧縮と共有はその複雑性を減らすこととオーバフィッティング問題に対処することでよく利用されてきた。初期のプルーニングのアプローチにBiased Weight Decay がある。またOptimal Brain DamageOptimal Brain Surgeonメソッドは損失関数のヘッシアンに基づいてコネクションの数を減らし、Weight Decayのような方法で行われるプルーニングより、桁違いに高い精度を与えることを示唆した。
プルーニングにおけるの現代的なトレンドは、プレトレインCNNモデルの冗長かつ有用でない重みを刈り取ることである。例えば、Srivivas and Babuはニューロン間の冗長性を探索し、データ依存でないプルーニング手法を示した。Henらはネットワーク全体でパラメータとオペレーションの合計数を削減することを提案した。Chenらは低コストのハッシュ関数により、重みをパラメータを共有するためのハッシュバケットにグループ化する手法(HashedNets model)を提案した。また、Soft Weight-Sharing for Neural Network Compression ではsoft-weight sharingに基づく単純な正則化メソッドが提案された。これは量子化とプルーニングを一つの単純なトレーニングプロセスに含めたものである。
上記は全てニューロンのコネクションをプルーニングする手法であったが、それらの他に注目を集めているのが、スパース制約加えたコンパクトなCNNのトレーニングである。これらの制約は典型的に、\(l_1\) または\(L_2\)ノルムの正規化の最適化問題として導入される。Fast ConvNets Using Group-Wise Brain Damageの研究では、群スパース制約をコンボリューションフィルタに課すことで、brain Damageの構造を成している。すなわち、グループ毎にコンボリューションカーネルのエントリをプルーニングする。WenらはSSL(Structured Sparcity Learning)を導入してフィルタからチャンネル、層にまで及ぶ削減を行った。
上述した全ての研究がフィルタレベルのプルーニングにおいて\(l_0\) または\(l_1\)ノルム正規化を用いる一方で、Pruning Filters for Efficient ConvNetsでは\(l_1\)ノルムを重要でないフィルタの選択と削除に利用している。

欠点
上記の研究はプルーニングとシェアリングにおいて、いくらか潜在的な問題を抱えている。まず、\(l_0\) または\(l_1\)正規化は収束により多くのイテレーションを必要とする。また、全てのプルーニング基準は層における感度を手動で設定する必要がある。これらの設定はパラメータの微調整を要求するので、幾つかのアプリケーションにおいて非常に面倒になる可能性がある。

-----------------------------------------------------------
結構知らない研究も多かった!
特にbrain DamageとSSL, soft-weight sharingについては後に調べてみたい。
SSLはgithubにコードがあったが、Caffeで実装されていて泣いた。( ;∀;)
https://github.com/wenwei202/caffe/tree/scnn
-----------------------------------------------------------

Designing Structural Matrix

全結合層のみを含むアーキテクチャのパラーメタ数は十億に達することもあり、しばしばメモリ消費の観点からボトルネックになる。これらの内部にある冗長性のあるパラメータを探索することは非常に重要である。
これらのネットワークの層は非線形変換 \(f(x,M) = \sigma(Mx)\) を利用する。\(\sigma(\cdot)\)は要素ごとの非線形関数 であり、\(x\) は入力ベクトル、\(M\)は \(m \times n\) のパラメータ行列である。この\(M\)が巨大な汎用密行列である時、\(mx\) パラメータの格納と行列-ベクトル積の計算コストは \(O(mn)\) 時間となる。従って、直感的なパラメータのプルーニング方法は \(x\)をパラメータ化された構造化行列とすることである。 \(mn\)より十分に小さいパラーメタで記述できる\(m \times n\) 行列のことを構造化行列と呼ぶ。概して、この構造はメモリコストを減らすだけではなく、高速行列-ベクトル積(fast matrix-vector multiplication)により、インファレンス、トレーニング、勾配における計算を劇的に高速化する。
上記に方向性に則して、An exploration of parameter redundancy in deep networks with circulant projectionsとFast neural networks with circulant projectionsでは、競争力のある誤差率を保ちながら、circulant projectionsを用いた単純で効率的なアプローチを提案した。ベクトル\(r = (r_0, r_1, \cdots, r_{d-1})\)が与えられる時、その巡回行列 \(R \in R^{d \times d}\)が以下のように定義される。
enter image description here
これにより、メモリコストは\(O(d^2)\)の代わりに\(O(d)\)となる。この巡回構造はFFTを利用して高速に計算することも可能である。\(d\)次元のベクトル\(r\)と上記の1-layer巡回ニューラルネットワークの計算複雑度は\(O(d \log d)\)となる。
全結合相の行列-ベクトル積の再パラメータ化の革新的な手法であるAdaptive Fastfood transformがDeep fried convnetsで導入された。Adaptive Fastfood transform matrix \(R \in R^{n \times d}\)は以下で定義される。
\[ \begin{equation} R = SHGI\hspace{-.1em}IHB \end{equation} \]
\(S\), \(G\), \(B\)はランダムな対角行列で、\(I\hspace{-.1em} \in \{0,1\}^{d \times d}\)はランダムな置換行列、\(H\)はアダマール行列である。Adaptive Fastfood transformを用いた、\(d\)を入力、\(n\)を出力とした全結合層の再パラメータ化はストレージコストを\(O(nd)\)から\(O(n)\)に、計算コストを\(O(nd)\)から\(O(n \log d)\)にそれぞれ削減する。
Structured Transforms for Small-Footprint Deep Learningでは、構造化行列の理論を用いた新しいparsimony(節約法??)の概念がもたらす効率性を示した。提案手法は、多次元コンボリューションに関連したテプリッツ行列や区分行列を含む、様々な他の構造化行列の類にも容易に拡張することができる。

欠点
これらのアプローチにおける潜在的問題の一つは、構造化された制約が精度の誤差を引き起こすことである。これは、その制約がモデルにバイアスをもたらす可能性があるためである。一方で、どのように適切な構造化行列を見つけるかも難しく、それらを求める理論的な方法も今のところ存在しない。

-----------------------------------------------------------
主の専門から少しそれた話題も多く、よく理解できていない部分が多い。
また、正しい日本語訳が分からない部分も多かった。
いつもは専門用語の英単語は訳さずにそのまま使っているので、
ここでも無理に訳さないほうが良いのかもしれない。(^_^;)
気になる方はぜひ原著を参照していただきたい。
-----------------------------------------------------------


本ブログに対するご意見や間違いの指摘などがありましたら、ぜひコメントください。TwitterでもOKです。皆で議論を深めて行けるような場にしていきましょー。

コメント

このブログの人気の投稿

「A Survey of FPGA Based Neural Network Accelerator」の邦訳

A survey of FPGA Based Neural Network Accelerator 今回は2/17日にドワンゴさんで行われたFPGAXでの発表で紹介したサーベイ論文「A Survey of FPGA Based Neural Network Accelerator」の邦訳を掲載することにする。 稚拙ながら発表スライドも以下にあるので興味のある方はぜひ御覧ください。( ´∀`) https://www.slideshare.net/leapmind/an-introduction-of-dnn-compression-technology-and-hardware-acceleration-on-fpga-88557866 A Survey of FPGA Based Neural Network Accelerator Kaiyuan Guo, Shulin Zeng, Jincheng Yu, Yu Wang, Huazhong Yang https://arxiv.org/abs/1712.08934 Abstruct ニューラルネットは画像やスピーチ、ビデオ認識などの領域に適用され、良い結果を残している。しかし、その計算のストレージや複雑度が、アプリケーションでの活用を難しくしている。CPUでの計算は難しいため、GPUが最初の選択肢となる。 一方で、FPGAを基にしたアクセラレータも研究の対象となってきている。なぜなら、特化したハードウェアの設計はGPUを速度とエネルギー効率で超えるための、有力な選択肢であるためである。様々なFPGAベースのアクセラレータがソフトウェアとハードウェアの最適化手法を用いて提案されてきている。本稿では、それらの全体図とそれらの主要な技術の要約を行う。この調査はFPGAベースのNNアクセラレータについて、そのソフトウェア側からハードウェア側、回路レベルからシステムレベルに渡

GPUを支える技術読み始めた 第5章[前半]

GPUを支える技術読み始めた 第5章[前半] 新年の休みもとうに終わり、皆さんどうお過ごしだろうか。 ちなみに主は年末読む予定であった本や論文を全く消化できずに今に至ってしまった。 年末年始は時間があったので、ひたすら読んでいたはずなのになぜだ。。_| ̄|○ 読むのが遅いのがいけないのか?翻訳するのが遅いのか??それともそれをまとめるのに時間がかかっているのか。 おそらく全て当てはまるが、時間がかかるものは仕方がないので、少しずつ慣れていくしかないなー。。(-_-;) 余談だが、年末にブログ執筆環境を再構築した。 今まではwebエディタの Classeur を利用していたが、やはり純粋なWebアプリケーションなのでレンダリングやアップデートに問題があった。そこで、今までも利用していたAtomを少しカスタマイズして試してみたが、どうにも動作が重くかつ、vim-modeがいい感じにならずに残念に思っていたところ、vscodeのことを思い出した。どちらもエレクトロンベースだが、vscodeはAtomより全然軽く、markdownプラグインも豊富にあるので、すぐにmarkdown+mathjax環境を構築することができた。いやはや、世の中は便利になったものだ(^ω^) せっかくなので、下に執筆環境のスクリーンショットを自慢げに貼ってみようと思う。(markdownは頻繁に見る必要はないので、普段はプレビューは別のタブで開いている) もしかして、こういうことしてるから時間がかかるのかな??/(^o^)\ それでは、本題に戻ろう。 今回はGPU支える技術の第5章だ。4章と同じく楽しみにしていた章なのでじっくり読んでいきたい。 なお今回も長い章なので、前半と後半に分けてまとめと感想を書いていく。 第5章 GPUプログラミングの基本[前半] GPUの超並列プロセッサでプログラムを実行するには、超並列で実行でき

「VTA: An Open Hardware-Software Stack for Deep Learning」の翻訳と感想

tech_report VTA: An Open Hardware-Software Stack for Deep Learning の翻訳と簡単な感想を書きました(^o^) TVM開発チームには許可を頂いていますが、もし誤訳があったら教えてください。原文は以下です。 https://arxiv.org/abs/1807.04188 1. VTAとは Versatile Tensor Acceleratorの略。 汎用的かつ高速、効率的なHW Deep learningアクセラレータを提供するスタックの総称。 提供されるアクセラレータはプログラム可能であり、柔軟にカスタマイズができる。 VTAは生産性重視で高レベル記述が可能なDLフレームワークと性能重視で低レベルな基盤ハードウェア(FPGAなど)におけるブリッジになることを目的としている。 そのため、アクセラレータ以外にもドライバやJitランタイム、TVMに基づいた最適化済みコンパイラ環境も提供しており、End-to-Endで動作する。 また、FPGAにデプロイするためのインターフェイスや振る舞いHWシュミレーション機能も含まれている。 どのような人や用途に有効なのか HWデザイナとコンピュータアーキテクト 最適化コンパイラのリサーチャ Deep learningのリサーチャ 全体構成 NNVM Intermediate Representation TVM Intermediate Representation VTA JIT Runtime VTA Instruction Set Architecture VTA Hardware Micro-Architecture 2. VTA Hardware Architecture VTAは他の主要なDLアクセラレータと同様に、密線形代数演算を高速に実行できるように設計されている。(Google TP