通常、ニューラル ネットワークは冗長性が高く、過剰にパラメーター化されています。プルーニングは、精度の低下をできるだけ低く抑えながら、過剰な重みを排除するプロセスです。
業界では、ニューラル ネットワークによる推論の演算コストを削減する手法がいくつか研究されています。これには、次の手法があります。
- 細粒度プルーニング
- 粗粒度プルーニング
- NAS (Neural Architecture Search)
細粒度プルーニングは最も単純なプルーニングで、スパース型の行列 (多くの要素が 0 の行列) が得られます。これには、重みのスキップと圧縮のための専用ハードウェアおよび手法を追加する必要があります。ザイリンクスは現在、細粒度プルーニングを実装していません。
Vitis™ AI プルーナーは粗粒度プルーニングを採用しています。これは、ネットワークの精度に大きく寄与しないニューロンを排除する手法です。たたみ込み層では、粗粒度プルーニングによって 3D カーネル全体がプルーニングされるため、チャネル プルーニングとも呼ばれます。粗粒度プルーニング済みモデル向けの専用ハードウェアを使用せずに、推論の高速化を達成できます。プルーニングを実行すると、元のモデルの精度が低下します。再学習 (微調整) することで、残りの重みを調整して精度を回復します。
粗粒度プルーニングは、一般的なたたみ込みを含む大規模なモデル (ResNet や VGGNet など) ではうまく機能しますが、MobileNet-v2 などの depthwise たたみ込みベースのモデルの場合、プルーニング率を小さくしてもプルーニング済みモデルの精度は急激に低下します。
プルーニング以外にも、推論の演算コストを削減する手段として Vitis AI プルーナーはワンショット NAS (Neural Architecture Search) ベースの手法をサポートしています。この手法には次の 4 ステップのプロセスが必要です。
- トレーニング
- 検索
- プルーニング
- 微調整 (オプション)
粗粒度プルーニングと異なり、ワンショット NAS の実装は複数候補の「サブネットワーク」をスーパーネットと呼ばれる 1 つの過剰にパラメーター化したグラフにまとめます。学習最適化アルゴリズムは、教師あり学習を利用してすべての候補ネットワークを同時に最適化しようと試みます。この学習プロセスが完了すると、演算コストと精度に基づいて候補のサブネットワークがランク付けされます。そして、要件を満たす最良の候補を開発者が選択します。ワンショット NAS 手法は、depthwise たたみ込みと一般的なたたみ込みの両方を実装したモデルを圧縮するのに効果的ですが、長い学習時間がかかり、開発者に高いスキルが求められます。