[1] Google 2021 モデル数量化ホワイト ペーパー「A White Paper on Neural Network Quantization」

私は最近、モデルの量子化の知識を学び始め、紹介論文A White Paper on Neural Network Quantizationを見つけました。

学習の過程で、理解を深めるためにいくつかの記録を作成し、忘れないようにし(記憶力が低下すると頭痛がしたり、自分の認知症を心配したりします)、自分の理解を追加します。お役に立てれば幸いです。

まとめ

現在のニューラル ネットワークは多くのアプリケーションで進歩を遂げていますが、常に高い計算消費量をもたらします。電力と計算の要件が厳しいエッジ デバイスにニューラル ネットワークをデプロイする場合、ニューラル ネットワークの推論の電力とレイテンシを削減することが重要です。モデルの量子化は、これらの要件を満たす最も効果的な方法の 1 つですが、モデルの量子化のプロセスで導入されるノイズも精度の低下をもたらします。

この論文では、著者は現在の最良のモデル量子化アルゴリズムを紹介します。これは、低い重みと活性化値を維持しながら、モデルのパフォーマンスに対する量子化ノイズの影響を排除しようとします。この記事では、最初にハードウェアの背景からモデルの量子化を紹介し、次に主に、トレーニング後の量子化 (PTQ) と量子化認識トレーニング (QAT) という 2 つの主流の量子化アルゴリズムについて説明します。PTQ は、事前にトレーニングされ、ラベル付けされたデータを必要としないため、軽量のボタンベースの量子化方法です。ほとんどの場合、PTQ は 8 ビットの量子化を実現できますが、精度は浮動小数点に近くなります。QAT ではデータの微調整とラベル付けが必要ですが、低レベルの定量化を完了して、より競争力のある結果を得ることができます。これら 2 つのスキームについて、著者は既存の文献と拡張された実験に基づいて十分にテストされたパイプラインを提供し、一般的な深層学習モデルとタスクの SOTA パフォーマンスを達成します。

個人的な理解: パフォーマンスを追求するために、ニューラル ネットワーク モデルのサイズは増大し続けており、エッジ デバイスにモデルを展開することは困難になっています。したがって、モデルを軽量化し、モデルの推論速度と消費電力を高速化するためのいくつかの手法が必要です。モデルの量子化は、非常に効果的なモデル軽量アルゴリズムです。主に、モデルの重みとアクティベーション値のパラメーターを変換することにより、モデルの推論を高速化します (浮動小数点から低ビット整数、または混合精度など)。ただし、この大まかな量子化方法ではノイズが発生し、モデルの精度が低下します。主流のモデル量子化アルゴリズムは、主に PTQ と QAT の 2 種類に分けられます。PTQ は、モデル パラメーターがトレーニングされた後に精度変換を実行することです. このアルゴリズムは、ほとんどの問題を解決することができます. QAT はトレーニング プロセス中に量子化され、手順はより面倒で、データの微調整とラベル付けが必要ですが、その精度は PTQ よりも優れています。

序章

電子デバイスにインテリジェントな特性を付与するための汎用ソリューションとして深層学習がますます使用されるにつれて、小型、低遅延、および優れたパフォーマンスを備えたニューラル ネットワーク ソリューションが開発トレンドになっています。今日、ニューラル ネットワークは、スマートフォン、スマート グラス、スマート ホーム、ロボット、自動運転など、多くの電子製品やサービスで使用されています。これらのデバイスは、通常、ニューラル ネットワークが実行時に厳しい時間制約に従う必要があり、長時間のパフォーマンスのために推論の消費電力を削減する必要があります。

