📔

ニューラルネットワークの量子化について②

2022/07/17に公開約3,300字

はじめに

ニューラルネットワーク(NN)の基礎的な量子化について先日まとめたものの、続きをまとめていく。内容は基本的に、A survey of quantization methods for efficient neural network inferenceというサーベイ論文[1]のセクション4をベースにしている。

また、量子化手法ではないものの、Batch Normalizationの計算量を削減するBatch Normalization Foldingというテクニックについても簡単に触れた。

基礎的な部分についてまとめた前回の記事はこちら。

https://zenn.dev/zuoli/articles/32174586a3715a

Simulated and Integer-only Quantization

量子化したNNモデルをデプロイする場合には、Simulated Quantization(Fake Quantization) と、Integer-only Quantizationの2種類のアプローチが一般的に用いられる。下図中央がSimulated Quantization、右がInteger-only Quantizationを表す。

[1]より引用

Simulated Quantizationでは、量子化されたモデルのパラメータは低bitで保存するが、演算時には量子化が解除(Dequantize)され、浮動小数点として実行される。そのため、メモリの節約にはなるが、演算の高速化はできない。
一方、Integer-only Quantizationでは、すべての演算を低精度の整数演算で行うため、高効率に推論を行うことが可能となる。

一般的に、Simulated Quantizationの方が量子化誤差が少なく高精度だが、Integer-only Quantizationはレイテンシや消費電力の面で優れている。

Batch Normalization Folding

Batch Normalization(BN)は学習時の移動平均を用いて計算されるため、パラメータは固定される。そのため、BNの直前の畳み込み層や全結合層へBNの計算をマージすることで、BNの計算量を削減することができる。この手法はBatch Normalization Foldingと呼ばれている。

簡単に表すと、BNと全結合層での計算をそれぞれ

z=BN(y)=cx+d

y_j=\sum_{k}x_{k}w_{k,j}+b_j

と表すと、
z_j=\sum_{k}x_{k}c_{j}w_{k,j}+c_{j}b_{j}+d_{j}

のようにして、全結合層の計算にBNを含めることができる。

参考になる論文やページは[2]~[6]

Mixed-Precision Quantization

パラメータを低精度で量子化することにより計算量は大幅に削減できるが、精度が著しく低下してしまうことがある。これに対応する手法として、Mixed-Precision Quantizationがある。
一般的に、NNモデルでは量子化の影響を比較的受けやすい層と、そうでない層があるといわれている。つまり、層によって量子化に対する感度が異なる。
Mixed-Precision Quantizationでは、精度を維持しつつ量子化を行うため、層ごとに異なる量子化精度をとる。


[1]より引用

Vector Quantization

これまでの量子化では各パラメータをそれぞれ量子化していたが、Vector Quantizationでは、複数のパラメータをまとめて量子化する。
代表的なものにはDeep Compression[7]で使われているような、パラメータをクラスタリングして、各クラスターのセントロイドを用いて量子化を行う手法がある。

k個のクラスターがある場合、インデックスを符号化するのにはlog2(k)ビットが必要となる。下図の場合であれば、k=4なので、log2(4)=2bitあれば0~3の値で各重みがどのクラスターかを表すことができる。

[7]より引用

References

[1] Gholami, Amir, et al. "A survey of quantization methods for efficient neural network inference." arXiv preprint arXiv:2103.13630 (2021).

Batch Normalization Folding
[2] Jacob, Benoit, et al. "Quantization and training of neural networks for efficient integer-arithmetic-only inference." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
[3] Wu, Hao, et al. "Integer quantization for deep learning inference: Principles and empirical evaluation." arXiv preprint arXiv:2004.09602 (2020).
[4] Fusing batch normalization and convolution in runtime
[5] Batch Norm Folding: An easy way to improve your network speed
[6] Speed-up inference with Batch Normalization Folding

Vector Quantization
[7] Han, Song, Huizi Mao, and William J. Dally. "Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding." arXiv preprint arXiv:1510.00149 (2015).

Discussion

ログインするとコメントできます