量化方法总结(1)

量化模型的特征

从training和inference模型是否一致来看,可细分为:

  • post training quantization。在训练时不做quantization,inference时将所有需要quantization的地方做量化。这种做法往往对accuracy损失较大
  • quantization aware training。 在训练时做quantization,但对quantization的地方要同时保留原有精度,以便于梯度更新。在inference时只保留量化后的结果。这种做法效果往往要好于第一种。
  • training与inference时模型一致。这种做法目前只见过一例(WAGE)。需要保证梯度更新时能直接更新在量化后的weights上。

从quantization的精度来看,可细分为:

  • 二值化
  • 三值化
  • bit-shifts。用两个整数来记录任何一种精度。其中一个整数是 2 n 2^{n} 2n的指数位,另一个是扩大 2 n 2^{n} 2n倍的浮点数的整数位Int。然后用 I n t 2 n \frac {Int}{2^{n}} 2nInt来表征任何一种精度

从quantization的映射情况看,可细分为:

  • 映射后与映射前相对大小关系不变。映射前a>b,映射后:q(a)>q(b)。这里a ∈ \in Weigths,b ∈ \in activation 。符合这种情况的比如XNor-net等模型
  • 映射前后相对大小关系发生变动。映射前a>b,映射后大小关系不确定。符合这种情况的比如Tensorflow lite的量化方法。

从quantization后的梯度更新来看,可细分为:

  • W r ← W r − η ∂ C ∂ w b W^{r} \leftarrow W^{r} - \eta \frac {\partial C}{\partial w^b} WrWrηwbC
  • W r ← W r − η ∂ C ∂ w b ∂ w b ∂ w r W^{r} \leftarrow W^{r} - \eta \frac {\partial C}{\partial w^b}\frac {\partial w^{b}}{\partial w^{r}} WrWrηwbCwrwb 由于 ∂ w b ∂ w r \frac {\partial w^{b}}{\partial w^{r}} wrwb几乎处处为零,所以这里引入了一种技术,straight-through estimator, g r = g q ∗ 1 ∣ r ∣ < 1 g_{r} = g_{q}*1_{|r|<1} gr=gq1r<1 ,使得梯度更新得以进行。

从bn的处理上来看:

  • 绝大部分工作都直接复用了bn。bn在常见网络的中的运行耗时和内存占用都比较大,所以直接复用会对quantization效果打折扣
  • 目前只见过WAGE将bn的操作转化成了wetight的scale操作。但是它并没有单独对这个工作的效果做出分析,同时也感觉他做的不是特别合理。

你可能感兴趣的:(量化)