Laboro.AI

エンジニアコラム

広い技術領域をカバーする当社の機械学習エンジニアが、アカデミア発のAI&機械学習技術を紹介&解説いたします。

ディープラーニングを軽量化する「モデル圧縮」3手法

機械学習エンジニア 内木 賢吾
2020.2.13

概 要

ディープラーニングは、機械学習の中でもとくに研究が盛んに行われているテクノロジー分野の一つです。アカデミアでの研究だけでなく、企業がAIを導入・活用するにあたってもディープラーニングを採用したAIモデルの開発が多数行われていますが、とくに近年注目を集めるエッジAIの分野では、いかにそのモデルを軽量化し、技術が持つ可能性を最大限に引き出せるかが重要な検討ポイントとなってきました。

このコラムでは、ディープニューラルネットワークのモデルを軽量化するための技術「モデル圧縮」について、その概要を紹介したいと思います。まず、モデルの軽量化が必要とされる背景について触れ、その後、モデル圧縮技術の代表的な3つの手法について説明していきます。

目 次

高まるエッジAIへの期待
エッジAIの限界を払拭する「モデル圧縮」
モデル圧縮手法
  1.Pruning(枝刈り)
  2.Quantize(量子化)
  3.Distillation(蒸留)
まとめ

高まるエッジAIへの期待

近年、現場のデバイス(エッジデバイス)に機械学習のモデルを実装し、その場で予測などを行うエッジAIが注目を集めています。エッジAIの普及によって、例えば、製造ラインの部品検査業務での異常検知やアクティビティセンシングなどリアルタイム応答が重要となるシーン、さらには自動運転で予想される通信不安定時の予測処理が可能になるといったことが期待されています。

クラウドを利用した従来の予測処理とエッジAIとの違いを掴むため、それぞれを図に示しました。図1にはクラウドを用いる一般的な予測処理の流れを、図2にエッジAIを用いる予測処理の流れを示しています。

なお、それぞれの図では学習済みのモデルを用いることを想定しています。また、通常「エッジ」という用語は「端末の近く」という意味で用いられ、エッジサーバーを用いた予測もエッジAIと呼ばれますが、本コラムでは説明を簡単にするため、エッジデバイスに焦点を当てて説明していきます。

図1 クラウドを用いる予測処理の流れ
図2 エッジAIによる予測処理の流れ

エッジAIを用いることで、エッジデバイスとクラウド間の通信(図1の2、4の処理)が不要になるため、通信遅延や通信障害の影響をなくすことができます。加えて、通信コストを削減できるメリットもあります。

今後、5G通信の普及によって低遅延通信が実現すれば、リアルタイム応答に対する課題はある程度解決されるはずです。しかし、それでも遅延が出る状況はあり得ますし、通信の安定性にはやはり不安が残ります。さらに、クラウドにアップロードできない機密情報を扱うといったシーンも考慮すると、エッジデバイスで処理をしたいというニーズはますます高くなることが予想されます。

では、こうした必要とされる状況が想定されるにも関わらず、エッジAIが今現在それほど普及していない理由はどこにあるのでしょうか。

エッジAIの限界を払拭する「モデル圧縮」

エッジAIの普及を足止めする原因としては運用コストの課題ももちろん考えれますが、乗り越えるべき最大の課題、それはエッジデバイスの処理能力の限界にあります。

IoT端末のようなエッジデバイスに用いられる機器は、クラウドなどのGPUサーバーと比較して処理能力が低く、複雑な処理には向いていません。一方で、ビジネス現場で求められる画像分類や物体検出といったタスクに用いられるディープラーニングは、層を増やすことで性能が向上しますが、層が増えるということはモデルのパラメータが増えるということで、その結果、メモリ使用量や計算量も伴って増加していきます。限られたリソースの中で動作させなければならないエッジデバイスやモバイル端末を単独で学習・推論させるためには、限界があるのが現状です。

最近ではNVIDIA TensorRTやAmazon SageMaker NeoといったエッジAI向けの開発ツールやサービスが公開されており、NVIDIA Jetson Nanoのような小型で安価なGPU開発キットも購入できるようになりました。たしかに、こうしたツールを活用することでエッジAIが力を発揮するシーンも出始めている一方、やはり高いレベルでの成果が求められるシーンでは、エッジAIでは対応できなことも事実です。極端な例ではありますが、先日Google Brainが発表しSoTA(State-of-The-Art)を達成した画像認識モデル「Bit」(参考文献①)は、なんと10億個という巨大なパラメータ数を持っていることで話題になりました。

モデルの精度と計算量はトレードオフの関係にあります。いかにモデルの精度を保ったままメモリ使用量を削減し、処理時間を高速化できるかが、エッジAIにおいては非常に重要な検討ポイントになります。

そこで考えられる手法が、今回のテーマである「モデル圧縮」です。モデル圧縮は、メモリ使用量の削減によってエッジデバイス上で推論できるようになることを実現したり、あるいはパラメータ数を少なくすることによって計算量を小さくさせる、すなわち学習や予測に要する時間を減らすことで効率的な検証ができるようになるといったメリットが期待できる手法です。