モデルの量子化は、計算時間とエネルギー消費を削減する最良の方法の 1 つです。モデルのトレーニング中、重みとアクティベーション テンソルは通常 16 ビットまたは 32 ビットの精度のデータ型で保存されますが、モデルの量子化では重みとアクティベーション テンソルが低精度のテンソルで保存されます。重みとアクティベーション テンソルが 32 ビットから 8 ビットに変換されると、テンソルを格納するためのメモリ空間が 4 分の 1 に削減され、行列乗算の計算消費量が 14 分の 1 に削減されます。ニューラル ネットワークは、モデルが比較的低い帯域幅に量子化された後、精度への影響が許容範囲内であることが確認されています。さらに、モデルの量子化は、ネットワーク アーキテクチャ検索、モデル圧縮、モデル プルーニングなどの他のモデル最適化手法と一緒に使用されることがよくあります。したがって、モデルの定量化は、深層学習の実用化における重要なステップです。ただし、欠点もあります。低ビット幅の量子化はモデルにノイズを導入し、精度の低下につながります。ノイズに対して堅牢なネットワークもあれば、量子化の利点を最大化するために追加の作業が必要なネットワークもあります。

本稿では、著者は SOTA のモデル量子化アルゴリズムを紹介します。最初に量子化を紹介し、ハードウェアの背景と実際のアプリケーション条件について説明します。次に、2 つの主流の量子化アルゴリズムについて説明します。それぞれ PTQ と QAT です。PTQ は、既にトレーニング済みのネットワークを処理し、少量のデータを使用するか、量子化にデータを使用する必要がなく、調整に必要なハイパーパラメーターが少なく、エンドツーエンドのトレーニングを必要としません。これにより、PTQ はエンジニアリングと計算の消費をあまり必要とせず、プッシュボタン方式と見なすことができます (ボタン開始方式、モ​​デルのトレーニング中に考慮する必要がないことを理解しています。モデルが完成した後に PTQ が必要な場合) PTQ を追加します。不要な場合は追加する必要はありません。使用したいときにクリックするだけです)。QAT は、トレーニング パイプラインでシミュレートされた量子化を使用してニューラル ネットワークを再トレーニングすることに依存しています。これには、トレーニングと場合によってはハイパーパラメーターの調整により多くの労力が必要ですが、多くの場合、低ビット量子化を使用した PTQ よりも完全精度の精度までのギャップを縮めます。両方のスキームについて、著者は既存の文献と広範な実験に基づく標準パイプラインを導入し、一般的なコンピューター ビジョンと自然言語処理モデルの最先端のパフォーマンスを実現します。また、新しいモデルを量子化する際の一般的な問題を特定して解決するためのデバッグ ワークフローも提案します。

モデル量子化の理論的基礎

このセクションでは、ニューラル ネットワークの量子化の基礎と、量子化されたネットワークを実行するための固定小数点アクセラレータについて紹介します。このセクションでは、ハードウェアの背景から始めて、標準的な量子化スキームとそのプロパティを紹介します。最新のニューラル ネットワークで一般的な層に関する実際的な考慮事項と、固定小数点アクセラレータへの影響については、後で説明します。

ハードウェアの背景

技術的な詳細に入る前に、まず量子化のハードウェアの背景と、デバイス上での効率的な推論を可能にする方法を調べてください。図 1 は、ニューラル ネットワーク アクセラレータで行列ベクトルを使用する方法を示しています (ハードウェア モジュール) in y = ω x + by = {\omega}x + by=ω ×+bのメカニズム図これは、大きな行列間の乗算および畳み込み演算の基本構成要素です。このようなハードウェア モジュールは、並列計算によってニューラル ネットワークの推論速度を向上させるように設計されています。図 1 のニューラル ネットワーク アクセラレータの 2 つの基本要素: 処理要素C n , m C_{n,m}Cn , mおよびアキュムレータA n A_nn

ここでC n , m C_{n,m}Cn , m実行されるのは乗算演算 ( C n , m C_{n,m}Cn , m内部では、ω n 、m、xm が乗算され、{\omega_{n,m}} と x_m が乗算されます。おおn , m×メートル掛ける)、

