全文概括
草图,就像在画画一样,是不断精确的基础,在二进制量化的应用上,即不断地逼近残差,如 HORQ (High-Order Residual Quantization) 一样。与 HORO 的区别在于,该方向并未二值化 Input,但其提出了一个新的 尺度因子的计算方式。
在 2-bit/ 1-bit 的极低精度的近似 ResNet-18 的结果展示上,其与 INQ 的精确度差不多,但多了几层的二值化卷积,即时间效率下降。【本文提供了一种 Associative Implementation 的方式来解决而这个问题】
提供了一种二值权重共享卷积计算的方式,即Associative Implementation,其计算方式直观上就是:在同一层卷积(即输入XXX是同一个,而卷积核不同),保留上一次的卷积结果,对于卷积核一样的部分不进行计算,只计算卷积核不同的部分。
Network Sketching
对每一个 W∈Rc∗w∗hW \in \mathcal{R}^{c*w*h}W∈Rc∗w∗h 都有 mmm 个 B∈Rc∗w∗hB \in \mathcal{R}^{c*w*h}B∈Rc∗w∗h 的二进制 Tensor ,和 mmm 个 对应的尺度因子。
对于文中的两种 Sketching 方法,不同的地方只在于 尺度因子 的计算。
Direct Approximation
Bj=sgn(Wj^)B_j = sgn(\hat{W_j})Bj=sgn(Wj^)aj=<Bj,Wj^>ta_j=\frac{<B_j,\hat{W_j}>}taj=t<Bj,Wj^> 其中,Wj^\hat{W_j}Wj^是前面量化的残差,初始化W0^=W\hat{W_0} = WW0^=W;t=c∗w∗ht = c*w*ht=c∗w∗h,是该层该 filter 参数的个数。
该方法和 HORQ 一模一样
Approximation with Refinement
由于上面的方法,在逼近残差时,其收敛程度低,收敛速度慢(逼近原始权重 Tensor 的程度),因此提出了新的尺度因子计算方式,使得能更加逼近原始权重:aj=(BjTBj)−1BjT∗vec(W)a_j = (B_j^TB_j)^{-1}B_j^T*vec(W)aj=(BjTBj)−1BjT∗vec(W) 其中,vec(∗)vec(*)vec(∗) 是其输入的一个列向量,比如 Bj=[vec(B0),...,vec(Bj)]B_j = [vec(B_0),...,vec(B_j)]Bj=[vec(B0),...,vec(Bj)]
其目的是想利用 WWW 的整体信息,即先前的量化逼近结果 BiB_iBi 也利用上。
Speeding-up the Sketch Model
对于一个输入 Tensor XXX,如果有多个 BBB 与其卷积,则其可能和之前的卷积操作计算有重叠的部分,则我们进行 BjB_jBj 卷积时,可以利用 Bj−1B_{j-1}Bj−1 的卷积计算结果。
Associative Implementation
假设 X和Bj0X 和 B_{j_0}X和Bj0的计算结果已经得出:X⊗Bj0=sX \otimes B_{j_0}=sX⊗Bj0=s,则我们有:(1)X⊗Bj1=s+(X⊗(Bj0∨Bj1))∗2X \otimes B_{j_1} = s + (X \otimes (B_{j_0} \vee B_{j_1})) * 2 \tag{1}X⊗Bj1=s+(X⊗(Bj0∨Bj1))∗2(1)(2)X⊗Bj1=s−(X⊗(¬Bj0∨Bj1))∗2X \otimes B_{j_1} = s - (X \otimes ( \neg B_{j_0} \vee B_{j_1})) * 2 \tag{2}X⊗Bj1=s−(X⊗(¬Bj0∨Bj1))∗2(2)
BJ1B_{J_1}BJ1 | Bj2B_{j_2}Bj2 | BJ1∨Bj2B_{J_1} \vee B_{j_2}BJ1∨Bj2 |
---|---|---|
+1 | -1 | -1 |
+1 | +1 | 0 |
-1 | -1 | 0 |
-1 | +1 | +1 |
关联计算的规则如上,直观上来看,就是和上一个卷积核一样的部分,就利用上一次的结算结果,和上一次不一样的部分,才需要计算(在这里就是不一样的部分,就用上一次的卷积结果的基础上,加上两倍的不一样地方)。
假设 Bj0∨Bj1B_{j_0} \vee B_{j_1}Bj0∨Bj1 的内积结果为 r∈[−t,+t]r \in [-t, +t]r∈[−t,+t]。我们有以下结果:公式(1)(1)(1)和公式(2)(2)(2)需要的计算量不同,公式(1)(1)(1)为 t−r2\frac{t-r}{2}2t−r,公式(2)(2)(2)为 t+r2\frac{t+r}22t+r 。所以有:当 r>0r > 0r>0,使用公式(1)(1)(1);当r<0r < 0r<0,使用公式(2)(2)(2)。
该二值权重卷积计算共享的方法可以运用于任意的树上,但如果使用最小生成树得到最优的共享计算方式,可以进一步优化算法。【该部分在 4.2 Constructing a Dependency Tree 上】
结果展示
原始的 AlexNet 的参数数量 和 计算数量 :
Refined-Sketch的结果:
在这两层中,参数少了 10x10x10x 倍,FMUL(浮点数乘法运算)少了 400x400x400x 到 3000x3000x3000x 倍。【这里乘法操作少了,但加法操作会增加】
Associative Implementation 的结果:就是 FADDs 的减少
在这两层中,使用基于最小生成树的 Associative Implementation 可以减少 2.52.52.5 倍和 2.32.32.3 倍的加法操作。
在 AlexNet 上的结果展示
在 ResNet-18上的结果展示