Day21. エッジでディープラーニングを可能にする「モデル圧縮」技術
ひとりでIoTまるっとチュートリアル Advent Calendar 2018 21日目
IoTに使われる端末は、処理能力がそこまで高くないことが多く、複雑な処理ができないとされてきました。でも、やりたいじゃないですか。流行中のディープラーニングを、エッジでできれば嬉しいじゃないですか。今回は、このように、エッジで複雑な処理をやるための手法「モデル圧縮」技術についてです!
目次
・ディープラーニングになぜモデル圧縮が必要なのか
・モデル圧縮の3要素
・Pruning(枝刈り)
・Quantization(量子化)
・Distillation(蒸留)
ディープラーニングになぜモデル圧縮が必要なのか
ディープラーニングは、一般的には層を重ねれば重ねるほど、精度が増していきます。画像認識コンテストでも、年々層が増えていて、まさにサーバー能力で殴り合いをするような状況です。
(画像は SQLML : Convolutional Networkより引用)
しかし、層が増えるということは、計算量が増えるということです。いうまでもありませんが、ラズパイなどのマイコンはディープラーニングなどの計算をするGPUサーバに比べて恐ろしいほどにスペックが低いです。なので、学習はおろか、推論もできません。きちんと動くようにするためには、入力に対して実用的な範囲で結果を返してくれるように、モデルの圧縮・軽量化が必要です。
モデル圧縮の3要素
精度と計算量というのはトレードオフの関係にあります。精度を保ちながらモデルを軽量化し、処理速度を上げることが、この領域における至上命題なのです。ここでは、主流とも言える3つのモデル圧縮方法について簡単に説明します。
1. Pruning
2. Quantize
3. Distillation
1. Pruning(枝刈り)
ディープラーニングでは、計算ノードが下図のように密に結合しています。各層から次の層に、関係しているところは重みを大きく、関係の薄いところは重みを小さくしながら、層のパラメータが更新されていきます。このとき、「関係の薄いところはもう、0にしてもいいんじゃない?」というのが枝刈りです。
枝刈りをして、また学習させてパラメータチューニングを繰り返して、精度を保ちながらモデルを軽量化することが出来ます。
実際にAlexNetというDNNのアーキテクチャを使って、ImageNetのタスク(写真を1000カテゴリから分類する)を学習させたときの精度とモデルの大きさでがこちら(TOP-5 Errorというのは、推論で選んだ上位5つのうち、正解が無い割合です。)
(※Learning both Weights and Connections for Efficient Neural Networks
より引用)
精度が殆ど変わらず(むしろ良くなっている・・・?)モデルを圧縮できている事がわかります。アイディアもシンプルで、理にかなった手法ですね。
2. Quantize(量子化)
モデルの重みは通常任意の実数値の範囲で計算されますが、それを-1,1の2値に限定する(量子化する)ことで、計算負荷を下げることができます。
参考 : BinaryConnect: Training Deep Neural Networks with
binary weights during propagations
3. Distillation(蒸留)
2015年、Hinton教授が出した"Distilling the Knowledge in a Neural Network"という論文。出た当初より、じわじわとその手法が拡がり始め、IoTなどの文脈でエッジコンピューティングが流行し始めてから認知度が一気に上がった気がします。
図のように、学習済みのTeacherのスコアを、正則化項のように足し合わせることで、先生が今まで得た知見をうまく生徒に伝えようという試みです。
関連情報までうまく伝えようとしているので、シンプルな構成でも精度が上がったり、汎化性能が上がったりという効果が期待されます。
以上三点の概要をさらりとお伝えしました。今回は概論だけでしたが、より深く知りたい方は下記記事・スライドなどがおすすめです。是非ご覧になってください
参考
・モデル圧縮 : nico-opendata
・モデルアーキテクチャ観点からのDeep Neural Network高速化
また、「モデル圧縮×企業」という意味では、LeapMindは要注目企業です。
先日も、FPGAでディープラーニングを行うライブラリをオープンソースとして公開しました。
今後エッジコンピューティングで複雑なことをしようと思ったときに、動向をチェックしておくべき企業の一つです!
オープンソースを使ってエッジでディープラーニング
最近は、各種有名オープンソースでも、モデル圧縮や、軽量モデルの配布などの動きがあり、エッジデバイスでもディープラーニングができるようになってきています。ここでは紹介だけにしますが、興味ある人は試してみてはいかがでしょうか。私も時間を見つけて試してみます!
TensorFlow Lite
KerasCompressor
まとめ
IoTが広がるにあたって、エッジコンピューティング/フォグコンピューティングの分野はますます需要が増えていくと思われます。まだまだ発展的な分野ですが、実用に相当近い分野で、かなり将来性が高いところだと思うので、IoT関係に従事している方は定期的にチェックしておきたいですね。
明日から2日間は、今までのおさらいも兼ねて、IoTで遊んでみた事例についてご紹介します。アイディア次第で広がる可能性について感じてもらえれば幸いです。ではではっ
前の日 : エッジ/フォグ/クラウド コンピューティングの違いとメリット
次の日 : IoTで検証!ネズミ(デグー)は一日何m走るのか!?