DL モデルの定量化

原文はAIWalker公開アカウントを編集したものです

この記事の内容

1 ディープ ニューラル ネットワークの定量化に関するホワイト ペーパー
(Google より)
1.1 モデルの量子化の実際的な重要性
1.2 均一アフィン量子化
1.3 均一対称量子化
1.4 ランダム量子化
1.5 擬似量子化
1.6 量子化パラメータの決定
1.7 量子化の粒度
1.8 トレーニング後の量子化
1.9 量子化を意識したトレーニング

長すぎてバージョンを読めません

この記事では、ディープ ニューラル ネットワークの定量化の基本概念と方法を紹介します。ディープ ニューラル ネットワークはエッジ コンピューティングで使用されることが増えていますが、エッジ コンピューティング デバイスは通常、コンピューティング能力が低く、メモリと電力消費によって制限されます。さらに、クラウドからモバイルデバイスにモデルをダウンロードするために必要な通信帯域幅とネットワーク接続リソースを削減する必要があります。したがって、モデルのサイズを最適化し、より高速な推論とより低い消費電力を実現するには、いくつかのテクニックが必要です。最初のいくつかのセクションでは線形量子化操作を紹介し、次の 2 つのセクションでは 2 つの主流の量子化手法、つまりトレーニング後の量子化と量子化を意識したトレーニングを紹介します。

1 ディープ ニューラル ネットワークの定量化に関するホワイト ペーパー

論文のタイトル: 効率的な推論のための深層畳み込みネットワークの量子化: ホワイトペーパー

用紙のアドレス:

https//arxiv.org/pdf/1806.08342.pdf

1.1 モデルの定量化の実際的な重要性

ディープ ニューラル ネットワークはエッジ コンピューティングで使用されることが増えていますが、エッジ コンピューティング デバイスは通常、コンピューティング能力が低く、メモリと電力消費によって制限されます。さらに、クラウドからモバイルデバイスにモデルをダウンロードするために必要な通信帯域幅とネットワーク接続リソースを削減する必要があります。したがって、モデルのサイズを最適化し、より高速な推論とより低い消費電力を実現するには、いくつかのテクニックが必要です。

モデルの定量化の実際的な重要性は次のとおりです。

  1. 一連のモデルと使用シナリオに適用可能: 複雑なモデル設計は必要ありません。浮動小数点モデルは、基本的に損失なく、固定小数点モデルに迅速に定量化できます。再トレーニングは必要ありません。多くのハードウェア プラットフォームとライブラリがサポートされています。

  2. モデル サイズが小さくなります (重み量子化): 8 ビット量子化を使用すると、モデルが 4 分の 1 に縮小され、ダウンロード時間が短縮されます。

  3. 推論アクティベーション値の保存に必要な作業メモリとキャッシュ (アクティベーション量子化) を削減します。 推論中の中間計算結果は通常、後続のレイヤーでの再利用を容易にするためにキャッシュに保存され、これらのデータの精度により、必要な作業メモリとキャッシュを削減できます。

  4. 計算の高速化: ほとんどのプロセッサでは、8 ビット データの高速処理が可能です。

  5. 消費電力の低減: 8 ビット データの移動に必要な消費電力は、32 ビット データの移動に比べてはるかに少なくなります。多くのアーキテクチャでは、データ処理によって消費電力が決まります。したがって、量子化は消費電力に影響を与えます。

1.2 均一アフィン量子化

範囲内の浮動小数点数を指定すると、 の範囲に量子化する必要があります。8 ビット量子化の場合、 になります。

以下の 2 つのパラメータを定義します: Scale と Zero-Point。

スケールは量子化された値、つまり浮動小数点数が進むたびに増加する値を指定します。

ゼロポイントは、浮動小数点数のゼロが量子化される場所を示す量子化整数です。

データが片側に分布している場合、 は値 0 を含むように展開されます。たとえば、浮動小数点数が に分布している場合、 に展開されてから量子化されます。極端な片側分布の場合、精度が失われる可能性があることに注意してください。

スケールとゼロポイントが決定されると、定量化プロセスは次のようになります。

その中に、 は量子化前の浮動小数点数、 は量子化後の整数、そして次のものがあります。

また、 、 のとき、つまり、浮動小数点数が 0 のとき、それはゼロポイントに量子化されることもわかります。

逆量子化の操作は次のとおりです:

均一なアフィン量子化により、重みとアクティベーションを 8 ビット精度で保存できますが、ゼロポイントによる追加コストが発生します。重みとアクティベーションの間の 2D 畳み込みを考えてみましょう。

1.3 均一対称量子化

均一対称量子化とは、ゼロ点が強制的に 0 になることを意味します。つまり、浮動小数点数が 0 の場合、量子化結果は 0 になります。対称アフィン量子化のプロセスは次のとおりです。

SIMD 実装を高速化するために、重みの範囲をさらに制限できます。この場合、クランプを次のように変更できます。

ここでは[1]をさらに参照できます。

逆量子化操作は次のとおりです。

1.4 ランダム量子化

ランダムに量子化する場合、量子化プロセスに加法性ノイズが追加され、丸められます。ランダム量子化のプロセスは次のとおりです。

逆量子化操作を式 3 に示します。ランダム量子化は、ほとんどの推論ハードウェアがサポートしていないため、推論では考慮されません。

1.5 擬似量子化

擬似量子化は量子化対応トレーニングで一般的な手法です。量子化対応トレーニングでは、通常、量子化器と逆量子化器を含むシミュレートされた量子化 (擬似量子化) 操作が使用されます。

量子化プロセスには丸め演算があるため、逆伝播時に計算される導関数はどこでもほぼゼロになるため、量子化器は逆伝播でモデル化する必要があります。つまり、図 1 に示すように、次の演算を使用します。

