要ディープラーニングは、機械学習の中でもとくに研究が盛んに行われているテクノロジー分野の一つです。アカデミアでの研究だけでなく、企業がAIを導入・活用するにあたってもディープラーニングを採用したAIモデルの開発が多数行われていますが、とくに近年注目を集めるエッジAIの分野では、いかにそのモデルを軽量化し、技術が持つ可能性を最大限に引き出せるかが重要な検討ポイントとなってきました。このコラムでは、ディープニューラルネットワークのモデルを軽量化するための技術「モデル圧縮」について、その概要を紹介したいと思います。モデルの軽量化が必要とされる背景について触れ、その後、モデル圧縮技術の代表的な3つの手法について説明していきます。近年、現場のデバイス(エッジデバイス)に機械学習のモデルを実装し、その場で予測などを行うエッジAIが注目を集めています。エッジAIの普及によって、例えば、製造ラインの部品検査業務での異常検知やアクティビティセンシングなどリアルタイム応答が重要となるシーン、さらには自動運転で予想される通信不安定時の予測処理が可能になるといったことが期待されています。クラウドを利用した従来の予測処理とエッジAIとの違いを掴むため、それぞれを図に示しました。図1にはクラウドを用いる一般的な予測処理の流れを、図2にエッジAIを用いる予測処理の流れを示しています。それぞれの図では学習済みのモデルを用いることを想定しています。通常「エッジ」という用語は「端末の近く」という意味で用いられ、エッジサーバーを用いた予測もエッジAIと呼ばれますが、本コラムでは説明を簡単にするため、エッジデバイスに焦点を当てて説明していきます。エッジAIによる予測処理の流れエッジAIを用いることで、エッジデバイスとクラウド間の通信(図1の2、4の処理)が不要になるため、通信遅延や通信障害の影響をなくすことができます。加えて、通信コストを削減できるメリットもあります。今後、5G通信の普及によって低遅延通信が実現すれば、リアルタイム応答に対する課題はある程度解決されるはずです。それでも遅延が出る状況はあり得ますし、通信の安定性にはやはり不安が残ります。クラウドにアップロードできない機密情報を扱うといったシーンも考慮すると、エッジデバイスで処理をしたいというニーズはますます高くなることが予想されます。した必要とされる状況が想定されるにも関わらず、エッジAIが今現在それほど普及していない理由はどこにあるのでしょうか。エッジAIの限界を払拭する「モデル圧縮」エッジAIの普及を足止めする原因としては運用コストの課題ももちろん考えれますが、乗り越えるべき最大の課題、それはエッジデバイスの処理能力の限界にあります。IoT端末のようなエッジデバイスに用いられる機器は、クラウドなどのGPUサーバーと比較して処理能力が低く、複雑な処理には向いていません。一方で、ビジネス現場で求められる画像分類や物体検出といったタスクに用いられるディープラーニングは、層を増やすことで性能が向上しますが、層が増えるということはモデルのパラメータが増えるということで、その結果、メモリ使用量や計算量も伴って増加していきます。限られたリソースの中で動作させなければならないエッジデバイスやモバイル端末を単独で学習・推論させるためには、限界があるのが現状です。Nanoのような小型で安価なGPU開発キットも購入できるようになりました。たしかに、こうしたツールを活用することでエッジAIが力を発揮するシーンも出始めている一方、やはり高いレベルでの成果が求められるシーンでは、エッジAIでは対応できなことも事実です。Brainが発表しSoTA(State-of-The-Art)を達成した画像認識モデル「Bit」(参考文献1)は、なんと10億個という巨大なパラメータ数を持っていることで話題になりました。モデルの精度と計算量はトレードオフの関係にあります。モデルの精度を保ったままメモリ使用量を削減し、処理時間を高速化できるかが、エッジAIにおいては非常に重要な検討ポイントになります。そこで考えられる手法が、今回のテーマである「モデル圧縮」です。モデル圧縮は、メモリ使用量の削減によってエッジデバイス上で推論できるようになることを実現したり、あるいはパラメータ数を少なくすることによって計算量を小さくさせる、すなわち学習や予測に要する時間を減らすことで効率的な検証ができるようになるといったメリットが期待できる手法です。そのモデル圧縮の代表的な手法を3つ紹介していきましょう。3つの手法ついて簡単に説明します。1.Pruning(枝刈り)ディプニューラルネットのモデルは、下図のように各ノードが密に結合しています。そのノード間の重みが小さい箇所の接続を削除する、または影響の小さいノードを削除することでパラメータ数を削減する手法をPruning(プルーニング:枝刈り)と呼びます。図3がPruningのイメージです。ノードや重みを削除することでパラメータ数を減少させます。記憶する必要があるパラメータが減少することによって、計算する回数が削減され、メモリ使用量が少なくなります。その結果、モデルの軽量化と処理の高速化が期待できます。どの接続を削除するのかについては様々な手法が提案されています。「重みの絶対値が小さいものを削除する」手法が一般的で、性能も良いとされています(参考文献2)。Pruningによって80%〜90%程度の接続を削除できる場合もあります。一般的にはPruningだけでは精度が落ちてしまうため、Pruning後に再学習を行うことで元の精度を保つことが行われます。2.Quantize(量子化)Quantize(クオンタイズ:量子化)とは、重みなどのパラーメータをより小さいビットで表現することで、モデルの軽量化を図る手法です。使用するビットを制限することでネットワークの構造を変えずにメモリ使用量を削減できます。使用する数字を簡単な数字に置き換えるようなイメージを持つとわかりやすいかと思います。図4にQuantizeの例を示します。Quantizeによる重みの量子化の例TensorFlowやPyTorchなどのディープラーニングのフレームワークでは、32ビット浮動小数点精度(float型)を使用することがほとんどです。1×4の意味は、(重みの1ビット)×(活性化関数4bit)を意味する)。中でも使用するビットを1〜2ビットにすることで乗算をXNORゲートで表現することができるため、ASICやFPGAなどでは計算効率が大きく向上します。使用するビットを小さくするほど精度が低下する可能性が高いことに注意が必要です。量子化によるビット幅と精度低下の関係(参考文献3)最近の研究では、学習時に重みや活性化関数のパラメータを量子化することで、より計算効率の高いネットワークを構築できることが示されています(参考文献4)。3.Distillation(蒸留)Distillation(ディスティレーション:蒸留)とは、大きいモデルやアンサンブルモデルを教師モデルとして、その知識を小さいモデル(生徒モデル)の学習に利用する方法です。これにより、大きいモデルに匹敵する精度を持つ小さいモデルを作ることが期待できます。一度学習したモデルの知識(予測結果)を別の小さいモデルに継承するということです。図6にDistillationのイメージを示します。targetと呼びます。targetのみを用いる場合があります。targetを用いることがDistillationの大きな特徴です。targetに含まれない情報を含めて学習できるというメリットがあります。図6の例において、教師モデルの出力スコアが自動車:0.4、犬:0.0であることから「この画像は、車に似ている部分があり、犬に似ている部分はない」と捉えることができます。targetからは「この画像は、電車である」という情報しか含まれていません。targetから「電車とは、車輪があって、窓があって、...、」のような一般的な概念を学習できることが期待できます。このように、学習時の情報量を増やすという観点からモデルを軽量化することが、PruningやQuaintizeとの違いです。他にも、Distillationはモデル圧縮以外の用途にも応用できることが知られています。Distillation(データ蒸留)と呼ばれる手法があります(参考文献5)。Distillationは、正解ラベルのないデータに対する教師モデルの予測結果を正解ラベルとして扱い、生徒モデルの訓練を行う手法です。この手法により、従来では利用できなかった正解ラベルのないデータを有効活用でき、かつ、精度向上に有効であることが示されています。まとめ本コラムでは、エッジAIの視点からモデル圧縮技術の必要性を説明し、代表的な手法であるPruning(枝刈り)、Quantize(量子化)、Distillation(蒸留)の3つの手法ついて説明しました。全ての状況においてモデル圧縮技術が必要になるわけではありませんが、モデルを軽量化することによってディープラーニングを活用できる可能性が広がることは間違いありません。精度と計算量のトレードオフを解消するため、モデル圧縮はディープラーニングにおける重要な手法のひとつと言えます。