【读点论文】効率的なニューラルネットワーク推論のための量子化方法の調査

効率的なニューラルネットワーク推論のための量子化手法に関する調査

抽象的な

  • 抽象的な数学的計算がデジタル コンピューターの計算に適応されると、これらの計算における数値をどのように効果的に表現、処理、転送するかという問題が生じます。数値表現の問題と密接に関係しているのは量子化問題です。必要な桁数を最小限に抑えるには、連続する実数値のセットを離散数値の固定セットにどのように分散すべきでしょうか? 、 結果として生じる計算の精度を最大化しますか? この長年の定量化の問題は、メモリや計算リソースが厳しく制限されている場合には常に特に重要になります。近年、コンピュータビジョン、自然言語処理および関連分野におけるニューラルネットワークモデルの優れた性能により、定量化の問題が注目を集めています。 浮動小数点表現から 4 ビット以下で表現される低精度の固定整数値に変換すると、メモリ フットプリントとレイテンシが 16 分の 1 に削減される可能性があります。実際、これらのアプリケーションでは、通常 4 ~ 8 分の削減が達成できます。したがって、量子化が最近、ニューラル ネットワークに関連する計算を効率的に実装するための重要かつ非常に活発な研究サブ分野となっているのは驚くべきことではありません。この論文では、現在の方法の長所と短所をカバーしながら、ディープ ニューラル ネットワーク計算における数値問題を定量化する方法の概要を説明します。この調査とその組織化を通じて、ニューラル ネットワークの定量化における現在の研究の有用なスナップショットを提供し、この分野における将来の研究の評価を簡素化するためのインテリジェントな組織を提供したいと考えています。
  • 大規模言語モデル (LLM) は、さまざまなタスクで適切に実行されます。しかし、LLM は優れたタスク処理能力を備えているにもかかわらず、その膨大な規模と計算要件に起因する重大な課題に直面しています。たとえば、GPT-175B バージョンには 1,750 億という驚異的なパラメータがあり、半精度 (FP16) 形式で少なくとも 320 GB (1024 の倍数を使用) のストレージが必要です。さらに、このモデルを推論用にデプロイするには、効率的に実行するために、それぞれ 80 GB のメモリを搭載した少なくとも 5 つの A100 GPU が必要です。これらの問題を解決するには、モデル圧縮と呼ばれる現在の方法が解決策になる可能性があります。モデル圧縮は、大規模でリソースを大量に消費するモデルを、制約のあるモバイル デバイスへの保存に適したコンパクトなバージョンに変換します。さらに、最小限の遅延でより高速に実行するようにモデルを最適化したり、これらの目標間のバランスを達成したりできます。ある程度、ネットワークが深くなるほど、パラメーターが増え、モデルはより複雑になりますが、最終的な効果はより良くなります。また、モデル圧縮アルゴリズムは、大規模で複雑な事前トレーニング済みモデルを、流線型の小型モデル。 深層学習モデルの圧縮方法のレビュー - Zhihu (zhihu.com)
  • 組み込みデバイスの計算能力とメモリには限界があるため、ディープ ラーニング モデルを組み込みデバイスに導入する前にモデル圧縮する必要があります。デバイス上で。モデル圧縮の問題は、 の観点から定義できます。 3
    • モデル圧縮の利点:計算: 浮動小数点演算 (FLOPs) の量を減らし、レイテンシ (Latency); ストレージ: メモリ使用量を削減し、GPU/NPU コンピューティング使用率を向上させます< /span> a>
    • モデル圧縮の問題に関する制約
    • 数式定義モデルの圧縮問題
  • 書籍『畳み込みニューラル ネットワークの解析』では、圧縮プロセスによって引き起こされるネットワーク構造への損傷の程度に応じて、モデル圧縮テクノロジを「フロントエンド圧縮」と「バックエンド圧縮」の 2 つの部分に分けています。
    • フロントエンド圧縮とは、元のネットワーク構造を変更しない圧縮技術を指します。主に知识蒸馏、軽量ネットワーク (コンパクトなモデル構造設計)、滤波器(filter)层面的剪枝(结构化剪枝)待ってください。
    • バックエンド圧縮とは、低秩近似、無制限のプルーニング (非構造化プルーニング/スパース)、参数量化、バイナリ ネットワークなどを指します。目標は、モデルのサイズを可能な限り大きくすると、元のネットワーク構造が大きく変わります。
  • 概要:フロントエンド圧縮は元のネットワーク構造をほとんど変更しません (元のネットワーク レイヤまたはフィルタの数が減るだけです)モデル番号)、バックエンド圧縮によりネットワーク構造が大幅かつ不可逆的に変更され、その結果、元のディープ ラーニング ライブラリやハードウェア機器の互換性が失われます。ネットワークを変更します。その維持費は高額です。

