量子化
読み: りょうしか
モデルの重みや活性化値を低ビット精度 (INT8 など) で表現することで、推論速度の向上とメモリ使用量の削減を実現する最適化手法。
量子化 (Quantization) は、ニューラルネットワークのパラメータや中間計算を通常の 32 ビット浮動小数点 (FP32) からより低いビット精度 (INT8、FP16 など) に変換する技術である。モデルサイズを最大 4 倍圧縮し、推論速度を 2-4 倍向上させることができる。エッジデバイスやモバイル環境でのリアルタイム画像処理に不可欠な最適化手法である。
FP32 の重みを INT8 に量子化すると、1 パラメータあたりのメモリが 4 バイトから 1 バイトに削減される。ResNet-50 (約 100MB) は INT8 量子化で約 25MB になり、スマートフォンのメモリ制約内で動作可能になる。
- 訓練後量子化 (PTQ): 学習済みモデルに対してキャリブレーションデータ (数百枚程度) を用いて量子化パラメータ (スケールとゼロポイント) を決定する。追加学習が不要で手軽だが、精度低下が大きい場合がある
- 量子化対応学習 (QAT): 学習中に量子化の影響をシミュレートし、量子化後も精度を維持できるようパラメータを最適化する。PTQ より高精度だが学習コストが追加される
- 混合精度: 感度の高い層 (最初と最後の層など) は FP16 のまま残し、それ以外を INT8 にする戦略。精度と速度のバランスを細かく調整できる
TensorFlow Lite は tf.lite.Optimize.DEFAULT で自動量子化を提供し、ONNX Runtime は INT8 量子化をサポートする。WebAssembly 環境でもブラウザ上で量子化モデルを実行でき、サーバーレスな画像処理パイプラインを構築できる。量子化による精度低下は通常 1-2% 以内に収まり、実用上問題にならないケースが多い。