A n = b n + ∑ i = 1 4 C n , i ,   b n 为 偏 置 b i a s A_n=b_n + {\sum}_{i=1}^{4}C_{n,i}, b_n为偏置bias n=bn+私は= 14Cn , i bnはバイアスb i a sです

このような計算ステップを繰り返した後、行列間の乗算が完了します。すべての入力要素が計算されると、アキュムレータの値A n A_nn次のニューラル ネットワーク層の入力のためにメモリに戻されます。

一般的なニューラル ネットワークのトレーニングでは、32 ビットの浮動小数点数を使用して重みとアクティベーション値を表します。32 ビット浮動小数点数を使用して推論を実行したい場合、処理要素C n , m C_{n,m}Cn , mおよびアキュムレータA n A_nn浮動小数点ロジックをサポートする必要があり、メモリから処理ユニットC n , m C_{n,m}に 32 ビット データを転送する必要があります。Cn , m. 図 1 の計算フローとデータ転送は、ニューラル ネットワークの推論プロセスで費やされるエネルギーのほとんどを消費します。したがって、下位ビットの固定小数点または量子化された表現を使用して実現できます。低ビットの固定小数点表現 (INT 8 など) は、大量のデータ転送を削減するだけでなく、図 1 の操作のメモリとエネルギー消費も削減します。数値演算のコストは一般に、使用されるビット数が 2 次であり、固定小数点の加算は浮動小数点の加算よりも効率的であるためです。
ここに画像の説明を挿入
           図 1. ニューラル ネットワーク アクセラレータ ハードウェアにおける行列ベクトル乗算演算のメカニズム図

浮動小数点演算からより効率的な固定小数点演算に切り替えるには、浮動小数点ベクトルを整数ベクトルに変換するメカニズムが必要です: 浮動小数点ベクトルXXX は、定数または整数のベクトルとして大まかに表すことができます。
               ここに画像の説明を挿入
上記の式で表される変換メカニズムに基づいて、アキュムレータA n A_nnの計算プロセスは、次のように概算できます。
          ここに画像の説明を挿入
ここで注目すべきことの 1 つは、異なる定数S w S_w が重み w とアクティベーション値 x 近似に使用されることです。SwおよびS x S_xS×. このアプローチはより柔軟で、定量的な損失を減らすことができます。定量化するとき、 S w S_wを置くことができる理由SwおよびS x S_xS×∑ \sumを得るΣ。各テンソルのすべての要素に同じ近似定数が使用されるためです。バイアスは通常、重みとアクティベーションのスケーリング係数に依存するスケーリング係数を使用して、より高いビット幅 (32 ビット) で格納されるため、現時点ではバイアスの量子化を意図的に無視します。

図 2 は、量子化が導入されたときにニューラル ネットワーク アクセラレータに何が起こるかを示しています。ここでは例として INT 8 タイプを取り上げます。アキュムレータの場合、より高いビット幅 (通常は 32 ビット幅) を維持することが重要です。そうしないと、計算中にさらに要素が追加されるため、オーバーフローのリスクに苦しむ可能性があります。

32 ビット アキュムレータに格納されたアクティベーションは、次の層への入力として使用する前に、メモリに書き込む必要があります。メモリを読み書きする際のデータ転送量と次のレイヤーの計算量を削減するには、これらのアクティベーション値を INT8 型に再量子化する必要があります (これには再量子化ステップが必要です。図 2 を参照)
ここに画像の説明を挿入
         図 2. 量子化された推論のためのニューラル ネットワーク アクセラレータにおける行列乗算の概略図。

一様アフィン量子化

このセクションでは、著者は論文で使用する量子化スキームを定義します。このスキームは一様量子化と呼ばれ、固定小数点演算を効率的に実装できるため、最も一般的に使用される量子化スキームです。

