First we stochastically binarize weights
Second, while back-propagating error derivatives, in addition to binarizing the weights, we quantize the representations at each layer to convert the remaining multiplications into binary shifts.次の2つの手法により乗算を減らす。
- binary connect (2値結合) / ternary connect (3値結合)
- quantized back propagation (量子化誤差逆伝搬法)
(2) 誤差逆伝搬時の重み更新量 ΔW を計算するときに、入力値 x を確率的に量子化することで、乗算を使わずにシフト演算で計算する。
具体的には、x = 5 の場合、log_2(5) = 2.32... を切り下げて 2 なので、シフト量は 0.75 の確率で 2 となり、0.25 の確率で 3 となる。よって、ΔW = δ << 2 (または δ << 3) として計算できる (δは誤差項)。シフト量は -4~3 の範囲に収まるようにクリッピングする。
論文からは (2) の quantized back propagation の方法がよく分からなかったので、第一著者のソースコードを参照した。
Zhouhan Lin (第一著者) のソースコードは次のアドレスにある。
https://github.com/hantek/binary_conv/blob/master/matcode/layer_m.py
精度が若干向上している(正則化のような効果が出ている)のは、確率的に重みや(重み更新時の)入力値が揺れているためではないかと思われる。つまり、ノイズを混ぜているのに似ているではないだろうか。