導入

  • 過去 10 年間にわたり、私たちはさまざまな問題に対するニューラル ネットワーク (NN) の精度が大幅に向上することを観察してきました。多くの場合、高度にパラメータ化されたモデルによって達成されます。これらの過剰にパラメータ化された (したがって非常に大規模な) ニューラル ネットワーク モデルの精度は大幅に向上しますが、これらのモデルのサイズが非常に大きいため、リソースに制約のある多くのアプリケーションにモデルをデプロイすることは不可能です。これは、リソースに制約のある環境で低エネルギー消費と高精度のリアルタイム推論を必要とするパーベイシブディープラーニングの実装に問題を引き起こします。このユビキタスなディープラーニングは、リアルタイムのインテリジェントな医療モニタリング、自動運転、音声分析、音声認識などの幅広いアプリケーションに大きな影響を与えることが期待されています。

  • 最適な精度で効率的なリアルタイム ニューラル ネットワークを実現するには、ニューラル ネットワーク モデルの設計、トレーニング、展開を再考する必要があります [71]。最良の精度と一般化のトレードオフを提供しながら、NN モデルの効率 (レイテンシ、メモリ フットプリント、エネルギー消費などの観点から) を向上させることで、これらの問題を解決することに焦点を当てた多くの文献があります。これらの取り組みは大きく次のカテゴリーに分類できます。

    • a) 効率的なニューラル ネットワーク モデル アーキテクチャの設計: 一連の作業は、効率的なニューラル ネットワーク モデル アーキテクチャ (深い畳み込みや低ランク分解などのカーネル タイプ) およびマクロ アーキテクチャの設計に焦点を当てます。 (例: 残差や初期化などのモジュール タイプ) を使用して、NN モデル アーキテクチャを最適化します。ここでの古典的な手法では、主に手動検索を使用して新しいアーキテクチャ モジュールを見つけますが、これには拡張性がありません。したがって、新しい作業の方向性は、自動機械学習 (AutoML) およびニューラル アーキテクチャ検索 (NAS) メソッドを設計することです。これらの目標は、モデルのサイズ、深さ、幅の制約を考慮して、正しいニューラル ネットワーク アーキテクチャを自動的に見つけることです。

    • b) ニューラル ネットワーク アーキテクチャとハードウェアの共同設計: 最近のもう 1 つの取り組みは、ニューラル ネットワーク アーキテクチャを特定のターゲット ハードウェア プラットフォームに適合させる (および共同設計する) ことです。ニューラル ネットワーク コンポーネントのオーバーヘッド (レイテンシーとエネルギーの点で) はハードウェアに依存するため、これは重要です。たとえば、専用のキャッシュ階層を備えたハードウェアは、そのようなキャッシュ階層を持たないハードウェアよりも帯域幅が制限された操作をより効率的に実行できます。ニューラル ネットワーク アーキテクチャの設計と同様に、アーキテクチャとハードウェアの共同設計の最初のアプローチは手動であり、専門家がニューラル ネットワーク アーキテクチャを適応/変更してから、自動化された AutoML や NAS 技術を使用します。

    • c) 枝刈り: ニューラル ネットワークのメモリ フットプリントと計算コストを削減するもう 1 つの方法は、枝刈りを適用することです。枝刈りプロセスでは、重要性 (感度) が小さいニューロンが削除され、疎な計算グラフが得られます。ここで、重要性の低いニューロンとは、その除去がモデルの出力/損失関数に最小限の影響を与えるニューロンです。枝刈りの方法は大きく分けて非構造化枝刈りと構造化枝刈りに分けられます。 非構造化枝刈りを使用すると、出現場所に関係なく、重要性の低いニューロンを削除できます。このアプローチを使用すると、モデルの汎化パフォーマンスにほとんど影響を与えずに、アクティブな枝刈りを実行して、ほとんどのニューラル ネットワーク パラメーターを削除できます。ただし、このアプローチでは疎行列演算が発生し、高速化が難しく、多くの場合メモリの制約を受けます。一方、構造化枝刈りでは、一連のパラメータ (畳み込みフィルタ全体など) が削除されます。これには、レイヤーおよび重み行列の入力および出力の形状を変更する効果があり、引き続き高密度行列演算が可能になります。ただし、積極的に構造化された枝刈りを行うと、精度が大幅に低下することがよくあります。最先端のパフォーマンスを維持しながら、高レベルの枝刈り/スパース性を使用したトレーニングと推論は、未解決の問題のままです。興味のある読者は、プルーニング/スパースを理解するために、[ディープ ニューラル ネットワークにおけるスパース性の状態、ディープ ラーニングにおけるスパース性: ニューラル ネットワークでの効率的な推論とトレーニングのためのプルーニングと成長、畳み込みニューラル ネットワークの構造化圧縮の分類と評価] を参照することをお勧めします。性にまつわる仕事を徹底調査。

    • d) 知識の蒸留: モデルの蒸留には、大規模なモデルをトレーニングし、それを教師として使用してよりコンパクトなモデルをトレーニングすることが含まれます。学生モデルのトレーニング プロセス中、モデル蒸留の重要なアイデアは、「ハード」クラス ラベルを使用するのではなく、教師によって生成された「ソフト」確率を利用することです。これらの確率には、入力に関するより多くの情報が含まれる可能性があるためです。情報。蒸留に関しては多くの研究が行われてきましたが、ここでの大きな課題は、 蒸留のみで高い圧縮率を達成することです。 4 倍以上の圧縮 (INT8 以下の精度) でパフォーマンスを維持する量子化とプルーニングとは対照的に、知識蒸留手法は、厳しい圧縮下では無視できない精度の低下を受ける傾向があります。ただし、知識の蒸留と以前の方法 (つまり、量子化と枝刈り) を組み合わせることで、大きな成功を収めました。

    • e) 量子化: 最後に、量子化は、ニューラル ネットワーク モデルのトレーニングと推論の両方において、一貫して大きな成功を収めている方法です。数値表現と定量化の問題は数値計算と同じくらい古いものですが、ニューラル ネットワークは改善のユニークな機会を提供します。量子化の研究は主に推論に焦点を当ててきましたが、量子化がニューラル ネットワークのトレーニングにおいて重要な成功を収めていることを強調する必要があります。特に、半精度トレーニングと混合精度トレーニングにおける画期的な進歩は、AI アクセラレータのスループットを桁違いに向上させる主な原動力となっています。ただし、大幅な調整を行わずに半分以下の精度を達成することは困難であることが判明しており、最新の定量的研究は推論に焦点を当てています。この推論のための定量化がこの記事の焦点です。

    • f) 量子化と神経科学: ニューラルネットワークの定量化に緩やかに関連する神経科学の研究は、人間の脳が情報を連続形式ではなく離散/量子化形式で保存することを示しています。この見解の一般的な正当化は、連続形式で保存された情報は必然的にノイズによって破損するというものです (ノイズは私たちの脳を含む物理的環境に常に存在し、シナプスによって引き起こされる熱雑音、感覚雑音、外部雑音によって引き起こされる可能性があります)ノイズなど)。ただし、離散信号表現は、この低レベルのノイズに対してより堅牢です。離散表現のより優れた一般化能力や、限られたリソースの下での効率の向上など、他の理由も提案されています。

    • この研究の目的は、定量化で現在使用されている手法と概念を紹介し、この研究分野における現在の課題と機会について議論することです。そうすることで、最も関連性の高い研究について話し合おうとします。限られた紙面での簡単な調査では、ニューラル ネットワークの定量化と同じくらい大きな分野のすべての研究について議論することは不可能であり、いくつかの関連論文を見逃していることは間違いありません。見落とした可能性のある論文の読者および著者に、あらかじめお詫び申し上げます。

  • 業界の主流のモデル圧縮方法には、知識蒸留 (KD) 軽量モデル アーキテクチャ (コンパクト モデル設計とも呼ばれます)、枝刈り (プルーニング)、および量子化 (量子化) が含まれます。各モデルの圧縮方法をまとめると次のようになります。

    • 知識の蒸留: 転移学習の一種であり、主なアイデアは、強力な学習能力を持つ複雑な教師モデルの「知識」を、単純な生徒モデルに転移することです。古典的な KD 論文は「ロジッツ」メソッドに属しており、教師ネットワークによって出力されたソフト ラベルを、生徒ネットワークをトレーニングするためのラベルとして使用します。モデルを再トレーニングする必要があります。畳み込み層と全結合層の場合

    • プルーニング: しきい値よりも低い重みを持つ接続をネットワークから削除します。プルーニング手順: 通常どおりトレーニングし、ネットワーク内のしきい値よりも低い重みを持つ接続レイヤーを削除して、再トレーニングします。モデルを再トレーニングする必要がある

    • 量子化: ニューラル ネットワークの浮動小数点アルゴリズムを固定小数点アルゴリズムに変換することを指し、TensorRT フレームワークの KL 発散法に基づく INT8 量子化戦略が主流の技術です。 PTQ ポストトレーニング量子化方法では、モデルの再トレーニングは必要ありません。コンボリューション、フルコネクション、アクティベーション、BN レイヤーなどに影響します。

  • 複雑なモデルは、複数の単純なモデルまたは強力な制約によってトレーニングできます。複雑なモデルは優れたパフォーマンスを特徴としますが、パラメーターの数が多く、計算効率が低くなります。小規模モデルは計算効率が高いという特徴がありますが、パフォーマンスは劣ります。 知識の蒸留とは、小さなモデルを大きなモデルに適合させ、小さなモデルが大きなモデルと同様の関数マッピングを学習できるようにすることです。これにより、モデル圧縮の目的を達成するために複雑なモデルのパフォーマンスを備えながら、高速な計算速度を維持することができます。モデル蒸留の鍵は、 Soft Target (ソフトラベル KD) によって提供されるクラス間の類似性をベースとして使用するか、中間層の機能マップまたはアテンションを使用するなど、教師付き特徴の設計にあります。大きなモデルのマップをヒントとして、小さなネットワークをトレーニングします。

  • 一般に、ディープ ラーニング モデルには冗長なパラメータが多数あります。重み行列内の比較的「重要でない」重みを削除する (つまり、 0 として設定する) と、計算コストを削減できます。リソース消費とリアルタイム パフォーマンスの向上、およびこれに対応するテクノロジはモデル プルーニングと呼ばれます。プルーニング アルゴリズムのステップ:

    • モデルを通常どおりトレーニングし、モデルをプルーニングし、モデルを再トレーニングします。上記の 3 つのステップは、モデルの精度が目標に達するまで繰り返し実行され、その後トレーニングが停止されます。
  • モデル プルーニング アルゴリズムは、粒度の違いに応じて 4 種類に大別できます。細粒プルーニング (細粒) : 接続またはニューロンのプルーニングは、最小粒度のプルーニングです。 ベクトル レベル プルーニング (ベクトル レベル): これは、細粒度のプルーニングよりも粒度が高く、コンボリューション カーネルの内部カーネルに属します。プルーン。 カーネル レベル): 特定のコンボリューション カーネルを削除します。これにより、入力チャネル内の対応する計算チャネルへの応答が破棄されます。 フィルター レベル (フィルター レベル): コンボリューション カーネル グループ全体をプルーニングすると、推論プロセス中に出力特徴チャネルの数が変化します。

  • モデルの量子化とは、ニューラル ネットワークの浮動小数点アルゴリズムを固定小数点に変換することを指します。量子化には類似した用語がいくつかあり、精度が低いことが一般的である可能性があります。低精度モデルは、モデルの重み値の形式が FP16 (半精度浮動小数点) または INT8 (8 ビット固定小数点整数) であることを示しますが、現在、低精度は INT8 を指すことがよくあります。従来の精度モデルは、一般に、モデルの重み値の形式が FP32 (32 ビット浮動小数点、単精度) であることを示します。混合精度では、モデル内で FP32FP16 の両方の重み値形式が使用されます。 FP16 はメモリ サイズを半分に削減しますが、精度を維持するには一部のパラメータまたは演算子を FP32 形式にする必要があります。 モデルの量子化プロセスは 2 つの部分に分けることができます。1 つはモデルを FP32 から INT8 に変換する部分 (つまり、量子化演算プロセス)、もう 1 つは推論に INT8 を使用する部分です。 。実際には、浮動小数点モデルを量子化モデルに変換するには 3 つの方法があります。

    • data free: キャリブレーション セットは使用されません。従来の方法は、浮動小数点パラメータを量子化された数値に直接変換します。使用は非常に簡単ですが、一般に精度が大幅に低下します。ただし、クアルコムの最新の論文 < a i=1> 校正セットを使用せずに高い精度が得られます。 DFQ

    • calibration: キャリブレーション セット スキームに基づいて、少量の実データを入力して統計解析を実行します。 tensorRT、Qualcomm、HiSilicon、Horizo​​n、Cambrian など、多くのチップ メーカーがこのような機能を提供しています。

    • finetune: トレーニングに基づくソリューションfinetune トレーニング中に量子化誤差をシミュレートし、重みを調整して定量化に適したものにします。 a>。メリットとしては、より高い精度向上が図れることですが、デメリットとしては、モデルの学習コードの修正が必要となり、開発サイクルが長くなるという点です。

  • 量子化の段階に応じて、量子化方法は次の 2 つのタイプに分類されます: トレーニング後量子化 PTQ (トレーニング後量子化、オフライン量子化)、量子化対応トレーニング a>< a i=2> (トレーニング中の量子化、擬似量子化、オンライン量子化)。 QAT

  • 推論を高速化する可能性が高い現在知られている量子化方法には、二値化が含まれます。これは、単純なビット演算を使用して大規模な計算を行うことができます。同時に数字を入力します。 nvdia GPU から x86 プラットフォームまでを比較すると、1 ビット計算で理論上のパフォーマンスがそれぞれ 5 ~ 128 倍向上します。また、追加の量子化操作が導入されるだけで、SIMD (単一命令複数データ) の高速化の利点を享受できます。 線形量子化 (最も一般的)。非対称、対称、ristretto タイプに細分化できます。 nvdia gpux86arm、および一部の AI チップ プラットフォームでサポートされています。対数量子化は、a> シリーズのチップで使用されます。 ) には対数定量化のためのアクセラレーション ライブラリがありませんが、HiSilicon は現在知られている。比較的特殊な定量化方法です。同じ底を持つ 2 つのべき指数を乗算することは、それらの指数を加算することと同等であり、計算量が減少します。同時に加算も指数計算に変換されます。現在、3 つの主要なプラットフォーム (ログ定量化 を高速化に使用することもでき、追加の計算時間は大きくありません。 計算、これも非常に有望な方向です。線形量子化によって導入される追加の量子化/逆量子化計算は標準的なベクトル演算であるため、 倍であり、そのうち 倍から 8bit の計算では、効率改善の範囲は 116tensor core4bitSIMDnvdia gpux86arm351X

量子化の一般的な歴史

  • Gray と Neuhoff は、1998 年以前の定量化の歴史に関する優れた概要を書きました。この記事はよく書かれており、読む価値がありますが、読者の便宜のために、ここではいくつかの重要なポイントを簡単に要約します。 量子化には、大きな (通常は連続的な) セットの入力値を小さな (通常は有限) セットの出力値にマッピングする方法として長い歴史があります。。丸めと切り捨ては典型的な例です。定量化は微積分の基礎に関連しており、関連する手法は 19 世紀初頭 (およびそれ以前) に見られます。たとえば、最小二乗法に関する初期の研究や、(19 世紀初頭の基準による) 大規模データ分析の関連技術などです。 。量子化に関する初期の研究は 1867 年に遡り、積分の計算を近似するために離散化が使用され、その後 1897 年にシャパードは積分の結果に対する丸め誤差の影響を研究しました。近年、信号を数値形式で表現するプロセスには丸め処理が含まれることが多く、数値解析や数値アルゴリズムの実装では実数の計算が有限精度の算術演算を使用して実装されるため、デジタル信号処理において量子化が重要になっています。

  • シャノンがコミュニケーションの数学理論に関する独創的な論文を書いた 1948 年、ちょうどデジタル コンピューターの出現の頃になって、定量化の影響とコーディング理論におけるその応用が正式に提案されました。特に、シャノンは可逆符号化の理論の中で、対象となるイベントの確率が不均一である場合に同じ数のビットを使用するのは無駄であると主張しました。より理想的なアプローチは、イベントが発生する確率に基づいてビット数を変化させることであり、現在では可変レート量子化として知られている概念であると同氏は主張した。ハフマンコーディングは特にこの影響を受けます。 1959 年のその後の研究で、シャノンは歪み率関数 (エンコードされた信号の歪みの下限を提供する) とベクトル量子化の概念 (これもセクション IV-F で簡単に説明します) を導入しました。この概念は後の研究で拡張され、実際の通信アプリケーションで実用化されました。この時期の信号処理における量子化に関するその他の重要な歴史的研究には、パルス符号変調 (PCM) (サンプリングされたアナログ信号を近似/表現/符号化するためのパルス方式) の概念を導入した研究や、高解像度量子化クラシックの導入が含まれます。結果。

  • 量子化は、少し異なる方法でアルゴリズムに登場します。数値近似を使用して、連続的な数学的量が関係する問題を解決します。この分野にも長い歴史がありますが、デジタル コンピュータの出現により、再び関心が高まっています。数値解析における重要な概念は、適切に設定された問題でした (そして今もそうです) - 大雑把に言うと、次の場合に問題は適切に設定されています: 解決策が存在する; 解決策が固有である; 解決策が依存し続ける 入力データがいくつかの場所にある合理的なトポロジー。このような問題は、よく条件付けされた問題と呼ばれることもあります。特定の条件の整った問題を扱う場合でも、ある理想的な意味で問題を「正確に」解決する特定のアルゴリズムは、丸め誤差や切り捨て誤差が存在すると問題を解決できないことがわかりました。また、パフォーマンスも非常に悪いです。。アルゴリズムの前方誤差と後方誤差は、問題の条件番号に関連しています。 この場合、アルゴリズムの前方誤差は Δy = y∗−y であり、アルゴリズムの後方向誤差は f(x +Δx) = y∗ となる最小の Δx です。したがって、前方誤差は、正確な答えとアルゴリズムの出力との違いを示し、後方誤差は、実行したアルゴリズムが実際にどの入力データを正確に解決したかを示します 機能によって発生する「ノイズ」に関しては。これらの丸め誤差は、実数を有限のビットで表現すること、つまり IEEE 浮動小数点標準で義務付けられた量子化に関連しています。切り捨て誤差は、反復アルゴリズムが実際には有限回数の反復しか実行できないために発生します。後者は、連続数学のほとんどの問題は原理的には有限シーケンスの初等演算でも解くことができないため、「厳密な算術」においても重要ですが、前者は量子化に関連しています。これらの疑問は、アルゴリズムの数値安定性の概念につながります。数値アルゴリズムを、入力データ x を「真の」解 y にマッピングしようとする関数 f として考えてみましょう。ただし、丸め誤差と切り捨て誤差により、アルゴリズムの出力は実際には別の y* になります。

A. ニューラルネットの量子化

  • これらのトピックについては間違いなく何千もの論文が書かれており、ニューラル ネットワークの定量化に関する最近の研究は、これらの以前の研究とどのように異なるのかと疑問に思うかもしれません。もちろん、最近の「新しいアルゴリズム」の多くには強いつながりがあります。文献の過去の作品にアクセスします(場合によっては、本質的に過去の作品の再発見です)。ただし、ニューラル ネットワークは、定量的な問題に対して独特の課題と機会をもたらします。まず、ニューラル ネットワークの推論とトレーニングはどちらも大量の計算を必要とします。したがって、数値を効率的に表現することが特に重要です。 2 番目に、現在のニューラル ネットワーク モデルのほとんどは大幅にパラメーター化されすぎています であるため、精度に影響を与えることなくビット精度を下げる可能性が十分にあります。ただし、非常に重要な違いは、ニューラル ネットワークが急進的な量子化や極端な離散化に対して非常に堅牢であることです。ここでの新しい自由度は、関係するパラメーターの数に関連しています。つまり、過剰にパラメーター化されたモデルを扱っています。これは、適切に設定された問題を解決しているかどうか、前方誤差と後方誤差のどちらに関心があるかなどに直接影響します。 最近の定量化の進歩を推進するニューラル ネットワーク アプリケーションでは、適切に設定された問題や適切に設定された問題は 1 つも解決されていません。代わりに、ある種の順方向誤差測定 (分類品質、複雑さなどに基づく) に興味がありますが、過剰なパラメータ化のため、この測定を正確または近似的に最適化する非常に異なるモデルが多数存在します。したがって、量子化モデルと元の非量子化モデルの間に大きな誤差/距離があるにもかかわらず、非常に優れた汎化パフォーマンスを達成できます。このような自由度の向上は、主に信号をあまり変化させない圧縮方法を見つけることや、「正確な」計算と「離散的な」計算の違いである数値的手法を使用することに焦点を当ててきた多くの古典的な研究には存在しません。強力なコントロール。この観察は、ニューラル ネットワークの定量化のための新しい技術の研究における大きな原動力となっています。 最後に、ニューラル ネットワーク モデルの階層構造は、探索する追加の次元を提供します。ニューラル ネットワークの層が異なると損失関数に異なる影響が生じ、これが混合精度量子化手法の動機となります

Ⅲ.量子化の基本概念

A. 問題の設定と表記

  • NN には、{W1、W2、…、WL} で示される学習可能なパラメータを持つ L 層があると仮定します。ここで、θ はこれらすべてのパラメータの組み合わせを表します。一般性を失わずに、教師あり学習問題に焦点を当てます。その名目上の目標は、次の経験的リスク最小化関数を最適化することです。

    • L ( θ ) 1 N ∑ i = 1 N l ( x i , y i ; θ ) L(\theta)\frac{1}{N}\sum_{i=1}^Nl(x_i,y_i;\theta)L(θ)N1 i=1N l(xi そしてi ;θ)

    • ここで、(x, y) は入力データと対応するラベル、l(x, y;θ) は損失関数 (平均二乗誤差やクロスエントロピー損失など)、N は合計です。データポイントの数。また、層 i の入力非表示アクティベーションを hi として表し、対応する出力非表示アクティベーションを ai として表します。浮動小数点精度で保存されたモデル パラメーター θ をトレーニング済みであると仮定します。量子化の目標は、モデルの汎化能力/精度への影響を最小限に抑えながら、パラメータ (θ) および中間アクティベーション マップ (つまり、hi、ai) の精度を低精度に下げることです。 これを行うには、浮動小数点値を量子化浮動小数点値にマッピングする量子化演算子を定義する必要があります。 これについては以下で説明します。

B. 均一な量子化

  • 最初に、ニューラル ネットワークの重みとアクティベーションを有限の値セットに量子化する関数を定義する必要があります。この関数は浮動小数点の実数値を受け入れ、以下の画像に示すように、それらをより低い精度の範囲にマッピングします。

    • ここに画像の説明を挿入します

    • 均一量子化 (左) と不均一量子化 (右) の比較。連続領域 r の実数値は、オレンジ色の黒丸でマークされた量子化領域 Q の離散的で精度の低い値にマップされます。均一量子化では、量子化値間の距離 (量子化レベル) は同じですが、不均一量子化ではそれらが変化する可能性があることに注意してください。

    • ここに画像の説明を挿入します

    • 対称量子化と非対称量子化の説明。範囲が制限された対称量子化では実数値が [-127,127] にマッピングされ、8 ビット量子化の場合は全範囲が [-128,127] にマッピングされます。

  • 量子化関数の一般的な選択肢は次のとおりです。 Q ( r ) = I n t ( r / S ) − Z Q(r)=Int(r/S)-Z < /a >Q(r)=Int(r /S)Z。ここで、Q は量子化演算子、r は実数値の入力 (アクティベーションまたは重み)、S は実数値のスケーリング係数、Z は整数のゼロ点です。さらに、Int 関数は、最も近いものへの丸めや切り捨てなどの丸め操作を通じて、実数値を整数値にマップします。 本質的に、この関数は実数 r から整数値へのマッピングです。この量子化方法は、結果の量子化値 (量子化レベルとも呼ばれます) が等間隔 (上、左) であるため、均一量子化とも呼ばれます。量子化値が必ずしも等間隔ではない不均一量子化方法もあります (図 1、右)。これらの方法については、セクション III-F で詳しく説明します。実数値 r は、一般に逆量子化と呼ばれる操作によって量子化された Q® から復元できます。

    • r ˉ = S ( Q ( r ) + Z ) \bar{r}=S(Q(r)+Z)rˉ=S(Q(r )+Z)

    • 丸め演算のため、復元された実際の値 ≈ r は r と正確に一致しないことに注意してください。

C. 対称量子化と非対称量子化

  • 均一な量子化における重要な要素は、上記の式におけるスケーリング係数 S の選択です。このスケーリング係数は基本的に、指定された範囲の実数 r をパーティションに分割します。

    • S = β − α 2 b − 1 S=\frac{\beta-\alpha}{2^b-1}S=2b1bα

    • 式中、[α、β]はクリッピング範囲、すなわち実数値をクリッピングするための有界範囲を表し、bは量子化ビット幅である。したがって、スケール係数を定義するには、まずクリッピング範囲 [α, β] を決定する必要があります。トリミング範囲を選択するプロセスは、多くの場合、キャリブレーションと呼ばれます。

  • 簡単なオプションは、信号の最小/最大値をクリッピング範囲として使用することです (つまり、α = rmin、β = rmax)。この方法は、クリッピング範囲が原点に対して必ずしも対称ではないため、非対称量子化スキームです。つまり、 − α ≠ β −α \neq β α=β 、下の図 (右) に示すように。 対称量子化スキームは、対称クリッピング範囲 α =−β を選択することによっても使用できます。一般的な選択は、信号の最小/最大値に基づいてこれらを選択することです: −α = β = max(|rmax|, |rmin|)。非対称量子化では、一般に対称量子化よりもクリッピング範囲が狭くなります。これは、ターゲットの重みやアクティベーションが不均衡な場合、たとえば ReLU 後のアクティベーションが常に非負の値を持つ場合に特に重要です。ただし、対称量子化を使用すると、式 2 の量子化関数はゼロ点を Z = 0 に置き換えることで簡略化されます。

    • Q ( r ) = In t ( r S ) Q(r)=Int(\frac{r}{S})Q(r)=Int(Sr )

    • ここでは、スケール係数には 2 つの選択肢があります。 「フルスケール」対称量子化では、[-128,127] の完全な INT8 範囲を使用するために、S は $\frac{2max(|r|)}{2^n−1} $ (丸めモードあり) に選択されます。ただし、「制限された範囲」では、S は m a x ( ∣ r ∣ ) 2 n − 1 − 1 \frac{max(|r|)}{2^{n− として選択されます。 1}−1} 2n11atx(r ) では、範囲 [-127,127] のみが使用されます。予想通り、フルレンジアプローチの方がより正確です。対称量子化は、ゼロ点をゼロにすることで推論中の計算コストを削減し、実装を簡素化できるため、重みを量子化する際に広く採用されています。ただし、アクティベーションの場合、非対称アクティベーションのオフセットによって消費されるクロス項は、オフセットに吸収できる (または、蓄積デバイス)

  • 対称量子化および非対称量子化には信号の最小値/最大値を使用するのが一般的な方法です。ただし、このアプローチは、アクティベーション時の異常なデータの影響を受けやすくなります。これらにより範囲が不必要に増加し、量子化の解像度が低下する可能性があります。この問題を解決する 1 つの方法は、信号の最小値/最大値の代わりにパーセンタイルを使用することです。つまり、最大値/最小値を使用する代わりに、i 番目の最大/最小値を β/α として使用します。もう 1 つのアプローチは、実数値と量子化値の間の KL 発散 (つまり、情報損失) を最小限に抑えるために α と β を選択することです。

  • 概要 (対称量子化および非対称量子化)。対称量子化では、対称範囲を使用してクロップを分割します。これには、式 2 で Z = 0 が得られるため、実装が容易になるという利点があります。ただし、範囲が歪んでいて非対称である可能性がある場合には最適ではありません。この場合、非対称量子化が優先されます

D. 範囲校正アルゴリズム: 静的量子化と動的量子化

  • これまで、[α, β] せん断範囲を決定するためのさまざまなキャリブレーション方法について説明してきました。 量子化方法間のもう 1 つの重要な違いは、クリッピング範囲をいつ決定するかです。ほとんどの場合、パラメーターは推論中に固定されるため、この範囲では重みを静的に計算できます。ただし、各入力サンプルの活性化マップは異なります (式 1 の x)。したがって、アクティベーションを定量化するには、動的量子化と静的量子化という 2 つの方法があります。

  • 動的量子化では、この範囲は実行時にアクティベーション マップごとに動的に計算されます。このアプローチでは、信号統計 (最小値、最大値、パーセンタイルなど) をリアルタイムで計算する必要があり、非常にコストがかかる可能性があります。ただし、各入力の信号範囲が正確に計算されるため、通常、動的量子化の方が精度が高くなります

  • もう 1 つの量子化方法は静的量子化です。クリッピング範囲は事前に計算され、推論中に静的になります。このアプローチでは計算のオーバーヘッドは追加されませんが、一般に動的量子化と比較して精度が低くなります。一般的な事前計算方法は、一連のキャリブレーション入力を実行して、一般的なアクティブ化範囲を計算することです。元の量子化されていない重み分布と対応する量子化値の間の平均二乗誤差 (MSE) を最小限に抑えるなど、最適な範囲を見つけるためにいくつかの異なるメトリックが提案されています。 MSE が最も一般的に使用される方法ですが、エントロピーなどの他のメトリクスを使用することも検討できます。別のアプローチは、NN トレーニング中にこのクリッピング範囲を学習/課すことです。ここでの注目すべき成果には、トレーニング中にニューラル ネットワークのトリミング範囲と重みを共同で最適化する LQNets、PACT、LSQ、および LSQ+ が含まれます。

  • 概要 (動的量子化と静的量子化)。 動的量子化は、各アクティベーションのクリッピング範囲を動的に計算し、通常は最高の精度を実現します。ただし、信号の範囲を動的に計算するのは法外にコストがかかるため、実務者は多くの場合、クリッピング範囲がすべての入力に対して固定される静的量子化を使用します

E. 量子化の粒度

  • ほとんどのコンピューター ビジョン タスクでは、次の図に示すように、レイヤーのアクティベーション入力がさまざまな畳み込みフィルターで畳み込まれます。各畳み込みフィルターは異なる値の範囲を持つことができます。

    • ここに画像の説明を挿入します

    • さまざまな量子化粒度の説明。階層型量子化では、同じレイヤーに属するすべてのフィルターに同じクリッピング範囲が適用されます。これにより、分布が狭いチャネル (図のフィルター 1 など) では量子化解像度が低下する可能性があります。 異なるクリッピング範囲を異なるチャネルに割り当てるチャネル量子化を使用すると、より優れた量子化解像度を実現できます。

  • したがって、量子化方法の違いの 1 つは、重みのクリッピング範囲 [α, β] を計算する方法の粒度です。以下のように分類します。

    • a) 階層量子化:この方法では、畳み込みフィルタのレイヤーのすべての重みを考慮してトリミング範囲を決定します。次に示すように、上の図は 3 つの列で示されています。これにより、レイヤー内のパラメーター全体の統計 (最小値、最大値、パーセンタイルなど) がチェックされ、すべての畳み込みフィルターに同じクリッピング範囲が使用されます。このアプローチは実装が簡単ですが、各畳み込みフィルターの範囲が大きく異なる可能性があるため、精度が最適以下になることがよくあります。たとえば、比較的狭いパラメータ範囲を持つコンボリューション カーネルは、同じレイヤ内のより広い範囲を持つ別のカーネルよりも量子化解像度が低くなる可能性があります

    • b) グループ化された量子化: クロッピング範囲 (アクティベーション カーネルまたはコンボリューション カーネル) を計算するために、複数の異なるチャネルをレイヤ内でグループ化できます。 。これは、単一の畳み込み/アクティベーション内のパラメーターの分布が大きく異なる場合に役立ちます。たとえば、このアプローチは、完全に接続されたアテンション層で構成される Transformer モデルを量子化するために Q-BERT で役立つことがわかりました。ただし、このアプローチでは、さまざまなスケーリング係数を考慮するための追加コストが必然的に発生します。

    • c) チャネル量子化: クロップ範囲の一般的な選択は、上の図の最後の列に示すように、他のチャネルから独立して各畳み込みフィルターに固定値を使用することです。つまり、各チャネルには専用のスケーリング係数が割り当てられます。これにより量子化解像度が向上し、多くの場合精度が向上します。

    • d) サブチャネル量子化: 前の方法を極端に拡張することもできます。 クロッピング範囲は、畳み込み層または全結合層のパラメータのセットを基準にして決定されます。 。ただし、単一の畳み込み層または完全接続層を処理するときにさまざまなスケーリング係数を考慮する必要があるため、このアプローチではかなりのオーバーヘッドが追加される可能性があります。したがって、グループ化された量子化は、量子化解像度と計算オーバーヘッドの間で適切な妥協点を確立できます。

  • 概要 (定量化の粒度)。チャネル量子化は現在、畳み込みカーネル量子化の標準的な方法です。これにより、実践者は無視できるオーバーヘッドで各コアのクリッピング範囲を調整できます。対照的に、サブチャネル量子化は多大なオーバーヘッドを引き起こす可能性があるため、現在は標準的な選択肢ではありません。

