「テンソル量子化:語られなかった物語」
Tensor Quantization Untold Story
機械学習フレームワークにおける量子化の実装詳細を詳しく見る
Naresh Singhと共著。
目次
- はじめに
- 量子化におけるスケールとゼロポイントの意味とは?
- 量子化スキームの種類
- 量子化スケールとゼロポイントの例
- 量子化と活性化正規化
- 結論
- 参考文献
はじめに
この記事の残りの部分では、具体的な例を使って以下の質問に答えようとします。
- 量子化におけるスケールとゼロポイントとは何ですか?
- 異なる種類の量子化スキームは何ですか?
- 異なる量子化スキームにおけるスケールとゼロポイントの計算方法は?
- 量子化においてゼロポイントはなぜ重要ですか?
- 正規化技術は量子化にどのように役立ちますか?
量子化におけるスケールとゼロポイントとは何ですか?
スケール: 浮動小数点範囲を量子化範囲で表現する場合、通常、浮動小数点範囲[Fmin..Fmax]を量子化範囲[Qmin..Qmax]で表現します。この場合、スケールは浮動小数点範囲と量子化範囲の比率です。
- 「ステーブル拡散」は実際にどのように機能するのでしょうか?直感的な説明
- 「Amazon SageMaker Pipelinesを使用した機械学習ワークフローの構築のためのベストプラクティスとデザインパターン」
- BYOL(Bootstrap Your Own Latent)— コントラスティブな自己教示学習の代替手段
後で計算方法の例を見てみましょう。
ゼロポイント: 量子化におけるゼロポイントは、浮動小数点0.0の量子化範囲における表現です。具体的には、ゼロポイントは量子化された値であり、実質的には浮動小数点値0.0を表します。なぜこのような表現が実用上興味深いのか、後で例とともに見ていきましょう。
次に、実践で使用される主な量子化スキームを見て、それらがどのように似ていてどのように異なるかを理解しましょう。
量子化スキームの種類
モデルの圧縮時に使用できる量子化の種類を考えると、主に2つのタイプがあります。
- 対称量子化: この場合、ゼロポイントはゼロです。つまり、浮動小数点範囲の0.0は量子化範囲の0と同じです。通常、ランタイムでの計算が効率的ですが、浮動小数点範囲が浮動小数点0.0を中心に均等に分布していない場合、精度が低下する可能性があります。
- アフィン(非対称)量子化: ゼロポイントは非ゼロの値を持つものです。
しかし、詳細に入る前に、ゼロポイントの意味を定義しようとしてみましょう。
量子化スケールとゼロポイントの例
非常にシンプルな例から始めて、徐々に具体的な例を構築していきましょう。
例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平均ベースの正規化は、アフィン量子化を対称量子化に変換するのに役立ち、推論中の処理を高速化できます。
この投稿のすべての画像は著者によって作成されました。
参考文献
- Efficient Deep Learning Book、Chapter-2:圧縮技術の紹介
- Hugging Face:量子化
- TensorRT:量子化
- Neural Network Distiller:量子化
- Lei Mao:量子化
- 浮動小数点数の量子化
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 「生成AIにおけるLLMエージェントのデコーディングの機会と課題」
- 「AIとMLが高い需要になる10の理由」 1. ビッグデータの増加による需要の増加:ビッグデータの処理と分析にはAIとMLが必要です 2. 自動化の需要の増加:AIとMLは、自動化されたプロセスとタスクの実行に不可欠です 3. 予測能力の向上:AIとMLは、予測分析において非常に効果的です 4. パーソナライズされたエクスペリエンスの需要:AIとMLは、ユーザーの行動と嗜好を理解し、パーソナライズされたエクスペリエンスを提供するのに役立ちます 5. 自動運転技術の需要の増加:自動運転技術の発展にはAIとMLが不可欠です 6. セキュリティの需要の増加:AIとMLは、セキュリティ分野で新たな挑戦に対処するために使用されます 7. ヘルスケアの需要の増加:AIとMLは、病気の早期検出や治療計画の最適化など、医療分野で重要な役割を果たします 8. クラウドコンピューティングの需要の増加:AIとMLは、クラウドコンピューティングのパフォーマンスと効率を向上させるのに役立ちます 9. ロボティクスの需要の増加:AIとMLは、ロボットの自律性と学習能力を高めるのに使用されます 10. インターネットオブシングス(IoT)の需要の増加:AIとMLは、IoTデバイスのデータ分析と制御に重要な役割を果たします
- 「ChatGPTを再び視覚させる:このAIアプローチは、リンクコンテキスト学習を探求してマルチモーダル学習を可能にします」
- 「生成AIをめぐる旅」
- 上位10のLLM脆弱性
- 「LLaSMと出会う:音声と言語の指示に従うクロスモーダルな対話能力を持つエンドツーエンドで訓練された大規模なマルチモーダル音声言語モデル」
- 「機械学習のためのソフトウェアエンジニアリングパターン」