非対称量子化とも呼ばれる一様アフィン量子化は、スケール ファクター s、ゼロ ポイント z、およびビット幅 b の 3 つの量子化パラメーターによって定義されます。

  • スケール係数とゼロは、浮動小数点値を整数のグリッドにマップするために使用され、そのサイズはビット幅に依存します。
    • スケール係数 s は通常、浮動小数点数として表され、量子化器のステップ サイズを指定します。
    • ゼロ z は、実ゼロのエラーのない量子化を保証する整数です。これは、ゼロ パディングや ReLU などの一般的な操作で量子化エラーが発生しないようにするために重要です。

上記の 3 つの量子化パラメータの説明を見ると、少しわかりにくいかもしれません。ゆっくりと下を見てみましょう。

3 つの量子化パラメータが定義されると、量子化操作を実行できます。

最初に、次の式 {0, … , 2 b − 1 2^b-1に従って、元の重みまたはアクティベーション値ベクトル x を符号なし整数グリッドにマッピングします。2bここで、b はビット幅です。
          ここに画像の説明を挿入
ここに画像の説明を挿入
丸め操作を示します。clamp(x;a,c) 関数は次のように定義されます。
          ここに画像の説明を挿入
逆に、量子化されたデータから実際のデータ x を復元するには、逆量子化操作が必要です
         ここに画像の説明を挿入
。一緒にステップします, 一般的な量子化関数q ( . ) q(.)q ( . ) :
  ここに画像の説明を挿入
逆量子化ステップでは、量子化範囲も定義できます (qmin , qmax q_{min}, q_{max}qみん_ _qマエックス_ _)、ここでqmin = − sz q_{min}=-szqみん_ _=s zqmax = s ( 2 b − 1 − z ) q_{max}=s(2^b-1-z)qマエックス_ _=s ( 2b1z ) . この範囲外の x 値は制限にクリップされ、クリッピング エラー (精度の誤差)。クリッピング エラーを減らしたい場合は、スケール ファクター s を大きくして量子化範囲を拡大できます。ただし、丸め誤差は[ − 1 2 s , 1 2 s ] [-\frac{1}{2}s, \frac{1}{2 }s][ 21_21s ] . 以下では、量子化パラメータの選び方と、クリッピング誤差と丸め誤差のトレードオフについて紹介します。

対称一様量子化

対称量子化は、非対称ケースの単純化されたバージョンです。対称量子化器はゼロを 0 に制限します。これにより、非対称量子化での累積演算中にゼロ オフセットを処理する計算上のオーバーヘッドが削減されます。ただし、オフセットがないため、整数ドメインと浮動小数点ドメイン間のマッピングが制限されます。したがって、符号付きまたは符号なしの整数グリッドの選択は重要です。
ここに画像の説明を挿入
符号なし対称量子化は、RELU の活性化値など、片側分布のデータに非常に適しています。符号付き対称量子化は、ゼロを中心にほぼ対称なデータに適しています。

一様量子化の 3 つの形式 (非対称一様量子化、符号付き対称量子化、符号なし対称量子化) を図 3 に示します。
ここに画像の説明を挿入
図 3. ビット幅 8 のさまざまな一様量子化グリッドの視覚的な説明。s は倍率で、z はゼロ点です。浮動小数点グリッドは黒、整数量子化グリッドは青です。

2 のべき乗量子化

2 乗への量子化は対称量子化の特殊なケースであり、スケール係数 s は 2 乗に制限されます。つまり、s = 2 − ks=2^{-k}s=2−k . _ スケーリングは単純な変位操作と同等であるため、この方法はハードウェア上で非常に効率的です。ただし、このようなスケール係数の表現力は限られているため、丸め誤差とクリッピング誤差の間のトレードオフが複雑になります。

定量化の粒度

ここまでで、各テンソルの一連の量子化パラメーター (量子化器) を定義しました。1 つは重み用で、もう 1 つは活性化用です。これは、テンソルごとの量子化と呼ばれますまた、テンソルの各次元 (重みテンソルの出力チャネルなど) ごとに個別の量子化器を定義して、量子化の粒度を高めることもできます。ニューラル ネットワークの量子化では、テンソルごとの量子化が最も一般的な粒度の選択です。これは、ハードウェアの実装が単純であるためです。図 2 のすべてのアキュムレータは、同じスケーリング ファクターS w 、S x S_w、S_xを使用します。SwS×. ただし、より細かい粒度を使用して、パフォーマンスをさらに向上させることができます。たとえば、重みテンソルを使用すると、出力チャネルごとに異なる量子化器を指定できます。これは、チャネルごとの量子化と呼ばれます。

出力チャネルごとに異なる量子化器を指定するだけでなく、重みまたはアクティベーションのセットごとに個別の量子化器を適用する作業が他にもあります。ただし、通常、グループの粒度を大きくすると精度が向上しますが、追加のオーバーヘッドが発生します。オーバーヘッドは、さまざまな倍率で値を合計するアキュムレータの処理に関連しています。現在、ほとんどの既存の固定小数点アクセラレータはそのようなロジックをサポートしていないため、この作業では考慮しません。ただし、この分野の研究が進むにつれて、これらの方法に対するより多くのハードウェア サポートが将来的に期待されます。

定量シミュレーション

量子化デバイスでニューラル ネットワークがどの程度うまく機能するかをテストするために、ニューラル ネットワークのトレーニングに使用されるのと同じ汎用ハードウェアで量子化動作をシミュレートすることがよくあります。これを量子化シミュレーション(量子化シミュレーション)と呼びます。. 私たちが目指す浮動小数点を使用するハードウェア見積もり固定小数点演算. 実際の量子化されたハードウェアまたは量子化されたカーネルを使用して実験を実行する場合と比較して、量子化をシミュレートする方が優れています。これにより、ユーザーはさまざまな量子化戦略を効率的にテストでき、QAT の GPU アクセラレーションも有効になります。このセクションでは、著者は最初に量子化されたシミュレーション ステップの理論的根拠を説明し、次に、実際のデバイスで実行されるシミュレートされた量子化されたカーネル間の分散を減らすのに役立つ手法について説明します。

前に、行列とベクトルの乗算が固定小数点デバイスでどのように実行されるかを見ました。図 4a では、著者はこの操作を畳み込み層に一般化し、より現実的なものにするために活性化関数も含めています。デバイス上での推論中、ハードウェアへのすべての入力 (バイアス、重み、および入力のアクティブ化) は固定小数点形式です。ただし、一般的な深層学習フレームワークと汎用ハードウェア シミュレーションを使用して量子化すると、これらの量は浮動小数点数になります。これが、計算グラフに量子化モジュールを導入して量子化効果を誘発する理由です。

図 4b は、深層学習フレームワークで同じ畳み込み層をモデル化する方法を示しています。重みと畳み込みの間に量子化ブロックを追加して重みの量子化をシミュレートし、活性化関数の後に活性化の量子化をシミュレートします。バイアスはより高い精度で保存されるため、通常は量子化されません。前のサブセクションでは、非線形性の後に量子化モジュールを配置することが適切な場合について、著者はより詳細に説明しました。量子化モジュールは上記の量子化機能を実装し、各量子化モジュールは一連の量子化パラメータ (スケール係数、ゼロ点、ビット幅) によって定義されます。量子化モジュールの入力と出力はどちらも浮動小数点形式ですが、出力は量子化グリッド上にあります。
ここに画像の説明を挿入
図 4. 畳み込み層の量子化フォワード パスの概略図: a) 実際のデバイスでの量子化推論のグラフの計算。b) 汎用浮動小数点ハードウェアをシミュレートする量子化された推論。