F .不均一な量子化

  • 文献の中には、量子化ステップと量子化レベルが不均一な間隔になる可能性がある不均一な量子化についても調査した研究もあります。

    • Q(r) = X i , i f r ∈ [ ∆ i , ∆ i + 1 ) 。 ~r ∈ [∆i, ∆i+1) の場合、Q(r) = X_i。Q(r)=バツi ifr [Δi,Δi+1).

    • 具体的には、実数 r の値が量子化ステップ Δi と Δi+1 の間にある場合、量子化器 Q はそれを対応する量子化レベル Xi に投影します。 Xi も Δi も等間隔ではないことに注意してください。

  • 固定ビット幅の場合、不均一量子化はより高い精度を達成できます。これは、重要な値領域に重点を置くか、適切なダイナミック レンジを見つけることで分布をより適切に捕捉できるためです。たとえば、多くの不均一量子化手法は、重みとアクティベーションのベル型分布向けに設計されており、多くの場合ロングテールが発生します。典型的なルールベースの不均一量子化は対数分布を使用するもので、量子化ステップ サイズとレベルは線形ではなく指数関数的に増加します。もう 1 つの一般的なブランチはバイナリ コードの量子化に基づいており、実数ベクトル r ∈ Rn は r ≈ ∑ i = 1 m α i b i r ≈ \sum^m_{i=1} α_ib_i で表されます。 ri=1m あるi bi は、スケーリング係数 αi ∈ R とバイナリ ベクトル bi ∈ {−1, +1}n を持つ m 個のバイナリ ベクトルに量子化されます。 r と ∑ i = 1 m α i b i \sum^m_{i=1} α_ib_i を最小化する閉形式の解は存在しないため、i=1m あるi bi したがって、以前の研究はヒューリスティックな解決策に依存していました。量子化器をさらに改善するために、最近の研究では不均一な量子化を最適化問題として定式化しています。式に示すように量子化器 Q の量子化ステップ/レベルを調整して、元のテンソルと量子化された対応するテンソルとの差を最小限に抑えます。

    • min ⁡ Q ∣ ∣ Q ( r ) − r ∣ ∣ 2 \min_Q||Q(r)-r||^2Q ∣∣Q(r)r2

    • さらに、量子化器自体をモデル パラメーターと組み合わせてトレーニングすることもできます。これらの方法は学習可能な量子化器と呼ばれ、量子化ステップ/レベルは通常、反復最適化または勾配降下によってトレーニングされます。 ルールベースおよび最適化ベースの不均一量子化に加えて、クラスタリングも量子化によって生じる情報損失を軽減するのに有益です。さまざまなテンソルで K 平均法を使用して量子化ステップとレベルを決定する作品もあれば、重みにヘシアン加重 K 平均法クラスタリングを適用してパフォーマンスの損失を最小限に抑える作品もあります。詳細については、セクション IV-F を参照してください。

  • 概要 (均一量子化と不均一量子化)。一般に、不均一な量子化では、ビットを不均一に分散しパラメータ範囲を離散化することで、信号情報をより適切に捕捉できます。ただし、不均一な量子化スキームは、GPU や CPU などの汎用コンピューティング ハードウェアに効率的に導入することが難しいことがよくあります。したがって、均一量子化は、そのシンプルさとハードウェアへの効率的なマッピングにより、現在事実上の方法となっています。