バックプロパゲーションは、Straight Through Estimator (STE)[2] メソッドによってモデル化されます。

式中、 は出力に関する損失関数の導関数です。

図 1: (上) 導関数がどこでも 0 に等しい丸め演算。 (下)差別化できるクランプ動作

1.6 量子化パラメータの決定

量子化器パラメータは、いくつかの基準を使用して決定できます。たとえば、TensorRT [3] は、元の分布と量子化された分布の間の KL 発散を最小化して、ステップ サイズを決定します。この記事では、より単純なアプローチを採用しています。

重みの場合: 実際の値と最大値を使用して、量子化器のスケール パラメータを決定します。

アクティベーションの場合: ミニバッチ内の最小値と最大値の移動平均を使用して、量子化器のスケール パラメータを決定します。

1.7 定量化の粒度

レイヤーごとの量子化: ウェイト テンソル全体の Scale パラメータと Zero-Point パラメータを設定します。

チャネルごとの量子化: コンボリューション カーネルごとにスケール パラメータとゼロポイント パラメータを設定します。

重みテンソルは 4 次元であり、畳み込みカーネルが含まれており、各畳み込みカーネルは出力特徴マップの生成を担当します。チャネルごとの量子化には、コンボリューション カーネルごとに異なるスケール パラメーターとゼロポイント パラメーターがあります。さらに、アクティブ化のチャネルごとの量子化は、コアの内積計算が複雑になるため考慮されません。

1.8 トレーニング後の量子化

トレーニング後の量子化により、モデルを再トレーニングせずに重みとアクティベーションを圧縮することで、より高速な推論とモデル サイズの縮小が可能になります。トレーニング後の量子化により、限られたデータでの量子化が可能になります。

重量だけを数値化する

簡単なアプローチは、浮動小数点の重みを 8 ビットに量子化することです。この方法では、アクティベーションを定量化せずに、FP32 モデルの重みを 8 ビットに減らすだけです。重みのみが定量化されるため、これは検証データがなくても実行できます。この設定は、FP32 で推論を実行するコストを考慮せずに、モデルの転送とストレージのサイズを定量化したいだけの場合に便利です。

重みとアクティベーションを定量化する

浮動小数点モデルは、量子化されるすべての量の量子化パラメータを計算することで 8 ビット精度に量子化できます。活性化を定量化する必要があるため、キャリブレーションセットが必要であり、活性化値のダイナミックレンジを計算する必要があります。通常、収束する活性化値の範囲を推定するには、約 100 個のミニバッチで十分です。この論文は、実験を通じて、層ごとの重み量子化によって引き起こされる精度の大幅な低下の主な理由は、単層コンボリューション カーネルのダイナミック レンジの極端な変化につながるバッチ正規化であることを発見しました。チャネルごとの重み量子化により、この問題を回避できます。これにより、チャネルごとの量子化の精度が BN のスケーリング係数に依存しなくなります。

アクティベーション量子化では、引き続きレイヤーごとの対称量子化戦略が使用されます。

1.9 定量的知覚トレーニング

量子化対応トレーニングはトレーニング中に量子化するため、トレーニング後の量子化スキームよりも高い精度を提供できます。この記事では、シミュレートされた量子化操作を使用して、重みとアクティベーションの影響をモデル化します。バックプロパゲーションの場合、この記事では、Straight Through Estimator を使用して量子化をシミュレートします。この論文では、順伝播と逆伝播にシミュレートされた量子化を使用し、一連の FP32 重みを維持し、勾配更新を使用してそれらを最適化します。これにより、より小さな勾配更新が重みに直接作用することが保証されます。更新された重みは、次の順伝播と逆伝播で使用されます。

式中の はシミュレートされた量子化プロセスの出力であり、 はシミュレートされた量子化プロセスの入力です。

下の図 2 は、量子化を意識したトレーニングの計算図です。

図 2: 量子化対応トレーニング計算図

著者はバッチ正規化の定量的手法も紹介します。 BN は次の式で定義されます。

電車:

推論:

ここで、 と はミニバッチの平均と標準偏差、 はミニバッチの平均と標準偏差で、トレーニング中のバッチ統計の移動平均として計算されます。

推論のために、著者はバッチ正規化を次の式 2 で定義される重みに変更します。したがって、推論時に明示的なバッチ正規化は行われません。


図 3: バッチ正規化のトレーニングと推論の概略図

バッチ正規化のトレーニングと推論の図を上の図 3 に示します。

トレーニング中: は前のレイヤーの INT8 出力であり、INT8 畳み込みの結果は SimQuant 擬似量子化後の畳み込みによって計算されます。このうち、畳み込みパラメータは で乗算されています。計算結果が加算されて等価な出力が得られ、最終的にこの層の計算結果が SimQuant 擬似量子化によって得られます。ここで、 は浮動小数点の重みを使用して計算されます。

推論の場合: は前の層の INT8 出力であり、INT8 畳み込みの結果は SimQuant 擬似量子化後の畳み込みによって計算されます。このうち、畳み込みパラメータは で乗算されています。計算結果が加算されて等価な出力が得られ、最終的にこの層の計算結果が SimQuant 擬似量子化によって得られます。

以下の QR コードをスキャンするか、WeChat を追加します: AICVerX2、「Xiaoer」WeChat を追加すると、基盤となるビジョンと基本的な AI に関連する論文を初めて入手できます。研究の方向性 + 学校/会社 + ニックネーム

▲QR コードをスキャンするか、WeChat ID: AICVerX2 を追加して、基礎となる最新のビジュアル ペーパーを入手してください

おすすめ

転載: blog.csdn.net/chumingqian/article/details/134694390