「テンソル量子化:語られなかった物語」

Tensor Quantization Untold Story

機械学習フレームワークにおける量子化の実装詳細を詳しく見る

Naresh Singhと共著。

目次

  • はじめに
  • 量子化におけるスケールとゼロポイントの意味とは?
  • 量子化スキームの種類
  • 量子化スケールとゼロポイントの例
  • 量子化と活性化正規化
  • 結論
  • 参考文献

はじめに

この記事の残りの部分では、具体的な例を使って以下の質問に答えようとします。

  1. 量子化におけるスケールとゼロポイントとは何ですか?
  2. 異なる種類の量子化スキームは何ですか?
  3. 異なる量子化スキームにおけるスケールとゼロポイントの計算方法は?
  4. 量子化においてゼロポイントはなぜ重要ですか?
  5. 正規化技術は量子化にどのように役立ちますか?

量子化におけるスケールとゼロポイントとは何ですか?

スケール: 浮動小数点範囲を量子化範囲で表現する場合、通常、浮動小数点範囲[Fmin..Fmax]を量子化範囲[Qmin..Qmax]で表現します。この場合、スケールは浮動小数点範囲と量子化範囲の比率です。

後で計算方法の例を見てみましょう。

ゼロポイント: 量子化におけるゼロポイントは、浮動小数点0.0の量子化範囲における表現です。具体的には、ゼロポイントは量子化された値であり、実質的には浮動小数点値0.0を表します。なぜこのような表現が実用上興味深いのか、後で例とともに見ていきましょう。

次に、実践で使用される主な量子化スキームを見て、それらがどのように似ていてどのように異なるかを理解しましょう。

量子化スキームの種類

モデルの圧縮時に使用できる量子化の種類を考えると、主に2つのタイプがあります。

  1. 対称量子化: この場合、ゼロポイントはゼロです。つまり、浮動小数点範囲の0.0は量子化範囲の0と同じです。通常、ランタイムでの計算が効率的ですが、浮動小数点範囲が浮動小数点0.0を中心に均等に分布していない場合、精度が低下する可能性があります。
  2. アフィン(非対称)量子化: ゼロポイントは非ゼロの値を持つものです。

しかし、詳細に入る前に、ゼロポイントの意味を定義しようとしてみましょう。

量子化スケールとゼロポイントの例

非常にシンプルな例から始めて、徐々に具体的な例を構築していきましょう。

例1: 対称uint8量子化

浮動小数点範囲[0.0 .. 1000.0]を量子化範囲[0 .. 255]にマッピングしたいとします。範囲[0 .. 255]は、符号なし8ビット整数に収まる値のセットです。

この変換を行うために、浮動小数点範囲を再スケールして次の条件が成り立つようにします。

浮動小数点 0.0 = 量子化 0

浮動小数点 1000.0 = 量子化 255

これは対称量子化と呼ばれます。浮動小数点0.0は量子化された0になります。

したがって、スケールを定義します。それは以下のとおりです。

ここで、

この場合、スケール = 3.9215

浮動小数点値から量子化値に変換するには、単純に浮動小数点値をスケールで割ればよいです。例えば、浮動小数点値500.0は量子化値に対応します。

この簡単な例では、浮動小数点範囲の0.0は量子化範囲の0に正確にマッピングされます。これは対称量子化と呼ばれます。これがそうでない場合はどうなるか見てみましょう。

例2:アフィンuint8量子化

浮動小数点範囲[-20.0 .. 1000.0]を量子化範囲[0 .. 255]にマッピングしたいとします。

この場合、xminが異なるため、異なるスケーリングファクターがあります。

スケーリングファクターを0.0に適用した場合、浮動小数点数0.0は量子化範囲でどのように表されるのでしょうか。

これは正しくないようです。上記の図によれば、浮動小数点値-20.0は量子化値0にマッピングされるはずです。

ここで、ゼロポイントの概念が登場します。ゼロポイントは、スケーリングされた浮動小数点値をシフトするためのバイアスとして機能し、浮動小数点値0.0を表す量子化範囲の値に対応します。この場合、ゼロポイントは-20.0のスケーリングされた浮動小数点表現の負の値、つまり-(-5) = 5です。ゼロポイントは常に最小浮動小数点値の表現の負であり、最小値は常に負またはゼロになります。なぜこれがそのようなのかについては、例4を説明するセクションで詳しく説明します。

値を量子化する場合、常にこのスケーリングされた値にゼロポイントを追加して、有効な量子化範囲内の実際の量子化値を取得します。たとえば、値-20.0を量子化する場合、スケーリングされた値-20.0にゼロポイントを加えます。つまり、-5 + 5 = 0です。したがって、quantized(-20.0, scale=4, zp=5) = 0です。

例3:アフィンint8量子化

符号付き8ビット整数の量子化範囲[-128 .. 127]の場合はどうなるでしょうか。

この場合、浮動小数点範囲の-20.0は量子化範囲の-128に、浮動小数点範囲の1000.0は量子化範囲の127にマッピングされます。

ゼロポイントを計算する方法は、量子化範囲が[0 .. 255]であるかのように計算し、それを-128でオフセットします。したがって、新しい範囲のゼロポイントは

したがって、新しい範囲のゼロポイントは-123です。

これまで、浮動小数点範囲に値0.0が含まれる例を見てきました。次の一連の例では、浮動小数点範囲に値0.0が含まれない場合の動作を見てみましょう。

0.0の重要性