G. 微調整方法

  • 多くの場合、量子化後にニューラル ネットワーク内のパラメータを調整する必要があります。これは、モデルの再トレーニング (量子化対応トレーニング (QAT) と呼ばれるプロセス) によって実行できます。また、再トレーニングなしで行うこともできます。これは、トレーニング後量子化 (PTQ) と呼ばれることが多いプロセスです)。 2 つの方法の概略的な比較を次の図に示します。

    • ここに画像の説明を挿入します

    • 量子化対応トレーニング (QAT、左) とトレーニング後の量子化 (PTQ、右) の比較。 QAT では、事前トレーニングされたモデルが量子化され、トレーニング データを使用して微調整され、パラメーターを調整し、精度の低下から回復します。 PTQ では、クリッピング範囲とスケーリング係数を計算するために、キャリブレーション データ (トレーニング データの小さなサブセットなど) を使用して事前トレーニングされたモデルがキャリブレーションされます。次に、キャリブレーション結果に基づいてモデルを定量化します。キャリブレーション プロセスは通常、QAT の微調整プロセスと並行して行われることに注意してください。

  • 量子化対応トレーニング:トレーニングされたモデルが与えられた場合、量子化によりトレーニングされたモデルのパラメータに摂動が導入される可能性があり、浮動小数点精度でトレーニングされたときからモデルが遠ざかる可能性があります。収束の。この問題は、量子化パラメータを使用してニューラル ネットワーク モデルを再トレーニングし、モデルが損失がより良い点に収束できるようにすることで解決できます。一般的なアプローチは、QuantizationAware Training (QAT) を使用することです。QAT では、通常の前方パスと後方パスが浮動小数点量子化モデルに対して実行されますが、モデル パラメーターは各勾配更新後に量子化されます (投影勾配降下法と同様)。特に、浮動小数点精度で重み更新を実行した後にこの投影を行うことが重要です。 量子化された精度で勾配を累積すると、特に低精度で勾配がゼロになったり、誤差が大きくなったりする可能性があるため、浮動小数点を使用して逆方向パスを実行することが重要です。

  • バックプロパゲーションにおける重要な微妙な点は、微分不可能な量子化演算子をどのように扱うかです。近似を行わない場合、式 1 の丸め演算により、この演算子の勾配はほぼどこでも 0 になります。上記の式 2 は区分的フラット演算子です。この問題を解決する一般的な方法は、いわゆるストレートスルー推定器 (STE) によって演算子の勾配を近似することです。 STE は基本的に丸め演算を無視し、次の図に示すように単位関数を使用して近似します。

    • ここに画像の説明を挿入します

    • ストレートスルー推定器 (STE) の使用を含む、定量的知覚トレーニング プロセスの図。

  • STE は大まかな近似値ですが、非常に低精度の量子化 (バイナリ量子化など) を除いて、実際には一般に良好なパフォーマンスを発揮します。 [活性化量子化ニューラルネットのトレーニングにおけるストレートスルー推定量の理解] の研究は、この現象の理論的根拠を提供し、STE の粗い勾配近似が (STE を正しく選択するための) 母集団勾配に関連していることが期待できることを発見しました。 。歴史的な観点から見ると、STE の元のアイデアは、バイナリ ニューロンの勾配を近似するために恒等演算子が使用された独創的な研究に遡ることができることに注意する必要があります。

  • STE が主流のアプローチですが、文献では他のアプローチも検討されています。まず、確率的ニューロンアプローチも STE の代替として提案されていることを言及しておく必要があります。組み合わせ最適化、目的伝播、またはガンベルソフトマックスを使用する他の方法も提案されています。別のクラスの代替案は、正則化演算子を使用して量子化された重みを強制しようとします。これにより、式 2 で非微分演算子を使用する必要がなくなります。これらは、非 STE メソッドと呼ばれることがよくあります。この分野の最近の研究には、量子化式 Eq. 2 の丸め演算を排除する ProxQuant が含まれます。代わりに、いわゆる W 型の非滑らかな正規化関数を使用して、量子化された値に重みを適用します。その他の注目すべき研究には、インパルス トレーニングを使用して不連続点で導関数を近似することや、量子化された重みを浮動小数点と量子化されたパラメータのアフィンの組み合わせに置き換えることなどがあります。 最近の研究では、最も近い値への丸め方法の代替として、適応丸め方法である AdaRound も提案されています。この分野の研究は興味深いものですが、これらの方法は多くの場合大幅な適応を必要とし、STE 方法が最も一般的に使用される方法です

  • モデル パラメーターの調整に加えて、以前の研究では、QAT 中に量子化パラメーターを学習することも効果的であることが判明しました。 PACT は均一な量子化の下でクリッピング範囲をアクティブ化しますが、QIT は不均一な量子化設定の拡張として量子化ステップとレベルも学習します。 LSQ は、QAT 中に非負のアクティベーション (ReLU など) のスケーリング係数を学習するための新しい勾配推定器を導入し、LSQ+ はこのアイデアをさらに、負の値を生成する swish や h-swish などの一般的なアクティベーション関数に拡張します。

  • 概要 (QAT)。 STE は大まかな近似値ですが、QAT が効果的であることが示されています。ただし、QAT の主な欠点は、NN モデルの再トレーニングにかかる​​計算コストです。この再トレーニングでは、特に低ビット精度の量子化の場合、精度を回復するのに数百エポックかかることがあります。量子化モデルを長期にわたって展開する予定であり、効率と精度が特に重要である場合、再トレーニングへの投資は価値がある可能性があります。ただし、モデルによっては寿命が比較的短いため、必ずしもそうとは限りません。次に、このオーバーヘッドのない代替アプローチについて説明します。

  • トレーニング後の量子化: 高価な QAT メソッドの代替手段は、微調整を行わずに量子化と重み調整を実行するトレーニング後量子化 (PTQ) です。したがって、PTQ のオーバーヘッドは非常に低く、通常は無視できる程度です。再トレーニングに十分なトレーニング データが必要な QAT とは異なり、PTQ には、データが制限されている、またはラベルが付けられていない状況にも適用できるという追加の利点があります。。ただし、多くの場合、特に低精度の量子化の場合、QAT に比べて精度が低くなります。

  • そこで、PTQ の精度劣化を軽減するためにさまざまな方法が提案されています。たとえば、重み値の量子化後の平均と分散における固有のバイアスを観察し、バイアス補正方法を提案し、異なるレイヤーまたはチャネル間で重み範囲 (および暗黙的なアクティブ化範囲) を均等化することで量子化誤差を低減できることを示します。 ACIQ 分析は、PTQ の最適な制限範囲とチャネル レベルのビット幅設定を計算します。 ACIQ では精度が低下する可能性がありますが、ACIQ で使用されるチャネル アクティベーション量子化をハードウェアに効率的に導入するのは困難です。 この問題を解決するために、OMSE メソッドはアクティブ化時にチャネル量子化を削除し、量子化テンソルと対応する浮動小数点テンソルの間の L2 距離を最適化することで PTQ を実行することを提案します。< a i =2>。さらに、PTQ に対する外れ値の悪影響をより効果的に軽減するために、外れ値を含むチャネルをコピーして削減する、外れ値チャネル分割 (OCS) 方法が提案されています。もう 1 つの注目すべき研究は AdaRound です。これは、単純な最近値への丸め量子化手法が直観に反して次善の解決策につながる可能性があることを示し、損失をより効果的に削減するための適応的な丸め手法を提案しています。 AdaRound は、量子化の重みの変更を完全精度の対応物から ±1 に制限しますが、AdaQuant は、量子化の重みを必要に応じて変更できる、より一般的なアプローチを提案します。 PTQ スキームは、以下で説明する定量化プロセス (ゼロショット シナリオとも呼ばれる) でトレーニング データもテスト データも使用しないという極端な場合もあります。

  • 要約 (PTQ)。 PTQ では、すべての重みとアクティベーション量子化パラメータは決定論的であり、NN モデルの再トレーニングは必要ありません。したがって、PTQ は NN モデルを定量化するための非常に高速な方法です。ただし、多くの場合、QAT と比較して精度が低くなります。

  • 3) ゼロショット量子化: これまで説明したように、量子化後の精度損失を最小限に抑えるためには、トレーニング データのすべてまたは一部にアクセスする必要があります。まず、値をクリップして適切なスケーリング係数 (文献ではキャリブレーションと呼ばれることが多い) を決定できるように、アクティブ化の範囲を知る必要があります。第 2 に、量子化モデルでは、モデル パラメータを調整して精度の低下を回復するために微調整が必​​要になることがよくあります。ただし、多くの場合、量子化プロセス中に元のトレーニング データにアクセスすることはできません。これは、トレーニング データ セットが大きすぎて配布できないか、独自のもの(例:Google の JFT-300M)であるか、セキュリティやプライバシーの問題により機密性が高い(例:医療データ)ためです。この課題に対処するために、ゼロサンプル量子化 (ZSQ) と呼ばれるいくつかの異なるアプローチが提案されています。ここではまず、ゼロショット量子化の 2 つの異なるレベルについて説明します。

    • データも微調整もありません (ZSQ + PTQ)。

    • データはありませんが、微調整 (ZSQ + QA T) が必要です。

  • レベル 1 では、微調整を行わずに、より高速かつ簡単に量子化を行うことができます。微調整には非常に時間がかかることが多く、追加のハイパーパラメータ検索が必要になることがよくあります。ただし、微調整により、特に超低精度設定で量子化モデルが精度の低下から回復するのに役立つため、一般にレベル 2 の方が高い精度が得られます。 [重み等化とバイアス補正によるデータフリーの量子化] では、重み範囲の等化とバイアス誤差の修正に依存するレベル 1 のアプローチを使用して、データや微調整を行わずに特定の NN モデルを量子化により適したものにします。ただし、この方法は (区分的) 線形活性化関数のスケーリングされた等分散特性に基づいているため、GELU 活性化を伴う BERT や swish 活性化を伴う MobileNetV3 など、非線形活性化を行うニューラル ネットワークには最適ではない可能性があります。

  • ZSQ 研究の一般的な分野は、ターゲットの事前トレーニング済みモデルのトレーニングに使用される実際のデータと同様の合成データを生成することです。次に、合成データは、量子化モデルの校正および/または微調整に使用されます。この分野の初期の研究では、敵対的生成ネットワーク (GAN) を利用して合成データを生成しました。事前にトレーニングされたモデルを弁別器として使用して、ジェネレーターをトレーニングし、その出力が弁別器によって適切に分類できるようにします。次に、ジェネレーターから収集された合成データ サンプルを使用して、完全精度の対応物から知識を抽出することで量子化モデルを微調整できます。ただし、この方法はモデルの最終出力のみを使用して生成されるため、実際のデータの内部統計 (中間層のアクティベーションの分布など) を取得することはできません。内部統計を考慮していない合成データは、真のデータ分布を正しく表していない可能性があります。この問題に対処するために、その後の多くの作業では、バッチ正規化 (BatchNorm) に保存された統計、つまりチャネルの平均と分散を使用して、より現実的な合成データを生成します。特に、データは内部統計の KL 発散を直接最小化することによって生成され、合成データは量子化モデルの校正と微調整に使用されます。さらに、ZeroQ は、合成データを感度測定とキャリブレーションに使用できることを実証し、トレーニング/検証データにアクセスせずに混合精度のトレーニング後の定量化を可能にします。 ZeroQ は、データ生成時に出力ラベルに依存しないため、ZSQ をオブジェクト検出タスクにも拡張します。入力画像をトレーニング可能なパラメータとして設定し、内部統計が実際のデータの統計と同様になるまで直接逆伝播します。さらに言えば、最近の研究では、実際のデータ分布をより適切に捕捉し、より現実的な合成データを生成するには、生成モデルのトレーニングと活用が効果的であることがわかっています。

  • 要約(ZSQ)。ゼロショット (別名データフリー) 量子化では、トレーニング/検証データにアクセスせずに量子化全体が実行されます。これは、データ セットへのアクセスを必要とせずに顧客のワークロードの展開を加速したいと考えているサービスとしての機械学習 (MLaaS) プロバイダーにとって特に重要です。さらに、これは、セキュリティやプライバシーの問題によりトレーニング データへのアクセスが制限される可能性がある状況でも重要です。