バッチ正規化フォールディング

バッチ正規化は、最新の畳み込みネットワークの標準コンポーネントです。バッチ正規化は、スケーリングしてオフセットを追加する前に、線形レイヤーの出力を正規化します。デバイス上での推論では、これらの操作は、バッチ正規化フォールディングと呼ばれるステップで、前または次の線形レイヤーにフォールディングされます。. これにより、計算が隣接する線形レイヤーに吸収されるため、ネットワークからバッチ正規化操作が完全に削除されます。これにより、追加のスケーリングとオフセットの計算オーバーヘッドが削減されるだけでなく、レイヤー出力の追加のデータ移動と量子化が防止されます。より形式的には、推論中、バッチ正規化は出力 x のアフィン グラフとして定義されます:
             
             バッチ N orm ( x ) = γ ( x − μ σ 2 + ϵ ) + β \frac{x-{\mu}}{\sqrt{ {\sigma}^2}+{\epsilon}}})+{\beta}バッチノルム( x ) _ _ _ _ _ _ _=c (p2 + ϵx m)+β
其中 μ {\mu} μσ {\sigma}σは平均と分散であり、トレーニング プロセス中にバッチを統計単位として計算した結果の指数移動平均です。γ {\gamma}cb {\beta}βは、各チャネルから学習したアフィン ハイパーパラメーターです。上記のように線形層 y = BatchNorm(Wx) の直後にバッチ正規化が適用される場合、バッチ正規化操作が線形層自体とマージされるようにこれらの式を書き換えることができます。重み行列W ϵ R n × m W{\epsilon}~R^{n×m}WεR _ _ n × m、出力YYYの各チャネルyk y_kyk(k={1, 2, …, n}) バッチ正規化を適用します。
          ここに画像の説明を挿入
