URL
https://arxiv.org/pdf/1611.10176
TL;DR
Algorithm
Dropout
- 由于 RNN 本质是由多个 FC 组成,所以需要使用
Dropout
将一部分元素随机置0,但在量化神经网络中,0不在 Qk(X+0.5)−0.5 ,所以需要将原始 DoReFa-Net
的量化范围: [−0.5,0.5]→[0,1]
quantization of word embedding weights
- 初始化
W∈Uniform(0,1)
- quantization
W=Clip(W,0,1)
quantization of GRU
-
standard GRU
zt=σ(Wz⋅[ht−1,xt])
rt=σ(Wr⋅[ht−1,xt])
h~t=tanh(W⋅[rt×ht−1,xt])
$ h_t = (1-z_t)\times h_{t-1}+z_t\times \tilde{h_t}$
其中:” ⋅ “ 表示 matmul
,” × “ 表示 hadamard product
, σ 表示 sigmoid
-
quantization of GRU
zt=σ(Wz⋅[ht−1,xt])
rt=σ(Wr⋅[ht−1,xt])
h~t=σ(W⋅[Qk(rt×ht−1),xt])
$ h_t = Q_k((1-z_t)\times h_{t-1}+z_t\times \tilde{h_t})$
- 改进:
tanh
变 sigmoid
- 将 W,Wz,Wr quantize 到 [-1, 1]
- 将 xt quantize 到 [0, 1]
- 量化函数 Qk()
quantization of LSTM
-
standard LSTM
ft=σ(Wf⋅[ht−1,xt]+bf)
it=σ(Wi⋅[ht−1,xt]+bi)
Ct~=tanh(WC⋅[ht−1,xt]+bi)
Ct=ft×Ct−1+it×Ct~
ot=σ(Wo⋅[ht−1,xt]+bo)
ht=ot×tanh(Ct)
-
quantization of LSTM
ft=σ(Wf⋅[ht−1,xt]+bf)
it=σ(Wi⋅[ht−1,xt]+bi)
Ct~=tanh(WC⋅[ht−1,xt]+bi)
Ct=ft×Ct−1+it×Ct~
ot=σ(Wo⋅[ht−1,xt]+bo)
ht=Qk(ot×σ(Ct))
- 改进:
tanh
变 sigmoid
- 将 W,Wz,Wr
quantize
到 [-1, 1]
- 将 xt quantize 到
[0, 1]
- 量化函数 Qk()
Thoughts
- 目前芯片上都是将所有的线性操作吸到卷积的
affine_k
和 affine_b
,所以需要解决 tanh
和 sigmoid
,一种最简单暴力的方式是分别 clip 到 [-1, 1]
和 [0, 1]