H. 確率的量子化

  • 推論中、定量化スキームは通常は決定的です。ただし、これが唯一の可能性ではありません。一部の研究では、量子化を意識したトレーニングや精度を低下させたトレーニングのために確率的量子化を検討しています。大まかな直感としては、確率的量子化を使用すると、ニューラル ネットワークが決定的量子化以上のものを探索できるようになるということです。よく支持される議論は、丸め操作は常に同じ重みを返す可能性があるため、小さな重みの更新では重みの変更が生じない可能性があるというものです。ただし、ランダムな丸めを有効にすると、ニューラル ネットワークにエスケープの機会が与えられ、パラメーターが更新される可能性があります。

  • より正式には、確率的量子化は、浮動小数点数を重み更新の大きさに応じた確率で上下にマッピングします。たとえば、式の Int 演算子は次のようになります。として定義される

    • I n t ( x ) = { ⌈ x ⌉ w i th p r o b a b i l i t y x − ⌊ x ⌋ , ⌊ x ⌋ w i th p r b a b i l i t y ⌈ x ⌉ − x Int(x)=\left\{ \begin{aligned} & \lceil x\rceil ~ ~~確率~ x-\lfloor x\rfloor, \\ &\lfloor x\rfloor ~~~確率~ \lceil x\rceil -x\\ \end{aligned} \right。Int(x )={ xwi thpバビlityx    x,xwi thpバビlityx    x

    • ただし、この定義は 2 値量子化には使用できません。したがって、[BinaryConnect: 伝播中にバイナリの重みを使用してディープ ニューラル ネットワークをトレーニングする] は、これを次のように拡張します。

    • B in a r y ( x ) = { ⌈ − 1 ⌉ w i th pro b a b i l i t y 1 − δ ( x ) , ⌊ + 1 ⌋ w i th p r o b a b i l i t y δ ( x ) Binary(x)=\left\{ \begin{aligned} & ;\lceil -1 \rceil ~~with~probability~ 1-\delta(x), \\ &\lfloor +1\rfloor ~~with~probability~ \delta(x)\\ \end{aligned} \right。Bイナry(x )={ 1w ithpro バビlity 1    δ(x),+1w ithpro バビlity δ(x)    

    • Binary は実数値の x を 2 値化する関数で、σ(・) はシグモイド関数です。

  • 最近、別のランダム量子化手法が QuantNoise に導入されました。 QuantNoise は、各順方向パス中に重みの異なるランダムなサブセットを量子化し、不偏勾配を使用してモデルをトレーニングします。 これにより、精度を大幅に低下させることなく、多くのコンピュータ ビジョンおよび自然言語処理モデルで低ビット精度の量子化が可能になります。ただし、確率的量子化法の主な課題は、重み更新ごとに乱数を作成するオーバーヘッドであるため、実際には広く採用されていません。

IV.高度な概念: 8 ビット未満の量子化

A. シミュレートされた整数のみの量子化
  • 量子化ニューラル ネットワーク モデルを展開するには、シミュレートされた量子化 (別名擬似量子化) と純粋な整数量子化 (別名固定小数点量子化) の 2 つの一般的な方法があります。アナログ量子化では、量子化されたモデル パラメーターは低精度で保存されますが、演算 (行列の乗算や畳み込みなど) は浮動小数点演算を使用して実行されます。したがって、次の図 (中央) に示すように、浮動小数点演算の前に量子化パラメータを逆量子化する必要があります。

    • ここに画像の説明を挿入します

    • 完全精度推論 (左)、シミュレートされた定量化推論 (中央)、および純粋な整数定量化推論 (右) の比較。

  • したがって、アナログ量子化を使用した高速かつ効率的な低精度ロジックの恩恵を十分に受けることはできません。ただし、純粋な整数量子化では、上の図 (右) に示すように、すべての演算が低精度の整数演算を使用して実行されます。 これにより、パラメータやアクティベーションの浮動小数点逆量子化を必要とせずに、効率的な整数演算を使用して推論全体を実行できるようになります。

  • 一般に、完全精度の推論に浮動小数点演算を使用すると、最終的な量子化精度が向上する可能性がありますが、これには、低精度のロジックのメリットが得られないという代償が伴います。低精度ロジックには、レイテンシー、消費電力、面積効率の点で、完全精度ロジックに比べていくつかの利点があります。以下の図 (左) に示すように、NVIDIA V100 や Titan RTX を含む多くのハードウェア プロセッサは、低精度の演算の高速処理をサポートしており、推論のスループットと遅延を改善できます。さらに、下図 (右) に示すように、45nm テクノロジーを使用すると、低精度ロジックのエネルギー効率と面積効率が大幅に向上します。たとえば、INT8 加算を実行すると、FP32 加算よりもエネルギー効率が 30 倍、面積効率が 116 倍になります。

    • ここに画像の説明を挿入します

    • (左) Titan RTX および A100 GPU のさまざまなビット精度ロジックのピーク スループットの比較。 (右) 45nm テクノロジーのさまざまな精度での、対応するエネルギー コストと相対面積コストの比較。ご覧のとおり、精度が低いほど、エネルギー効率が飛躍的に向上し、スループットが向上します

  • 注目すべき純粋な整数量子化の研究には、先行する畳み込み層にバッチ正規化を組み込むこと、およびバッチ正規化を使用した残差ネットワークの純粋な整数計算方法を提案することが含まれます。ただし、どちらの方法も ReLU のアクティベーションに限定されます。 [I-bert: 整数のみのベルト量子化] 最近の研究では、整数算術近似 GELU、Softmax、レイヤー正規化を使用してこの制限に対処し、純粋な整数量子化を Transformer アーキテクチャにさらに拡張しました。

  • バイナリ量子化は、純粋な整数量子化の別のタイプで、すべてのスケーリングがバイナリを使用して実行されます。バイナリは、分子に整数値、分母に 2 の累乗を持つ有理数です。 これにより、整数の加算、乗算、ビット シフトのみが必要となり、整数の除算は必要ない計算グラフが作成されます。重要なのは、このアプローチでは、すべての加算 (残差接続など) が同じバイナリ スケールを持つように強制されるため、加算ロジックがより単純かつ効率的になる a>ということです。

  • 概要 (アナログ量子化と純粋な整数化)。一般に、純粋な整数量子化とバイナリ量子化は、アナログ/疑似量子化よりも理想的です。これは、整数では算術演算に低精度ロジックのみが使用されるのに対し、アナログ量子化では浮動小数点ロジックを使用して演算が実行されるためです。ただし、これは、誤った定量化が決して役に立たないという意味ではありません。実際、擬似量子化方法は、推奨システムなど、計算量が制限された問題ではなく、帯域幅が制限された問題に対して有益である可能性があります。これらのタスクのボトルネックは、メモリ使用量とメモリからパラメータをロードするコストです。したがって、これらの場合には、誤った量子化を実行することが許容されます。

B. 混合精度量子化
  • 低精度の量子化を使用すると、ハードウェアのパフォーマンスが向上することが簡単にわかります。ただし、モデルを超低精度に均一に量子化すると、精度が大幅に低下する可能性があります。この問題は、次の図に示すように、各レイヤーが異なるビット精度で量子化される混合精度量子化によって解決できます。このアプローチの 1 つの課題は、このビット設定の選択に使用される検索スペースがレイヤーの数に応じて指数関数的に増加することです。この巨大な検索空間を解決するために、さまざまなアプローチが提案されています。

  • ここに画像の説明を挿入します

  • 混合精度量子化の図。 混合精度量子化の目標は、感度が高く効率的なレイヤーを高精度に保ち、感度が低く非効率なレイヤーには低精度の量子化のみを適用することです。効率の指標はハードウェアによって異なり、遅延やエネルギー消費が考えられます。

  • 各レイヤーに対してこの混合精度を選択することは、本質的には検索問題であり、このためにさまざまな方法が提案されています。最近の研究では、量子化戦略を自動的に決定する強化学習 (RL) ベースのアプローチを提案しており、著者らはハードウェア シミュレータを使用して、RL エージェントのフィードバックでハードウェア アクセラレータからフィードバックを取得します。< i=2>。論文 [微分可能ニューラル アーキテクチャ検索による convnets の混合精度量子化] では、混合精度構成検索問題をニューラル アーキテクチャ検索 (NAS) 問題として定式化し、微分可能 NAS (DNAS) 手法を使用して検索空間を効果的に探索します。 これらの探索ベースの方法の欠点は、多くの場合、大量の計算リソースを必要とし、パフォーマンスがハイパーパラメータや初期化の影響を受けやすいことです。

  • 別のクラスの混合精度メソッドは、周期関数正則化を使用して、さまざまなレイヤーとその精度の違いを自動的に区別し、それぞれのビット幅を学習することで混合精度モデルをトレーニングします。側面

  • これらの探索ベースおよび正則化ベースのメソッドとは異なり、HAWQ では、モデルの 2 次感度に基づいて混合精度設定を自動的に見つけるメソッドが導入されています。理論的には、2 次演算子 (ヘッセ行列) のトレースを使用して、Optimal Brain Dam の独創的な研究における枝刈りの結果と同様に、量子化に対する層の感度を測定できることが示されています。 HAWQv2 では、この方法は混合精度アクティベーション量子化に拡張され、RL ベースの混合精度方法より 100 倍以上高速です。最近、HAWQv3 では、整数のみのハードウェア認識量子化が導入されました。これは、特定のアプリケーション固有の制約 (モデル サイズやレイテンシーなど) の精度に最適なビットを見つけるための高速整数線形計画法を提案します。この研究では、INT8 量子化と比較して混合精度量子化を T4 GPU に直接展開することで、混合精度量子化のハードウェア効率に関する一般的な質問にも対処しています。量子化の速度は 50% 向上しています< /span>

  • の概要 (混合精度量子化)。 混合精度量子化は、さまざまなニューラル ネットワーク モデルの低精度量子化に効果的でハードウェア効率の良い方法であることが証明されています。このアプローチでは、ニューラル ネットワークの層が量子化に敏感/鈍感としてグループ化され、各層が上位/下位ビットを使用します。したがって、精度の低下を最小限に抑えながら、低精度の量子化によって実現されるメモリ使用量の削減と高速化の恩恵を受けることができます。最近の研究 [Hawqv3: 二項ニューラル ネットワーク量子化] では、混合精度が操作/レイヤー間でのみ使用されるため、このアプローチがハードウェア効率的であることも示しています。

C. ハードウェア対応量子化
  • 量子化の目的の 1 つは、推論の遅延を改善することです。ただし、特定のレイヤー/オペレーションを量子化した後、すべてのハードウェアが同じ速度を提供するわけではありません。実際、量子化の利点はハードウェアに依存し、オンチップ メモリ、帯域幅、キャッシュ階層などの多くの要因が量子化速度に影響します

  • ハードウェアを意識した量子化から最適な利点を得るには、この事実を考慮することが重要です。特に、この研究 [HAQ: ハードウェアを意識した自動量子化] では、強化学習エージェントを使用して、異なるビット幅のさまざまなレイヤーのレイテンシ ルックアップ テーブルに基づいて量子化のためのハードウェアを認識した混合精度設定を決定します。ただし、このアプローチではシミュレートされたハードウェア遅延が使用されます。この問題に対処するために、最近の研究 [Hawqv3] では、量子化操作をハードウェアに直接展開し、さまざまな量子化ビット精度に対する各層の実際の展開レイテンシを測定しています。

D. 蒸留支援量子化
  • 量子化の分野における興味深い取り組みは、モデルの蒸留を組み合わせて量子化の精度を向上させることです。モデルの蒸留は、より精度の高いより大きなモデルを教師として使用して、コンパクトな生徒モデルをトレーニングするのに役立つ方法です。 学生モデルのトレーニング プロセス中に、モデルの抽出では、真のクラス ラベルのみを使用するのではなく、教師によって生成されたソフト確率を利用することが提案されます。これには、より多くの入力情報が含まれる可能性があります。< a i= 2>。つまり、全体の損失関数にはスチューデント損失と蒸留損失が含まれており、通常は次のように表されます。

    • L = α H ( y , δ ( z s ) ) + β H ( δ ( z t , T ) , δ ( z s , T ) ) L=\alpha H(y,\delta(z_s))+\beta H(\デルタ(z_t,T),\デルタ(z_s,T))L=αH(y,δ(zs ))+βH(δ( zt T),δ(zs T))

    • 式では、 α と β は生徒モデルの損失と蒸留損失を調整するための重み係数、y は真のクラス ラベル、H はクロスエントロピー損失関数、zs/zt は生徒/教師によって生成されたロジット モデル、σ はソフトマックス関数、T はその温度であり、次のように定義されます。

    • p i = e x p z i T ∑ j e x p z j T p_i=\frac{exp\frac{z_i}{T}}{\sum_jexp\frac{z_j}{T}}pi =j expTj expTi

    • これまでの知識の蒸留方法は、さまざまな知識源を探索することに重点を置いていました。ロジット (ソフト確率) を知識のソースとして使用し、中間層の知識を活用するようにしてください。教師モデルの選択についてもよく研究されており、複数の教師モデルを使用して学生モデルを共同で監督し、追加の教師モデルを必要とせずに自己蒸留を適用します。

E. 極端な量子化
  • 2 値化は最も極端な量子化方法であり、量子化された値が 1 ビット表現に制限されるため、メモリ要件が 32 分の 1 に削減されます。メモリの利点に加えて、2 値 (1 ビット) および 3 値 (2 ビット) の演算は、多くの場合、ビットごとの算術演算によって効率的に計算でき、FP32 や INT8 などの高精度で大幅な高速化を実現できます。たとえば、NVIDIA V100 GPU のピーク バイナリ演算は INT8 の 8 倍です。ただし、単純な 2 値化方法では精度が大幅に低下します。したがって、この問題を解決するためにさまざまなソリューションを提案するための作業が大量に行われています。

  • ここでの重要な作業の 1 つは、重みを +1 または -1 に制限する BinaryConnect です。この方法では、重みは真の値として保持され、二値化効果をシミュレートするために前方パスと後方パス中にのみ二値化されます。前方パス中に、実数値の重みは符号関数に基づいて +1 または -1 に変換されます。その後、標準のトレーニング方法と STE を使用してネットワークをトレーニングし、微分不可能なシンボリック関数を通じて勾配を伝播できます。バイナリ化ニューラル ネットワーク (BNN) は、アクティベーションと重みを 2 値化することでこのアイデアを拡張します。 重みとアクティベーションを共同で 2 値化すると、高価な浮動小数点行列の乗算を軽量の XNOR 演算とその後のビット カウントで置き換えることができるため、レイテンシーが改善されるという追加の利点もあります。もう 1 つの興味深い研究は、[Gxnor-net: 統合離散化フレームワークの下で完全精度メモリを使用せずに 3 値の重みとアクティベーションを使用したディープ ニューラル ネットワークのトレーニング] で提案されているバイナリ ウェイト ネットワーク (BWN) と XNORNet です。スケーリング係数を重みに組み込み、+1 または -1 の代わりに +α または -α を使用することで、より高い精度を実現します。ここで、 α は、実数値の重みと結果の 2 値化された重みの間の距離を最小化するために選択されたスケーリング係数です。つまり、実数値の重み行列 W は、W ≈ αB として表すことができます。ここで、B は、次の最適化問題を満たすバイナリ重み行列です。

    • α , B = a r g min n ∣ ∣ W − α B ∣ ∣ 2 \alpha,B=argmin||W-\alpha B||^2αB=arg∣∣αB2

    • さらに、学習された重みの多くがゼロに近いという観察に触発されて、人々は重み/アクティベーションを 3 値 (+1、0、-1 など) で制約することでネットワークを 3 値化しようとし、それによって量子化された値を明示的に許可しました。ゼロになること。また、3 値化は、2 値化のような高価な行列乗算を排除することで、推論のレイテンシーを大幅に削減します。その後、(TBN) は、バイナリ ネットワークの重みと 3 値のアクティベーションを組み合わせることで、精度と計算効率の間の最良のトレードオフが達成されることを示しました。

  • 単純な 2 値化および 3 値化手法は、特に ImageNet 分類などの複雑なタスクの場合に深刻な精度の低下を引き起こすことが多いため、極端な量子化での精度の低下を軽減するために多くのソリューションが提案されています。 [バイナリ ニューラル ネットワーク: 調査] の作業は、これらのソリューションを大まかに 3 つのブランチに分けています。

    • a) 量子化誤差の最小化: ソリューションの最初の分岐は、量子化誤差、つまり実際の値と量子化された値の差を最小化することを目的としています。単一のバイナリ行列を使用して実数値の重み/アクティベーションを表す代わりに、HORQ と ABC-Net は複数のバイナリ行列の線形結合、つまり W ≈ α1B1 + · · · + αMBM を使用して、量子化誤差を削減します。 アクティベーションを 2 値化すると、後続の畳み込みブロックの表現能力が低下するという事実にヒントを得て、より幅広いネットワーク (つまり、フィルター数が多いネットワーク) の 2 値化では、精度とモデル サイズが異なる可能性があります。

    • b) 損失関数の改善: 別の研究分野では、損失関数の選択に焦点を当てています。ここで重要な作業は、損失を意識した 2 値化と 3 値化であり、2 値化/3 値化の重みの損失を直接最小限に抑えます。これは、最終的な損失を考慮せずに重みを近似するだけの他の方法とは異なります。 完全精度教師モデルの知識蒸留は、2 値化/3 値化後の精度低下を回復するための有望なアプローチであることも証明されています

    • c) トレーニング方法の改善: もう 1 つの興味深い研究分野は、バイナリ/ターナリ モデルのより優れたトレーニング方法を提供することを目的としています。多くの研究で、シンボリック関数を使用して勾配を逆伝播する STE の限界が指摘されています。STE は、範囲 [-1, 1] の重みおよび/または活性化の勾配のみを伝播します。ほとんどの研究は推論時間のレイテンシの短縮に焦点を当てていますが、DoReFa-Net は重みとアクティベーションに加えて勾配を定量化し、トレーニングを高速化します

  • 極端な量子化により、コンピューター ビジョン タスクにおける推論/トレーニングのレイテンシと多くの CNN モデルのモデル サイズを削減することに成功しました。最近、このアイデアを自然言語処理 (NLP) タスクに拡張する試みが行われています。最先端の NLP モデル (BERT、RoBERTa、GPT ファミリなど) の法外なモデル サイズと推論レイテンシを考慮して、これらのモデルは、NLP 推論タスクをエッジに押し上げる強力なツールで設計されています。

  • 要約 (極端な定量化)。非常に低いビット精度の量子化は、非常に有望な研究分野です。ただし、既存の方法では、非常に大規模なチューニングやハイパーパラメータ検索を実行しない限り、ベースラインと比較して精度が低下することがよくあります。ただし、それほど重要ではないアプリケーションの場合、この精度の低下は許容できる場合があります。

F .ベクトル量子化
  • パート II で説明したように、量子化は機械学習で発明されたものではありませんが、過去 1 世紀にわたって情報理論、特に圧縮ツールとしてのデジタル信号処理の分野で広く研究されてきました。ただし、機械学習の量子化手法の主な違いは、基本的に、元の信号と比較して最小限の変化/誤差で信号を圧縮する必要がないことです。代わりに、目標は、精度を低下させ、損失をできるだけ少なくする表現を見つけることです。したがって、量子化された重み/アクティベーションが量子化されていない重み/アクティベーションから遠く離れていても、完全に許容されます

  • そうは言っても、DSP の古典的な量子化手法には、NN 量子化、特にベクトル量子化に適用された興味深いアイデアがたくさんあります。特に、重みを異なるグループにクラスタリングし、推論中に各グループの重心を定量化された値として使用する作品がいくつかあります。次の式に示すように。 i はテンソルの重みのインデックス、c1、...、ck はクラスタリングによって見つかった k 個の重心、cj は wi に対応する重心です。クラスタリング後、重み wi は、cj に関連するコードブック (ルックアップ テーブル) 内でクラスタリング インデックス j を持ちます。

    • 分 ⁡ c 1 , . 。 。 , c k ∑ i ∣ ∣ w i − c j ∣ ∣ 2 \min_{c_1,...,c_k}\sum_i||w_i-c_j||^2c1 ...ck ∣∣i cj 2

    • 調査によると、精度を大幅に低下させることなくモデル サイズを 8 分の 1 に削減するには、K 平均法クラスタリングを使用するだけで十分であることが判明しました。これに加えて、k 平均法ベースのベクトル量子化と枝刈りおよびハフマン符号化を組み合わせて適用することで、モデル サイズをさらに縮小できます。

  • 積量子化はベクトル量子化の拡張であり、重み行列がサブ行列に分割され、ベクトル量子化が各サブ行列に適用されます。基本的な製品定量化方法に加えて、より詳細なクラスタリングを使用すると、精度がさらに向上します。 [ベクトル量子化を使用した深い畳み込みネットワークの圧縮] では、k 平均積量子化後の残差がさらに再帰的に量子化されます。 [ディープ ニューラル ネットワークの重み付きエントロピー ベースの量子化] では、著者はより多くのクラスターをより重要な量子化範囲に適用して、情報をより適切に保存しています。

V. 量子化とハードウェアプロセッサ

  • 量子化により、モデル サイズが縮小されるだけでなく、特に低精度ロジックを備えたハードウェアの場合、高速化と低消費電力化が可能になります。したがって、IoT およびモバイル アプリケーションのエッジ展開では、定量化が特に重要です。 エッジ デバイスには、コンピューティング、メモリ、大幅な電力バジェットなど、厳しいリソース制約があることがよくあります。多くのディープ ニューラル ネットワーク モデルでは、これらの要件を満たすにはコストがかかりすぎることがよくあります。さらに、多くのエッジ プロセッサ、特にマイクロコントローラでは浮動小数点演算がサポートされていません

  • ここでは、定量化の観点からさまざまなハードウェア プラットフォームについて簡単に説明します。 ARM Cortex-M は、低コストでエネルギー効率の高い組み込みデバイス向けに設計された 32 ビット RISC ARM プロセッサ コアのセットです。たとえば、STM32 シリーズは、ARM Cortex-M コアをベースとしたマイクロコントローラーで、エッジでのニューラル ネットワーク推論にも使用されます。一部の ARM Cortex-M コアには専用の浮動小数点ユニットが含まれていないため、展開前にモデルを量子化する必要があります。 CMSIS-NN は、NN モデルを定量化し、ARM Cortex-M コアに展開するのに役立つ ARM のライブラリです。具体的には、このライブラリは 2 次スケーリング係数を使用した固定小数点量子化を利用しており、量子化および逆量子化プロセスをシフト演算によって効率的に実行できます。 GAP-8 は、専用の CNN アクセラレータを備えたエッジ推論用の R​​ISC-V SoC (システム オン チップ) であり、整数演算のみをサポートするエッジ プロセッサのもう 1 つの例です。プログラマブル汎用プロセッサはその柔軟性により広く採用されていますが、専用の ASIC チップである Google Edge TPU も、エッジで推論を実行するための新たなソリューションです。膨大なコンピューティング リソースを備えた Google データセンターで実行される Cloud TPU とは異なり、Edge TPU は小型、低電力デバイス向けに設計されているため、8 ビット演算のみをサポートします。ニューラル ネットワーク モデルは、TensorFlow の量子化対応トレーニングまたはトレーニング後の量子化を使用して量子化する必要があります。

  • 次のグラフは、エッジ ニューラル ネットワーク推論に広く使用されているさまざまな商用エッジ プロセッサのスループットをプロットしています。過去数年間で、エッジ プロセッサの計算能力が大幅に向上し、以前はサーバー上でしか利用できなかった高価なニューラル ネットワーク モデルの展開と推論が可能になりました。 効率的な低精度ロジックと専用の深層学習アクセラレータと組み合わせた量子化は、このようなエッジ プロセッサの開発の重要な推進力の 1 つです

    • ここに画像の説明を挿入します

    • エッジでのニューラル ネットワーク推論のさまざまな商用エッジ プロセッサのスループットの比較。

  • 量子化は多くのエッジ プロセッサにとって不可欠なテクノロジですが、99% の遅延などのサービス レベル アグリーメント (SLA) 要件を満たすなど、非エッジ プロセッサにも大幅な改善をもたらす可能性があります。この良い例は、最近の NVIDIA Turing GPU、特に Turing tensor コアを含む T4 GPU です。 Tensor コアは、効率的な低精度行列乗算のために特別に設計された実行ユニットです。

VI.量子化研究の今後の方向性

  • ここでは、定量化における将来の研究のためのいくつかの高レベルの課題と機会について簡単に説明します。これは、量子化されたソフトウェア、ハードウェア、およびニューラル ネットワーク アーキテクチャの共同設計、結合された圧縮方法、および量子化されたトレーニングに分かれています。

  • 量子化ソフトウェア: 現在の方法を使用すると、精度を損なうことなく、さまざまなニューラル ネットワーク モデルを直接定量化し、INT8 に展開できます。 INT8 量子化モデルの展開に利用できるソフトウェア パッケージがいくつかあり (Nvidia の TensorRT、TVM など)、それぞれに優れたドキュメントが付属しています。さらに、これらの実装も非常に最適化されており、量子化による速度の向上が容易に確認できます。ただし、より低いビット精度の量子化を行うソフトウェアはあまり普及しておらず、存在しない場合もあります。たとえば、Nvidia の TensorRT は現在、サブ INT8 量子化をサポートしていません。さらに、TVM は最近、INT4 量子化のサポートを追加しました。最近の研究では、INT4/INT8 を使用した低精度および混合精度の量子化が実際に実現可能であることが示されています。したがって、低精度の定量化のための効率的なソフトウェア API の開発は重要な影響を与えるでしょう。

  • ハードウェアとニューラル ネットワーク アーキテクチャの共同設計: 前述したように、低精度の量子化に関する古典的な研究と機械学習に関する最近の研究との重要な違いは、ニューラル ネットワーク パラメータの量子化値が大きく異なる可能性があることです。それはかなりうまく要約されます。たとえば、量子化を意識したトレーニングでは、単精度パラメータを使用した元の解から遠く離れた別の解に収束する可能性がありますが、それでも良好な精度が得られます。この自由度を利用して、量子化時にニューラル ネットワーク アーキテクチャを調整できます。たとえば、最近の研究では、ニューラル ネットワーク アーキテクチャの幅を変更すると、量子化後の汎化ギャップを削減/排除できることが示されています。将来の作業の 1 つは、モデルを量子化するときに、深さや個々のコアなどの他のアーキテクチャ パラメーターを共同で調整することです。もう 1 つの今後の作業は、この共同設計をハードウェア アーキテクチャに拡張することです。これは、多くの異なる可能なハードウェア構成 (積和要素の異なるマイクロアーキテクチャなど) を検討し、これを NN アーキテクチャおよび量子化された協調設計と組み合わせることができるため、FPGA の導入に特に役立ちます。

  • 結合圧縮方法: 前述したように、量子化はニューラル ネットワークを効果的に展開する方法の 1 つにすぎません。 その他の方法には、効率的なニューラル ネットワーク アーキテクチャの設計、ハードウェアとニューラル ネットワーク アーキテクチャの共同設計、枝刈り、知識の蒸留などがあります。定量化は、これらの他の方法と組み合わせて使用​​できます。ただし、現在、これらの方法の最適な組み合わせを探求する研究はほとんどありません。たとえば、プルーニングと量子化を一緒にモデルに適用してオーバーヘッドを削減できますが、構造化/非構造化プルーニングと量子化の最適な組み合わせを理解することが重要です。

  • 量子化トレーニング: おそらく、量子化の最も重要な用途は、半精度ニューラル ネットワークのトレーニングを高速化することです。これにより、より高速で電力効率の高い低精度ロジックによるトレーニングが可能になります。ただし、これをさらに INT8 の精度トレーニングにまで推し進めるのは非常に困難です。この分野には興味深い研究がいくつか存在しますが、提案された手法は多くの場合、広範なハイパーパラメータ調整を必要とするか、比較的単純な学習タスクの一部のニューラル ネットワーク モデルにのみ適用できます。基本的な問題は、トレーニングが不安定になり、INT8 の精度で発散する可能性があることです。この課題を解決することは、さまざまなアプリケーション、特にエッジ トレーニングに重大な影響を与える可能性があります。

VII.まとめと結論

  • 抽象的な数学的計算がデジタル コンピューターでの計算に適応されると、これらの計算における数値の効率的な表現、操作、伝達に問題が生じます。数値表現の問題と密接に関係しているのは、量子化の問題です。必要なビット数を最小限に抑え、量子化の精度を最大化するには、一連の連続実数値を固定の離散数値セットにどのように分散すべきかという問題です。それに伴う計算は?これらの疑問はコンピューター サイエンスと同じくらい古いものですが、特に効率的なニューラル ネットワーク モデルの設計に関連しています。理由はいくつかあります。まず、ニューラル ネットワークは大量の計算を必要とします。したがって、数値を効果的に表現することが特に重要です。第 2 に、現在のニューラル ネットワーク モデルのほとんどはパラメータが大幅に過剰になっています。したがって、精度に影響を与えることなくビット精度を下げる可能性は十分にあります。第三に、ニューラル ネットワーク モデルの階層構造により、探索するための追加の次元が提供されます。したがって、ニューラル ネットワークの異なる層は損失関数に異なる影響を及ぼし、これが混合精度量子化などの興味深い手法の動機となります。

  • 浮動小数点表現から 8/4 ビット以下で表現される低精度の固定整数値に移行すると、メモリ フットプリントとレイテンシが削減される可能性があります。 TVM 量子化ライブラリを使用した ResNet50、VGG-19、inceptionV3 などの一般的なコンピューター ビジョン モデルの INT8 推論は、NVIDIA GTX 1080 上でそれぞれ 3.89 倍、3.32 倍、5.02 倍の加速を達成できます。 ResNet50 の INT4 推論は、INT8 と比較して NVIDIA T4 および RTX でさらに 50 ~ 60% の高速化を実現でき、効率を最大化するには低いビット精度を使用することが重要であることが強調されています。

  • 最近、Hawqv3 は混合精度量子化を活用して、精度を低下させることなく INT8 推論と比較して ResNet50 で 23% の高速化を達成し、INT8 のみの推論を BERT モデルに拡張して推論を FP32 より 4.0 倍高速化しました。上記の作業は GPU での高速化に焦点を当てていますが、[量子化されたディープ ラーニング モデルの効率的な実行: コンパイラー アプローチ] は、Intel Cascade Lake CPU および Raspberry Pi4 (どちらも非 GPU アーキテクチャ) 上のさまざまなコンピューター ビジョン モデルで INT8 量子化も実行します。それぞれ2.35倍と1.40倍が得られました。したがって、参考文献が示すように、ニューラル ネットワーク モデルにおける定量化の問題は、非常に活発な研究分野となっています。

  • この作品では、この非常に多様な作品群に概念的な構造を導入しようと試みています。まず、均一量子化、不均一量子化、対称量子化、非対称量子化、静的量子化、動的量子化など、多くの量子化アプリケーションに共通するトピックについて説明します。次に、ニューラル ネットワークの量子化のさらにユニークな量子化問題を検討します。 これには、階層化、グループ化、チャネルおよびサブチャネルの量子化が含まれます。さらにトレーニングと量子化の相互関係を検討し、トレーニング後の量子化と比較した量子化を意識したトレーニングの長所と短所について説明します。 量子化とトレーニングの関係の議論をさらに詳しく説明するのは、データの可用性の問題です。この状況の極端な例は、トレーニングに使用されたデータがプライバシーなどのさまざまな正当な理由で利用できなくなることです。これにより、ゼロサンプル定量化の問題が生じます。

  • 私たちはエッジ展開のための効率的なニューラル ネットワークに特に焦点を当てているため、この環境に固有の問題を考慮します。これらには、パラメータを 8 ビット未満 (おそらくバイナリ値と同じくらい低い値) で表現する量子化技術が含まれます。また、純粋な整数量子化の問題についても検討します。これにより、浮動小数点ユニットが不足していることが多いローエンドのマイクロプロセッサにニューラル ネットワークを展開できるようになります。

  • 一般に、パラメーター プルーニング、特に非構造化プルーニングでは、分類精度を簡単に失うことなくモデル サイズを大幅に圧縮できます。安定したモデル分類を必要とするアプリケーションの場合、非構造化プルーニングが最初の選択肢になります。 1 回のエンドツーエンド トレーニングを通じて圧縮および加速されたモデルを取得する必要がある場合は、コンパクトなフィルター設計に基づいたディープ ニューラル ネットワークの圧縮および加速方法を使用できます。ニューラル ネットワークの推論速度に影響を与える 4 主な要因は、計算量 FLOPs、メモリ アクセス コスト MAC、計算並列性、ハードウェア プラットフォームのアーキテクチャと機能 (計算能力、GPU メモリ帯域幅)。

おすすめ

転載: blog.csdn.net/weixin_43424450/article/details/134815744