の、
         ここに画像の説明を挿入
上記の変換により、バッチ正規化レイヤーと線形レイヤーが融合されます。

活性化機能融合

図 2 に示す単純な量子化アクセラレータでは、行列の乗算または畳み込みの出力値を計算した後に、アクティベーションの逆量子化が行われていることがわかります。ただし、実際には、線形操作の直後に非線形性が発生することがよくあります (図 4 の場合)。. 線形層のアクティベーションをメモリに書き込み、計算コアに再ロードして非線形演算を適用すると、リソースが無駄になるためです。このため、多くのハードウェア ソリューションには、再量子化ステップの前に非線形性を適用するハードウェア ユニットが付属しています。この場合、非線形性の後に発生する再量子化のみをシミュレートする必要があります。たとえば、ReLU 非線形性は再量子化ブロックによって簡単にモデル化できます。これは、表現可能な最小値の活性化量子化を 0 に設定できるためです。

シグモイドや Swish など、その他のより複雑なアクティベーション関数には、より専門的なサポートが必要です。このサポートが利用できない場合は、グラフの非線形性の前後に量子化ステップを追加する必要があります。This can have a big impact on the accuracy of quantized models. Swish 関数などの新しいアクティベーションは浮動小数点の精度を向上させることができますが、これらのアクティベーションは量子化後に消えたり、固定小数点ハードウェアに展開する効率が低下したりする可能性があります。

他のネットワーク層とその量子化

ニューラル ネットワークには、他にも一般的に使用される層が多数あります。それらがどのようにモデル化されるかは、特定のハードウェア実装に大きく依存します。アナログの量子化とターゲットのパフォーマンスの不一致は、レイヤーの量子化が正しくないことに起因する場合があります。ここでは、一般的に使用されるいくつかのレイヤーの量子化をシミュレートする方法について、いくつかのガイダンスを提供します。これにより、これらのレイヤーが正しく量子化され、シミュレートされた量子化が目標のパフォーマンスに一致するようになります。

  • Max Pooling: 入力と出力が同じ量子化グリッド上にあるため、アクティベーション値を量子化する必要はありません。
  • 平均プーリング: いくつかの整数の平均は必ずしも整数ではありません。このため、Average Pooling の後に量子化ステップが必要です。ただし、量子化範囲は大きく変わらないため、同じ量子化モジュールを入力と出力の両方に使用できます。
  • 要素ごとの加算: この手順は単純ですが、正しくシミュレートするのは困難です。加算中、2 つの入力加数の量子化範囲は正確に一致する必要があります。一致しない場合は、残りが期待どおりに機能するように特別な注意が必要です。私が理解しているのは、2 つの数値の加算が量子化範囲を超える可能性があるということです。これに対する単一の解決策はありませんが、再量子化ステップを追加すると、追加されたノイズを大まかにシミュレートできます。別のアプローチは、入力の量子化グリッドをバインドしてネットワークを最適化することです。これにより、再量子化ステップが回避されますが、微調整が必​​要になる場合があります。
  • 連結: 連結される 2 つのブランチは通常、同じ量子化パラメータを共有しません。これは、それらの量子化グリッドがオーバーラップしない可能性があることを意味するため、再量子化ステップが必要になります。要素ごとの追加と同様に、ネットワークを最適化して、接続されたブランチで量子化パラメーターを共有することができます。