浮動小数点値0.0が浮動小数点範囲に表現されることはなぜ重要なのでしょうか?

パディングされた畳み込みを使用する場合、一般的なケースでは境界ピクセルが値0.0でパディングされることを期待しています。したがって、浮動小数点範囲に0.0が表現されることが重要です。同様に、ネットワークでパディングに使用される値Xが浮動小数点範囲に表現され、量子化がこれを認識していることを確認する必要があります。

例4:秘話-歪んだ浮動小数点範囲

次に、浮動小数点範囲に0.0が含まれない場合の動作を見てみましょう。

この例では、浮動小数点範囲[40.0 .. 1000.0]を量子化範囲[0 .. 255]に量子化しようとしています。

浮動小数点範囲で値0.0を表現することができないため、範囲の下限を0.0に拡張する必要があります。

量子化範囲の一部が無駄になっていることがわかります。その量を計算してみましょう。浮動小数点値40.0がマップされる量子化値を計算します。

したがって、範囲[0 .. 9]が量子化範囲で無駄になっており、範囲全体の約3.92%に相当します。これは量子化後のモデルの精度に大きな影響を与える可能性があります。

この歪みは、浮動小数点範囲の値0.0が量子化範囲で表現できるようにするために必要です。

浮動小数点範囲に値0.0を含めるもう一つの理由は、量子化された値を効率的に比較して、0.0が浮動小数点範囲にあるかどうかをチェックすることが非常に有用であることです。ReLUなどの演算子を考えてみてください。この演算子は、浮動小数点範囲で0.0以下の値を0.0にクリップします。

量子化値と浮動小数点範囲のゼロポイントを同じデータ型(符号付きまたは符号なしint8)で表現できることは非常に重要です。これにより、これらの比較を迅速かつ効率的に行うことができます。

次に、活性化正規化がモデルの量子化にどのように役立つかを見てみましょう。特に、活性化値の標準化が全体の量子化範囲を効果的に使用できるようにします。

量子化と活性化正規化

バッチ/レイヤー正規化は、チャンネルごとまたはレイヤーごとに活性化テンソルをゼロ平均および単位分散に変更します。

浮動小数点範囲[2000.0 .. 4000.0]を持つ入力テンソルがあるとしましょう。これが量子化範囲の見た目です。

量子化範囲の半分[-127 .. -1]が使われていないことがわかります。これは、利用可能な8ビットのうち7ビットだけを使用して、全体の浮動小数点範囲を量子化しているため問題です。これは間違いなくより高い量子化エラーとモデルの精度の低下をもたらします。これを解決するために、活性化テンソルにレイヤー正規化を適用しましょう。

アクティベーションテンソルにレイヤー正規化を適用した後、アクティベーションテンソルの浮動小数点範囲は[-2.0 .. 2.0]となります。これは、符号付きint8範囲[-128 .. 127]で表現することができます。分布の対称性を保証するため、量子化範囲を[-127 .. 127]に制限します。

したがって、正規化により、量子化範囲に穴や未使用の部分が生じるのを防ぎます。

結論

アフィン(非対称)量子化と対称量子化の違いを見ました。また、これらの量子化スキームの両方について、スケールとゼロポイントの意味と計算方法について学びました。

次に、浮動小数点範囲にfloat 0.0を含める必要性、およびこれが実際にどのように行われるかについて見ました。これにより、量子化範囲に無駄なスペースが生じるというデメリットがあります。

最後に、正規化が量子化を支援する方法と、アクティベーションを固定範囲にもたらし、量子化範囲に無駄なスペースが生じるのを防ぐ方法を見ました。実際、0平均ベースの正規化は、アフィン量子化を対称量子化に変換するのに役立ち、推論中の処理を高速化できます。

この投稿のすべての画像は著者によって作成されました。

参考文献

  1. Efficient Deep Learning Book、Chapter-2:圧縮技術の紹介
  2. Hugging Face:量子化
  3. TensorRT:量子化
  4. Neural Network Distiller:量子化
  5. Lei Mao:量子化
  6. 浮動小数点数の量子化

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Related articles

Discover more

データサイエンス

このAI研究は、近くの電話によって記録されたキーストロークを聞くことで、95%の正確さでデータを盗むことができるディープラーニングモデルを紹介しています

ディープラーニングの進歩とマイクロフォンの普及に伴い、個人デバイスを通じたオンラインサービスの人気が高まる中、キーボ...

機械学習

「プログラマーの生産性を10倍にするための5つの無料のAIツール」

「これらの5つのAIツールは、プログラマーやコーダーの生活を簡単にするために、コーディングプロジェクトの速度と精度を向上...

人工知能

ChatGPTを使用したメール自動化の方法

ChatGPT内を出たりすることなく、ChatGPTにメールを書いて送信することができます

人工知能

「ジェンAI愛好家が読むべき5冊の本」

イントロダクション 技術がますます進化する中、人工知能(AI)の領域は拡大するだけでなく、ジェネラティブAIという様々なサ...

機械学習

チャットアプリのLLMを比較する:LLaMA v2チャット対Vicuna

チャットアプリケーションにおいて、LLaMA v2 ChatとVicunaのどちらを使用するべきですか?2つのLLMの詳細な比較、それぞれの...

機械学習

「医療AIの基礎モデル」

「私たちはPLIPという医療AIの基盤モデルを説明しますPLIPは病理学のAIタスクをサポートするために構築されたビジョン言語モ...