ニューラルネットワーク
量子化(英: Quantization)はニューラルネットワークの重み(weight)および演算入出力(activation)の数値表現精度を下げる最適化である。例えば8-bit量子化では通常FP32で表現される数値をINT8で表現する。
量子化の効果は以下の要素から生み出される。
プロセッサ命令: FP32より高効率なINT8命令の利用(例:IPC、1命令あたりの演算数(AVX-FP32: 8要素、AVX2-INT8: 32要素))
キャッシュ: 容量低下によるキャッシュへ乗るデータ量増加 → キャッシュヒット率向上
メモリ: 容量低下によるメモリ消費とメモリ転送量の減少
数値精度: 計算精度の低下によるモデル出力精度の低下
計算量: 量子化-脱量子化の導入による計算量の増加
量子化が最終的にメリットをもたらすかは上記の要素の組み合わせで決定される。
効率的な命令セットを持たない場合、出力精度が下がりさらにQDQの計算負荷が勝って速度が悪化する場合もある。このように、量子化の効果はモデルとハードウェアに依存する。
量子化手法にはいくつかのバリエーションがある。
静的量子化(英: Static Quantization): 代表的データを用いた量子化パラメータの事前算出
動的量子化(英: Dynamic Quantization): 各実行ステップのactivation値に基づくactivation用量子化パラメータの動的な算出(weightは実行前に量子化)
fake quantization (Quantize and DeQuantize; QDQ): 量子化+脱量子化( y = d e q u a n t ( q u a n t ( x ) ) {\displaystyle y=dequant(quant(x))} )。学習時の量子化模倣あるいは量子化オペレータの表現
入出力信号やパラメータ(重み、閾値)が複素数値であるようなニューラルネットワークで活性化関数は必然的に複素関数になる。