実際的な考慮事項

多層ニューラル ネットワークを量子化する場合、量子化スキーム、粒度、ビット幅など、量子化の選択肢が非常に多くなります。このセクションでは、著者は、検索スペースを削減するのに役立ついくつかの実際的な考慮事項を探ります。

このホワイト ペーパーでは、著者は次の点のみを考慮していることに注意してください。同種のビット幅. これは、重みまたはアクティベーションに選択されたビット幅がすべてのレイヤーで同じであることを意味します。ハードウェアはより一般的に同形ビット幅をサポートするためですが、最近の研究では調査も行われています。異種ビット幅または混合精度実現。

対称量子化と非対称量子化

重みとアクティベーションの量子化ごとに、量子化スキームを選択する必要があります。一方では、追加のオフセット パラメータがあるため、非対称量子化はより表現力豊かですが、他方では、計算オーバーヘッドが発生する可能性があります。この理由を理解するために、重みが非対称の場合に何が起こるかを考えてみましょう。
下のものは、それぞれ現在のレイヤーの量子化された重みと、前のレイヤーの量子化されたアクティベーション値です。以下に示すように、現在のレイヤーの計算結果を取得するには、それらを乗算する必要があります。 
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
両方の操作が対称形式である場合、最初の項は次のようになります (ゼロやバイアスがないから)。3 番目と 4 番目の項は、既知のスケール、オフセット、および重みの値のみに依存します。したがって、これら 2 つの項を事前に計算して層のバイアス項に追加することはほとんどコストをかけずに行うことができますが、2 番目の項は入力データ x に依存します。これは、データのバッチごとに、推論中に追加の項を計算する必要があることを意味します。これは、余分なレーンを追加することになるため、レイテンシと電力に大きなオーバーヘッドが発生する可能性があります。このため、非対称活性化量子化と対称重み量子化を使用することは、データに依存する余分な項を回避する一般的な方法です。

テンソルごとおよびチャネルごとの量子化

細粒度の定量化に関するセクションでは、著者は量子化された粒度のさまざまなレベルについて説明します。ウェイトとアクティベーションのテンソルごとの量子化は、すべての固定小数点アクセラレータでサポートされているため、しばらくの間標準でした。ただし、重みのチャネルごとの量子化は、特に重みの分布がチャネル間で異なる場合に、精度を向上させることができます。チャネルごとの重みの量子化は、別のチャネルごとの重みのスケーリング係数を適用することにより、再スケーリングせずにアクセラレータで実現できます。アクティベーションのチャネルごとの量子化は、合計からスケーリング係数を除外できないため、実装がより困難であり、入力チャネルごとにアキュムレータの再スケーリングが必要になります。ウェイトのチャネルごとの量子化はより一般的になりつつありますが、すべての商用ハードウェアがそれをサポートしているわけではありません。したがって、目的のターゲット デバイスで動作するかどうかを確認することが重要です。

おすすめ

転載: blog.csdn.net/Just_do_myself/article/details/124350921
おすすめ