全文概括
本文将权重量化为 { − 1 , 1 } \{-1,1\} {−1,1}, 能让硬件计算从乘法变成加法。提出在前向和反向使用二值权重代替浮点全精度权重,但反向传播用全精度。
量化成二值权重的可行性,就像Dropout、Dropconnect一样,给权重添加噪声,可能不是一件坏事。
BinaryConnect方法
两种量化方式:
- 确定式量化(sign函数): w b = { + 1 i f w ≥ 0 − 1 o t h e r w i s e w_b=\begin{cases}+1 & if\ w \geq0 \\ -1 & otherwise\end{cases} wb={+1−1if w≥0otherwise
- 随机性量化(概率性): w b = { + 1 w i t h p r o b a b i l i t y p = σ ( w ) − 1 w i t h p r o b a b i l i t y 1 − p w_b=\begin{cases}+1 & with\ probability\ p=\sigma(w) \\ -1 & with\ probability\ 1-p\end{cases} wb={+1−1with probability p=σ(w)with probability 1−p 其中, σ \sigma σ是 “hard sigmoid”函数: σ ( x ) = c l i p ( x + 1 2 , 0 , 1 ) = m a x ( 0 , m i n ( 1 , x + 1 2 ) ) \sigma(x)=clip(\frac{x+1}{2},0,1)=max(0,min(1,\frac{x+1}{2})) σ(x)=clip(2x+1,0,1)=max(0,min(1,2x+1)) 引入 hard sigmoid 而不是 soft sigmoid,是因为这样计算成本低,也能对应ReLU的有界形式。
从上图展示的算法流程可以看出:forward 和 backward 时用的是量化权重,而更新权重时用的是全精度权重,这是因为梯度是微小且需要累积的。同时,在更新权重时,应用了 clip函数,这是防止损失过大,而导致的剧烈变化,从而来回振荡。
在训练时,使用随机离散可以抵消彼此带来的量化(离散)误差;而在预测时,使用确定性量化,从而保持结果一致性。
一些训练的 tricks : 使用BN,一来能加速收敛,二来能减少权重缩放带来的总体影响;使用 ADAM 的优化方法;