2015-10-25

[1510.03009] Neural Networks with Few Multiplications

http://arxiv.org/abs/1510.03009
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つの手法により乗算を減らす。
  1. binary connect (2値結合) / ternary connect (3値結合)
  2. quantized back propagation (量子化誤差逆伝搬法)
(1) 重みを確率変数とみなし、2値 {-1, 1} (binary connect) または 3値 {1, 0, -1} (ternary connect) にサンプリングした重み行列で計算する。これにより内積を乗算ではなく加減算で計算できる。

(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

精度が若干向上している(正則化のような効果が出ている)のは、確率的に重みや(重み更新時の)入力値が揺れているためではないかと思われる。つまり、ノイズを混ぜているのに似ているではないだろうか。