では、そのモデル圧縮の代表的な手法を3つ紹介していきましょう。

モデル圧縮手法

モデル圧縮について、今回は代表的な手法であるPruning(枝刈り)Quantize(量子化)Distillation(蒸留) の3つの手法ついて簡単に説明します。

1.Pruning(枝刈り)

ディプニューラルネットのモデルは、下図のように各ノードが密に結合しています。 そのノード間の重みが小さい箇所の接続を削除する、または影響の小さいノードを削除することでパラメータ数を削減する手法をPruning(プルーニング:枝刈り)と呼びます。

図3 Pruningによる生成されるネットワークの例

図3がPruningのイメージです。ノードや重みを削除することでパラメータ数を減少させます。記憶する必要があるパラメータが減少することによって、計算する回数が削減され、メモリ使用量が少なくなります。その結果、モデルの軽量化と処理の高速化が期待できます。

どの接続を削除するのかについては様々な手法が提案されています。「重みの絶対値が小さいものを削除する」手法が一般的で、性能も良いとされています(参考文献②)。また、Pruningによって80%〜90%程度の接続を削除できる場合もあります。なお、一般的にはPruningだけでは精度が落ちてしまうため、Pruning後に再学習を行うことで元の精度を保つことが行われます。

2.Quantize(量子化)

Quantize(クオンタイズ:量子化)とは、重みなどのパラーメータをより小さいビットで表現することで、モデルの軽量化を図る手法です。使用するビットを制限することでネットワークの構造を変えずにメモリ使用量を削減できます。使用する数字を簡単な数字に置き換えるようなイメージを持つとわかりやすいかと思います。図4にQuantizeの例を示します。

図4 Quantizeによる重みの量子化の例

TensorFlowやPyTorchなどのディープラーニングのフレームワークでは、32ビット浮動小数点精度(float型)を使用することがほとんどです。近年の研究では、8ビットの量子化であれば1%程度の性能低下であることが報告されています(図5: 1×4の意味は、(重みの1ビット)×(活性化関数4bit)を意味する)。中でも使用するビットを1〜2ビットにすることで乗算をXNORゲートで表現することができるため、ASICやFPGAなどでは計算効率が大きく向上します。ただし、使用するビットを小さくするほど精度が低下する可能性が高いことに注意が必要です。

図5 量子化によるビット幅と精度低下の関係(参考文献③

最近の研究では、学習時に重みや活性化関数のパラメータを量子化することで、より計算効率の高いネットワークを構築できることが示されています(参考文献④)。

3.Distillation(蒸留)

Distillation(ディスティレーション:蒸留)とは、大きいモデルやアンサンブルモデルを教師モデルとして、その知識を小さいモデル(生徒モデル)の学習に利用する方法です。これにより、大きいモデルに匹敵する精度を持つ小さいモデルを作ることが期待できます。つまり、一度学習したモデルの知識(予測結果)を別の小さいモデルに継承するということです。図6にDistillationのイメージを示します。

図6 蒸留のイメージ

Distillationでは、教師モデルの学習などで使用する正解ラベルをhard target、教師モデルの出力(スコア分布)をsoft targetと呼びます。生徒モデルを教師モデルに近づけるように学習するときに、hard tagetとsoft targetの両方を用いる場合やsoft targetのみを用いる場合があります。

soft targetを用いることがDistillationの大きな特徴です。これにより、hard targetに含まれない情報を含めて学習できるというメリットがあります。図6の例において、教師モデルの出力スコアが自動車:0.4、犬:0.0であることから「この画像は、車に似ている部分があり、犬に似ている部分はない」と捉えることができます。hard targetからは「この画像は、電車である」という情報しか含まれていません。つまり、soft targetから「電車とは、車輪があって、窓があって、…、」のような一般的な概念を学習できることが期待できます。このように、学習時の情報量を増やすという観点からモデルを軽量化することが、PruningやQuaintizeとの違いです。

他にも、Distillationはモデル圧縮以外の用途にも応用できることが知られています。その一つにData Distillation(データ蒸留)と呼ばれる手法があります(参考文献⑤)。Data Distillationは、正解ラベルのないデータに対する教師モデルの予測結果を正解ラベルとして扱い、生徒モデルの訓練を行う手法です。この手法により、従来では利用できなかった正解ラベルのないデータを有効活用でき、かつ、精度向上に有効であることが示されています。

まとめ

本コラムでは、エッジAIの視点からモデル圧縮技術の必要性を説明し、代表的な手法であるPruning(枝刈り)、Quantize(量子化)、Distillation(蒸留)の3つの手法ついて説明しました。

必ずしも全ての状況においてモデル圧縮技術が必要になるわけではありませんが、モデルを軽量化することによってディープラーニングを活用できる可能性が広がることは間違いありません。精度と計算量のトレードオフを解消するため、モデル圧縮はディープラーニングにおける重要な手法のひとつと言えます。

参考文献

Large Scale Learning of General Visual Representations for Transfer
Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
A Survey of FPGA Based Neural Network Accelerator
Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations
Data Distillation: Towards Omni-Supervised Learning