Deep Neural Netowrk(DNN)における、乗算器の精度に関する論文
Multiplier-Accumulators
DNNの主要なOperationは、Weightの乗算と乗算後の値の積算。下の表のH/W cost でみると乗算器の精度にH/W costが依存している。
乗算器と積算のBit幅が16, 32の時と16,16の時でそれほど変わらないのに対し、乗算器と積算のBit幅が32,32の時と16,32の時ではH/W costが大きく変化している。乗算器のBit数を減らそうという根拠。
Floating point
Floting Pointでは下記のようにDataを表現する。
signは符号ビットで1bit、Exponent, MantissaはFromat毎に決まっている。各Formatとbit数の関係。
Fixed Point
Fixed Pointは符号付きMantissaとglobalなscaling factorに分けて考えることができ、scaling factorを全変数でshareしているFormatと考えることができる。
通常Scaling factorはshift演算で置き換えられるような値になっている。
これによりFixed Pointは、unique shared fixed exponentとみなせる。
Dynamic Fixed Point
DNNの学習では、変数に以下の特徴がある
・activations,gradients, parametersの値の範囲が異なる
・gradientsは学習中徐々に減少する
fixed point formatでは、DNNには適さない。
dynamic fixed point formatは、groupごとにscaling factorをもつ方式。
それぞれのscaling factorは初期値として持っておいて、一定頻度で更新する。
Evaluation
Dataset
Error Rate
Low Precision Results
radix point(小数点の位置)ごとのtest error率のグラフ
5bitぐらいで性能は保たれている。値の範囲が[-32,32]。
Fixed Pointでは、符号ビットを含めて20bitまでは性能を維持している。
Dynamic fixed Pointでは、10bitぐらい。
Propagation
Parameter
Overflow Rateを変えた時のError率の変化
エラー率を緩めると性能も悪くなる。
最後に
Dynamic Fixed Pointに関しては、H/Wであればだいたい行っていること。ただしError率によってScaling Factorを変えるというのはないかも。
Scaling Factorを変更できるようにするためにそれ専用の回路になってしまうので、その分だけH/W CostがUpしそう。
ただし、こういった知見はH/W 実装の時に重要だと思われる。
NVIDIAのGPUも16bitのFloating Pointに対応している。
ただし、16年3月時点でこれに対応しているPlatformはあまりなかったと記憶している。