深度学习-模型压缩之Quantization & Binarization方向论文阅读笔记

深度学习-模型压缩之Quantization & Binarization方向论文阅读笔记

论文:Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or 1

  • Weight and Activation
    首先,该论文主要把weight和激活函数结果activation在训练时都做了二元化操作。具体来说,文章介绍了两种binarization方法,确定法(deterministic)和随机法(stochastic):

    • deterministic:给定x,若x > 0,返回+1,反之返回-1。
    • stochastic:根据x的值,计算返回+1的概率p,在做二元化操作时,以p为概率返回1,反之返回-1。具体p的计算公式为 σ(x)=clip(x+12,0,1)=max(0,min(1,x+12)))

    这里有一个例外,就是input layer,它的输出通常是image信息,文中并没将其binarized。

  • Gradient

    • gradient在实现中保留了浮点数的形式,原因应该是为了保证SGD的有效。

    • 在计算gradient时,会对weights和activations加一些noise以增加generalization。(待定,看论文公布的实现再确认)

  • Propagation

    • 因为前向的时候相当于是对weight和activation求了个sign函数,而sign()的导数几乎处处为0,这显然没法用到后向的计算中,因此需要找到一个sign函数导数的估计。

    • 论文中选择的是 1|r|<=1 ,这个方法被称作“straight-through estimator”。事实上这个函数也是hard tanh的导数。 Htanh(x)=Clip(x,1,1)

    • 具体来说,对activation和weight的操作如下:

      • activation:使用sign函数作为非线性激活函数

      • weight:1. 更新weight时,把实数weight控制在[-1, +1]之间; 2. 在weight使用前先做binarization。

具体来说计算的伪代码如下:

### 论文:Deep Learning with Low Precision by Half-wave Gaussian Quan

由上文可知,在forward propagation时对activation取sign函数,在backward propagation时取 1|r|<=1 ,其实本质上是对hTan(hyperbolic tangent)的低精度估计。然而在图像识别以及其他深度学习模型中,ReLU越来越多地被用于激活函数。

这篇文章就提出了一种针对ReLU的低精度估计。具体来说,

  • Forward Propagation:在前向计算时,文章使用了quantization技术来估计ReLU函数 g(x)=max(0,x) 。就是把 (0,+] 区间用一组 ti,i{1,2,...,m} 切割成m + 1份,并使得每个 (ti,ti+1] 区间内为一个常数值(例如等于 ti ),将以此生成的分段函数 Q(x)=qi,ifx(ti,tt+1] 来估计ReLU。这么做的好处是不需要将activation存成高精度来保持计算结果,而只需根据切分的分数m安排实际activation的数据类型。

    另外, {ti} 的选择有多种,例如可以均匀分布的 {ti} ,也就是使得 ti+1ti=Δ,ΔR1 (Tensorflow使用的量化方法在此处类似),也可以使用符合正态分布的 {ti} ,这种选择正太分布来切割 (0,+] 来估计ReLu的方法就是论文的题目,Half - wave Gaussian Quantization。这个选择其实更符合逻辑,因为本身做BN的一个假设也是activation是符合正态分布的。然而论文中最终的实证结果是两种方法效果差不都。

  • Backward Propagation:在后向计算时,ReLU同样遇到上文提到的导数几乎处处为0的情况,一样也需要有个估计方法,文中提供了两个方法.

    • Clipped ReLU:

    $$\tilde{Q_c}(x) = \begin{equation}\begin{cases}q_m, &{x > q_m,}\

    x, &x\in(0, q_m],\

    1. &otherwise,\end{cases}\end{equation}$$

    对应的,导数就是在 (0qm] 中为1,其余为0.

    • Log-tailed ReLU

    $$\tilde{Q_c}(x) = \begin{equation}\begin{cases}q_m + log(x - \gamma), &{x > q_m,}\

    x, &x\in(0, q_m],\

    1. &otherwise,\end{cases}\end{equation}$$

    对应的导数就是

    $$\tilde{Q_c}^{\prime}(x) = \begin{equation}\begin{cases}1 / (x - \gamma), &{x > q_m,}\

    1, &x\in(0, q_m],\

    1. &otherwise,\end{cases}\end{equation}$$

    理论上log-tailed ReLU的估计应该更符合逻辑,因为他同时考虑了outer lier的效果,但论文的实证效果说明两种backward的估计效果差不多。

论文:Neural Networks With Few Multiplications

你可能感兴趣的:(深度学习,模型压缩)