ICLR 2019 paper read: quantify neural network

https://www.toutiao.com/a6701879235964830212/

 

Meeting held in May this year ICLR 2019 received a total of 502 papers, two research related to quantify neural network which will interpret this article.

  • UNDERSTANDING STRAIGHT-THROUGH ESTIMATOR IN TRAINING ACTIVATION QUANTIZED NEURAL NETS
  • https://openreview.net/pdf?id=Skh4jRcKQ
  • ANALYSIS OF QUANTIZED MODELS
  • https://openreview.net/pdf?id=ryM_IoAqYX

Depth neural network (DNN) has greatly boosted machine learning (ML) Artificial Intelligence (AI) / performance in a number of different tasks, and thus brought a lot of sophisticated applications seen in our daily lives. Classic cases include target recognition (Krizhevsky et al, 2012;. Szegedy et al, 2014.), Voice recognition (Hinton et al, 2012;.. Sainath et al, 2013), statistical machine translation (Devlin et al, 2014. ; Sutskever et al, 2014;.. Bahdanau et al, 2015) and master Go (Silver et al, 2016)..

Neural network consists of two parts: training and reasoning. Since the calculation and computing a weighted sum of input neurons required to perform a large number of neural network needs to multiply - accumulate operations (MAC), so train the neural network on a conventional (universal) and digital hardware using a neural network performing inference inefficient .

DNN basically on one or more graphics processing units (GPU) training. In essence, GPU support for highly parallel and fast, but power consumption is very high. In addition, once trained models, is still difficult to run the network after training on handheld devices and other low-power devices. Therefore, people put a lot of research effort, want to speed up the DNN running on general-purpose and special-purpose computing hardware.

Understanding of training to activate pass-through is estimated quantization network (Understanding Straight-Through Estimator in Training Activation Quantized Neural Nets)

introduction

Through the use reason estimator (the STE) can be illustrated by a simple example. There is a simple threshold function --ReLU function, i.e., f (x) = max (0, x). In addition, the network set up the outset of a set of initial weights. These ReLU the input (the weight is multiplied by the signal) can be negative, which will cause f (x) of the output is 0.

For these weights, f (x) is the derivative will be back propagation process is 0, which means that the network can not learn from these derivatives to anything, the weights can not be updated. STE concept resulting. Gradient provided STE will enter as a function of its output equal to a threshold gradient, and regardless of how the actual derivative threshold function itself. The earliest research on STE's (. Bengio et al 2013), see:

  • https://arxiv.org/pdf/1308.3432.pdf

This paper uses a "coarse gradient (coarse gradient)" to refer to by the term "modified by the STE

Chain rule

Loss function "obtained in terms of the weight variable gradient. By choosing this non-general of the gradient, the question becomes: STE gradient is not the actual loss gradient function (in fact, is not any gradient STE gradient function), why in the negative direction of the search helps to minimize the loss of training ? In addition, how to choose a "good" STE?

This paper discusses three representative STE by two yuan Gaussian data for learning and activation layer Layer linear network. The authors also prove to select appropriate STE can get excellent performance training algorithm.

I choose to interpret this paper because you want a detailed interpretation of the right to use gradient STE heavy update. Direct copy these formulas can use, of course, but I hope to be able to interpret mathematical around, and can provide an effective process why some of this mathematical insights.

Before you continue reading, let's take a look at the way the paper notation is used:

  • || ⋅ || denotes a vector norm or Euclidean norm of a matrix of the log spectrum
  • 0_n ∈ R ^ n denotes the all-zero vector
  • 1_n ∈ R ^ n denotes the vector of all ones
  • I_n matrix of order n
  • <W, z> = (w ^ T) z represents w, the inner product of z ∈ R ^ n
  • w⊙z denotes the Hadamard product (Hadamard product, also called entry-wise product)

Layer learning using a binary linear activation layer CNN

Model building set and issues

Consider the following model:

ICLR 2019 paper read: quantify neural network

 

Wherein Z ∈ R ^ (mxn) is input, w ∈ R ^ n and v ∈ R ^ n are the first and second floor of the right weight linear layer. (Z_i) ^ T Z represents the i-th row, σ (⋅) is activated by a function of operating on the vector component Zw. The first layer serves as a convolution layer, the second layer serves as a linear classifier. Tag = (v *) ^ T σ (Zw *) generated from the y * (Z), where v * and w * is the optimal number of parameters. Formula (1) describes the loss function, which is a simple square loss:

ICLR 2019 paper read: quantify neural network

 

σ (⋅) is taken to be a binary function, i.e., σ (x) = 1_ {x> 0}. Z ∈ R ^ (mxn) entries are independent and identically distributed (IID) sampled from a Gaussian distribution N (0,1). Without loss of generalization, we will assume that || w || = 1 and constructed optimization problem (2) in the form:

ICLR 2019 paper read: quantify neural network

 

Backpropagation gradient descent and coarse-grained

(2) is a mathematical description of the problem, i.e., to minimize the loss of function associated with a desired Z (1) as defined in the formula. Note that, because the Z-Gaussian assumption, it is possible to get desirable. Acquired gradient information is given by:

ICLR 2019 paper read: quantify neural network

 

And wherein the desired expression (4) described by formula (3).

ICLR 2019 paper read: quantify neural network

 

Note (4) in the formula σ 'is zero, will not cause the back-propagation procedure the dissemination of information. That is, if the standard gradient descent update rule, the network will not learn anything. STE used is simple, is a non-trivial function associated with μ 'zero alternative component (4) in the formula σ', where μ 'is a time (differentiable) function [mu] derivative. That is, using STE μ 'will provide backpropagation (∂l / ∂w) (v, w; Z) expression of a non-trivial. This is what is called coarse OF gradient (coarse gradient), such as (5) shown in the formula.

ICLR 2019 paper read: quantify neural network

 

Then, this coarse gradient into a standard gradient descent update rule, to obtain a gradient descent algorithm shown in Algorithm 1.

ICLR 2019 paper read: quantify neural network

 

Note that this is a g_μ (v ^ t, w ^ t; Z) replaces the real gradient time t (∂l / ∂w) (v, w; Z), where t is the time step (or iteration).

Analysis - calculating a gradient

Let us further in-depth group loss of function f (v, w) and its gradient ∇ f (v, w). First, the angle between the two vectors w and w * is defined as: for any w ≠ 0_n, there

ICLR 2019 paper read: quantify neural network

 

This will be used later, as it is used to describe two vectors with a desired product of a Gaussian entries. Parameter (⋅) of arccos is w and dividing the inner product w * || w || || || w *, which is the cosine of the angle between w and w *. The closer these two vectors, the smaller the angle.

Referring now to the formula (1) and f (v, w) (2) described, we can take the formula (1) is transposed, as a scalar or as transposition, the resulting expression into ( 2), and then extended to give (incorrect) expression is as follows (the next section will explain this error):

ICLR 2019 paper read: quantify neural network

 

The goal now is to replace the expression analysis using the expression E - z [σ (Zw) σ (Zw) ^ T], E_Z [σ (Zw) σ (Zw *) ^ T] and E_Z [σ (Zw *) σ (Zw *) ^ T]. Readers should put this in mind, the next section will be very difficult otherwise.

Thus, (v *) ^ TZw * is equal to y * (Z), is the label. If we look at this (mxm) matrix E_Z [σ (Zw) σ (Zw) ^ T]. When i ≠ j, the element EZ [σ (Zw) σ (Zw) ^ T] to E [σ (** Zi ^ Tw) σ (Zj ^ Tw)], and can be written as E [σ (Zi ^ Tw )] E [σ (Zj ^ Tw)]. When i = j, the elements E [σ (Zi ^ Tw)] E [σ (Zi ^ Tw)] = (E [σ (Zi ^ Tw)]) ^ 2. Wherein Z_i ** ^ T refers to the row i Z.

Now we can be obtained as follows diagonal elements:

ICLR 2019 paper read: quantify neural network

 

为什么会得到第二个等式?我会尝试给出一些见解。首先,注意 σ(Z_i^Tw) 就是 1_{Z_i^Tw},这是一个指示函数。有一个参数 x 的指示函数 1_{x} 在与自身相乘时会保持不变,因此会得到第二个等式。

最后一个等式源自一个

高斯分布

的统计情况。将 w 固定为 R^n 中的任意向量,则其元素是分布为 N(0,1) 的高斯随机变量的向量 Z_i 将与 w 形成一个锐角的概率是 0.5。

因此,每个元素都有 0.5 的概率为 1,得到总的期望为 (0.5)x1 + (0.5)x0 = 1/2。我们可以考虑这个例子的极限情况,即仅有 1 个维度的情况。令 w 为任意正数,z 为一个高斯随机变量 ~N(0,1),则 P [ 1_{w x z > 0} ] = P[ 1_{w x z < 0} ] = 0.5。

对于 i≠j 的情况,E[ σ(Z_i^Tw) σ(Z_j^Tw) ] = E[ σ(Z_i^Tw) ] E[ σ(Z_j^Tw) ],而且因为 Z_i 和 Z_j 是

独立同分布

,所以这两个期望是独立的且每一个都估计为 1/2。使用这一观察,我们可得以下结果:

ICLR 2019 paper read: quantify neural network

 

因此,我们可以综合以上结果得到表达式:

ICLR 2019 paper read: quantify neural network

 

也就是说,E_Z[ σ(Zw) σ(Zw)^T ] 沿对角的元素等于 1/2,其它地方为 1/4。E_Z[ σ(Zw*) σ(Zw*)^T ] 也有一样的参数。

最后,对于元素为 E_Z[ σ(Zw) σ(Zw*)^T ]_{i, j} 的矩阵,如果 i≠j,则由于独立同分布的假设,该期望可以被分解和独立地评估。这会得到 E_Z[ σ(Zw) σ(Zw*)^T ]_{i, j} = E[ σ(Z_i^Tw) ] E[ σ(Z_j^Tw*) ] = 1/4.

对于 i=j 的情况,我们有如下结果:

ICLR 2019 paper read: quantify neural network

 

其中 θ(w, w*) 是 w 和 w* 之间的夹角。

主要结果与分析

这篇论文主要关注的是算法 1 中总结的粗粒梯度下降的行为。其研究了 STE 被设置为基本 ReLU、截断式 ReLU(clipped ReLU)和恒等函数的导数的情况。这篇论文证明通过使用普通或截断式 ReLU 的导数,算法 1 会收敛到一个临界点;而使用恒等函数则不会。

作者在论文中给出一个说明,其表示粗粒梯度下降的收敛保证基于训练样本无限的假设。在仅有少量数据时,在粗粒尺度上,实验损失大致会沿负粗粒梯度方向下降。随着样本规模增大,实验损失会变得单调和平滑。图 1 给出这一思路的图示。

ICLR 2019 paper read: quantify neural network

 

注意随着样本规模的增大,单个步骤的损失是如何获得变得单调和越来越平滑的。这能解释为什么(合适的)STE 在具有大量数据时(就像深度学习一样)的表现会那么好。

将普通 ReLU 的导数视为 STE

(5) 中使用了 ReLU 函数 µ(x) = max(x, 0) 的导数作为 STE。不难看出 µ'(x) = σ(x),全梯度 ∇ f(v, w) 的表达式如下所示。

ICLR 2019 paper read: quantify neural network

 

与 w 相关的粗粒梯度遵循下式:

ICLR 2019 paper read: quantify neural network

 

要让粗粒梯度成为真实梯度的一个可接受的估计量,我们需要两者之间的内积为非负。这也可被解释为两个梯度之间的非负相关性。

相关性、内积、夹角

我想稍微扩展,介绍一下夹角、内积和相关性之间的关系,因为这些术语在论文中出现的次数很多。相关性和内积之间的联系可通过以下示例理解。

首先有一个带有实值随机变量的向量空间。设 X 和 Y 为随机变量,它们可能相互独立,也可能不独立。X 和 Y 之间的协方差可这样计算:Cov(X,Y) = E[ (X- µ_X) (Y-µ_Y)],其中 u_X 和 µ_Y 分别为 X 和 Y 的均值。因为这个协方差是双线性的,所以我们可以在随机变量的向量空间上定义内积,使其成为一个内积空间。为了完整说明,下面给出了协方差的公式。

ICLR 2019 paper read: quantify neural network

 

有了内积之后,我们可以定义向量的范数,即 || X || = √X⋅X,这等于 Cov(X,X) 的平方根、E[ (X-mX)(X-µX) ] 的平方根、Var(X) 的平方根以及最后的 X 的标准导数,即 _X。更进一步,两个随机变量的相关性定义为:

ICLR 2019 paper read: quantify neural network

 

这本质上就是在处理点积(内积)时,两个向量之间的夹角的余弦的定义,即:

ICLR 2019 paper read: quantify neural network

 

总结来说,协方差是内积,标准差是范数,相关性是夹角的余弦。了解了这一点,我们再回到论文。

内积可以用一种闭式(closed form)表示:

ICLR 2019 paper read: quantify neural network

 

不难看出这个内积是非负的,因为 θ(w, w*) 的范围是 [0, π],所以 sin( θ(w, w*) ) 总是非负的。范数 || w || 也是非负的,(v^Tv*)^2 也是。前面提到,非负内积能保证粗粒梯度大致与真实梯度在同一方向上。因此,ReLU 函数的导数可以用作 STE,以及 f(v, w) 的梯度下降方向。

要让该算法收敛,EZ[(∂l / ∂w)(v, w; Z) ] 和 EZ[ g_{relu}(v, w; Z) ](粗粒梯度)必须同时消失。这只会发生在 (2) 式(即构建的问题)的鞍点和最小量处。(2) 式的最小量应该有 v = v* 且 θ(w, w*)=0。

将截断式 ReLU 的导数视为 STE

现在我们将截断式 ReLU 看作潜在的 STE,即 µ(x) = min(max(x, 0), 1)。图 2 展示了截断式 ReLU 的一个四级量化的版本。

ICLR 2019 paper read: quantify neural network

 

图 2:一个四级(2 位)量化的截断式 ReLU σ_α(x) 和对应的非量化版本。α 是量化级别。

实验和讨论

表现

这篇论文的作者提供了对 STE 的详尽分析,并且表明普通和截断式 ReLU 都能学习两层的线性 CNN。他们继续将这些 STE 用于更深度的网络。注意它们在这些更深度网络上的实验表现不同于在两层网络上的表现。他们在 MNIST(LeCun et al., 1998)和 CIFAR-10(Krizhevsky, 2009)基准上,针对 2 位和 4 位量化激活,执行了利用恒等函数、ReLU 和截断式 ReLU 作为 STE 的实验。

在使用量化模型进行操作时,研究者们已经提出了很多用于获取优良性能的策略。之前的一篇解读给出了近期 SYSML 2019 会议上的一些研究成果:《SysML 2019 论文解读:推理优化》。

表 1 总结了实验结果。表 1 记录了这三种 STE 在不同实验和网络上的训练损失和验证准确度。

ICLR 2019 paper read: quantify neural network

 

表 1:使用量化激活和浮点权重,三种不同的 STE 在 MNIST 和 CIFAR-10 数据集上的训练损失/验证准确度(%)。测试了 2 和 4 位的位宽。

可以看到截断式 ReLU 的整体表现最佳,尤其是在 CIFAR-10 数据集上。

有人会认为,直观上讲,也许量化的普通 ReLU 应该会有最佳的表现,因为其最接近非量化的版本。但是,表 1 中的实验数据表明截断式版本的 ReLU 的表现最佳。我并不能真正证明为何为这样,但也许可以提供一个直观思路。

总的来说,需要挑选量化 ReLU 的参数 α 以维持全精度水平的准确度,即最高层面需要考虑(截断式)ReLU 的最大值。但是,这可能并不总是最优设置。考虑一个 95% 的激活都落在 [0, 10] 区间的案例,并假设剩余的可能值都固定在 100。「牺牲」这些固定在 100 的激活并在 [0,10] 区间内取 4 级可能是合理的。这能让 95% 的激活都有更好的表征准确度,仅损失激活 5% 的准确度。

话虽如此,当在相对浅的 LeNet-5 网络上时,普通 ReLU 的表现与截断式 ReLU 相当,这在一定程度上与这一理论发现一致,即:ReLU 是一种很好的用于学习二层线性层(浅)CNN 的 STE。

如果使用恒等函数作为 STE 的不稳定性

作者在论文前几节表明恒等 STE 并不能保证收敛。此外,他们还确实观察到了一个现象,即当在有 4 位激活的 ResNet-20 上使用恒等 STE 时,会被推离优良的极小值。

作者执行了以下实验并得出结论:恒等 STE 可能远离一个「优良」极小值。作者使用相对好的 v 和 w 对训练进行了初始化,并在后续 epoch 中使用了恒等 STE 继续训练。他们观察了随 epoch 增多而变化的训练损失和验证误差。

在 2 位激活的 ResNet-20 上使用 ReLU STE 时也观察到了类似的现象。图 3 展示了一个案例:当使用粗粒梯度执行梯度下降时,带有 2 位激活的截断式 ReLU 实际上让算法的结果更差了。

ICLR 2019 paper read: quantify neural network

 

图 3:在带有 2 位激活的 ResNet-20 上,截断式 ReLU STE 所得到的验证准确度和训练损失。激活准确度和训练损失在粗粒梯度方向上都随 epoch 数量而增长。

因此,尽管之前的分析表明使用截断式 ReLU 作为 STE 应该对浅度网络能收敛,但在网络变深时却并不总是有效。读者应当记住这一点。

总结

再次说明,作者试图在这篇论文中回答以下问题。为什么在 STE 的负方向执行搜索有助于最小化训练损失,以及怎样才算是一个「好」STE?

在我们回答这个问题之前,STE 值得尝试的原因是机器学习中的梯度消失问题。当梯度为 0 时,网络就会在反向传播过程中「学习」不到任何东西,因为所有的权重都会保持一样。

因此,作者讨论了使用二元激活学习二层线性 CNN 的三种不同 STE,即 ReLU 函数、截断式 ReLU 函数和恒等函数的导数。作者推导了这些 STE 对应的粗粒梯度,并表明基于普通和截断式 ReLU 的负期望的粗粒梯度是最小化群损失的下降方向,这是因为粗粒梯度和真实梯度之间的内积总是非负的,即它们在同一方向。另一方面,恒等 STE 却并非如此,因为其得到的粗粒梯度并不能保证非负内积的条件。

但是,尽管这些 STE 表明了普通和截断式

ReLU

的收敛性保证,它们在训练更深更大的神经网络时仍可能遭遇稳定性问题。因此,未来的一个研究方向是进一步理解用于梯度难解的大规模优化问题的粗粒梯度下降。

量化模型分析(ANALYSIS OF QUANTIZED MODELS)

引言

近年来,为了加快推理速度、降低内存成本或降低功耗,研究者们已经提出了很多量化模型。这在便携式或手持式设备方面尤显重要。但是,这些模型的训练仍然而且往往是基于浮点精度完成的。因此,训练过程仍然非常耗时。

人们已经提出许多不同的用于加速训练的方法,比如用于在训练过程中近似全精度权重的权重量化(Courbariaux et al., 2015, Lin et al., 2016)。此外,为了在近似/量化权重时取得更好的表现,人们也对量化的方法进行过研究。

近期另一个引人关注的方法是利用分布式训练加速量化网络(Dean et al., 2012)。分布式学习面临的一些关键难题是梯度和模型参数同步过程具有高昂的通信成本(Li et al., 2014)。此外,(Ferdinand et al., 2019)已经从编码理论角度研究了同步丢失梯度和模型参数的问题。我认为在将纠错(error correction)用于机器学习的分布式计算方面,这是一种非常有趣的方法。

在这篇论文中,作者考量了分布式设置中权重和梯度都量化的情况。之前的 DoReFa-Net(Zhou et al., 2016))和 QNN(Hubara et al., 2017)等研究已经探索过权重和梯度的量化。但是,它们都不是在分布式设置中完成的。

之前的工作

之前在量化神经网络方面的研究包括:使用全精度梯度和通过随机权重量化的量化权重的模型(Li et al., 2017; De Sa et al., 2018),仅使用权重的符号的 1 位权重量化(Li et al., 2017)。

此外,也有人研究了带有全精度权重和量化梯度的模型(Alistarh et al., 2017; Wen et al., 2017; Bernstein et al., 2018)。最后,也有研究者研究过权重和梯度都量化的模型(Zhang et al., 2017),但仅限于在线性模型上的随机权重量化和平方损失。

前提概念

在线学习(online learning)

在线学习是指使用一组观察序列作为输入时模型持续适应和学习自己的参数。这些输入在到达时即被处理,而不会划分批次。因此,在线学习是统计学习的一种自然延展,只是在这种序列性方面不同。

该算法有一个损失 f_t(w_t),在每次迭代,经过 T 轮后,通过一个后悔函数(regret function)R(T) = Σ_{t=1 to T} ft(**wt) - f_t(w*),其中 w*** = argminw Σ{t=1 to T} f_t(w) 评估其表现,即评估之后得到的模型参数的最佳集合。

「后悔(regret)」这一术语在在线机器学习中很常用。直观上讲,最小化(或者说优化)「后悔值」就是降低所采用的动作的数量,事后来看,很显然总是存在一个更好的选择。通过最小化后悔值,我们就是要最小化算法的次优动作。

权重量化(weight quantization)

这篇论文重点关注的是所谓的损失感知型权重量化(loss-aware weight quantization)。不同于现有的用每层、输出或激活(全精度模型)的直接近似来量化权重的方法,损失感知型权重量化会利用来自损失扰动(loss perturbation)、权重量化的信息,并会构建一个渐进的量化策略来执行量化。

通过以一种渐进的方式来显式地规范化损失扰动和权重近似误差,损失感知型量化方法在理论上是合理的,并且在实践中也有效(Hou et al., 2017)。

这篇论文有以下设置。将网络的所有 L 层的权重设为 w。对应的量化权重表示为 Qw(w) = ^w,其中 Qw() 是权重量化函数。这种损失感知型策略涉及到在每个时间实例的优化问题。在 t+1 个迭代时,问题是如何优化一个二次规划(quadratic program):

ICLR 2019 paper read: quantify neural network

 

其中优化是针对 ^w 而言,Ht 是指在 ^w 的 Hessian。某些读者可能了解这个,而且知道这是 ft(^w) 的二阶泰勒展开。在实践中,Hessian 往往具有高昂的计算成本,所以往往使用近似的 Hessian。这里也是如此,这里的 Hessian 近似为了 Diag( √^v_t),其中 ^v_t 是移动平均线(moving average)。

ICLR 2019 paper read: quantify neural network

 

其中 g_t 是随机梯度,β 是 Adam 等深度网络优化器中可直接使用的一个超参数。移动平均线是通过之前在 t-1 的移动平均线、在时间 t 的当前梯度的平方与决定每个分量所受重视程度的参数 β 的凸组合(convex combination)而计算得到的。

最后,在每次迭代根据以下规则更新权重:

ICLR 2019 paper read: quantify neural network

 

梯度量化(gradient quantization)

在分布式设置下,主要的瓶颈在于由于梯度同步所造成的通信成本。我们可以通过一个简单的例子来理解。假设有 N 个要执行 SGD 的并行处理节点,该过程的伪代码会是这样:

并行处理每一批数据:

  1. 读取当前参数,即权重、激活等等
  2. 根据这批数据计算梯度
  3. 更新梯度

现在假设处理器 1 在剩余的 N-1 个处理器之前率先结束,它已经更新了权重并希望继续处理下一批数据。但是,当处理器 1 读取「当前」参数时,这些参数还没有整合来自另外 N-1 个处理器的更新。

这可能是由于剩余的处理器还没有结束它们的计算,或者它们仍在将它们的更新传输到存储梯度信息的中心位置。一般来说,后者是导致瓶颈的原因。这就是所谓的同步问题,也是提出量化梯度以降低节点之间的通信时间的原因。

量化模型的性质

作者考量了分布式设置下权重和激活两者的量化。我们用 N 表示并行处理数据的工作器(worker)的数量。图 1 简单展示了分布式设置的大致情况。

ICLR 2019 paper read: quantify neural network

 

图 1:使用数据并行化的分布式权重和梯度量化

这种分布式设置的工作方式如前一节所描述的伪代码一样。在迭代 t,n ∈ {1, ..., N} 中每一个工作器都执行以下任务:

  1. 根据量化的权重计算全精度梯度 (^g_t)^(n),即第 n 个工作器在迭代 t 的 ^g
  2. 将 (^gt)^(n) 量化为 (~gt)^(n) = Qg( (^gt)^(n))
  3. 将这些信息发送到参数服务器

一旦参数服务器收到来自这些工作器的 n 个结果,就继续:

  1. 计算量化梯度的平均 (~g_t) = (1/N) ∑_(n=1 to N) (~g_t)^(n)
  2. 基于 (~g_t) 更新二阶矩 ~v_t
  3. 使用全精度计算更新权重,根据 w_(t+1) = w_t − η_t Diag( √(~v_t))^(−1) (~g_t)

然后使用损失感知型权重量化计算量化的权重,得到 (^w_(t+1)) = Q_w(w_(t+1)),然后在下一轮迭代将其发送回工作器。

之前在量化网络方面的研究都重在用线性模型分析平方损失。这篇论文没有将成本函数局限于线性模型,但做出了以下假设:

  1. 成本函数 f_t 是凸的;
  2. f_t 可用 Lipschitz 连续梯度二次可微分
  3. f_t 的梯度有界

很显然,对神经网络而言,凸假设 1 基本上都不成立。但是,这能促进对深度学习模型的分析。假设 2 在凸假设中很常用。二次可微性是为了确保存在与 Hessian 相关的信息,而假设 2 的「Lipschitz 连续梯度」部分通常是由于强凸性与 Lipschitz 连续梯度之间存在对偶关系。一旦我们很好地理解了其中一个,我们就能轻松理解另一个。

使用全精度梯度的权重量化

当仅对权重进行量化时,损失感知型权重量化的更新为

ICLR 2019 paper read: quantify neural network

 

其中 (^v)_t 是之前定义的(平方的)梯度 (^g_t)^2 的移动平均线。论文表明,对于用全精度梯度和 η_t = η/√ t 的损失感知型权重量化,R(T)/T 的边界这样给定:

ICLR 2019 paper read: quantify neural network

 

其中 R(T) 是后悔值。这里,平均后悔值的收敛速度为 d/√(T),其中 d 是维度。还有一个与权重量化分辨率 ∆_w(量化层级之间的步长)和维度相关的非零项。L 是 ft 的梯度的 Lipschitz 常数,D 也是一个常数,其为所有 wm, wn ∈ S(S 是量化权重值的集合)限定了 || w*m - w_n* || 的边界。

第二项很直观,维度和分辨率 ∆_w 越高,平均后悔值的边界就宽松。此外,常数 L 和 D 直观地描述了 ∇f_t 和 w 的最糟情况的「拉伸/变化」行为,它们也能宽松化平均后悔值的边界。

使用全精度梯度的权重和梯度量化

现在我们看看权重和梯度都量化的情况。损失感知型权重量化的更新为:

ICLR 2019 paper read: quantify neural network

 

其中 (~g_t) 是随机量化的梯度 Q_g(∇f_t(Q_w(w_t)))。(~v_t) 是平方的量化梯度的移动平均线。在这种设置下,期望的平均后悔值的边界为:

ICLR 2019 paper read: quantify neural network

 

我们可以总结出这一点:在权重之外,量化梯度能将收敛速度降低这样的倍数:

ICLR 2019 paper read: quantify neural network

 

这总是 >1。这会带来问题,因为深度网络的维度 d 通常很大,而分布式学习更倾向于为梯度使用少量比特数,这会导致 ∆_g 很大。

实验

维度的影响

作者研究了维度 d 对收敛速度的影响,还研究了一些常见模型的最终误差,比如使用平方损失的简单线性模型、多层感知器模型和 CifarNet。图 2 展示了结果:

ICLR 2019 paper read: quantify neural network

 

图 2:不同 d 的权重量化模型的收敛

首先我们看看图 2(a),这代表使用平方损失的合成式简单线性模型。可以看到,随着维度增大,其训练损失随迭代的收敛速度就越慢。在 d 更大时,全精度和量化梯度都会导致收敛上的损失更大。前一节的分析也能推知这样的结果。

下一个模型是带有一个包含 d 个隐藏单元的层的多层感知器(Reddi et al., 2016)。其权重使用 LAQ3 被量化成了 3 位。其梯度要么是全精度的(表示为 FP),要么就随机量化为了 3 位(表示为 SQ3)。选择的优化器是 RMSProp,学习率设置为 η_t = η /√ t,其中 η = 0.1。

最后,另一个被测网络是 Cifarnet(Wen et al., 2017)。维度 d 为每个卷积层中过滤器的数量。其梯度要么是全精度的,要么就随机量化为了 2 位(表示为 SQ2)。使用的超参数优化器为 Adam。学习率如(Wen et al., 2017)中一样,从 0.0002 开始衰减,每 200 epoch 以 0.1 的因子衰减。

图 2 的 (b) 和 (c) 分别给出了多层感知器和 Cifarnet 的结果。类似于简单线性模型,参数 d 越大,与使用全精度梯度相比,量化梯度的收敛劣化就越严重。

权重量化分辨率 ∆_w

为了研究不同 ∆_w(量化权重的步长)的效果,论文中使用了(Wen et al., 2017)中一样的 d=64 的 Cifarnet 模型。权重被量化为 1 位(LAB)、2 位(LAQ2)或 m 位(LAQm)。

梯度是全精度的(FP)或随机量化到 m = {2, 3, 4} 位(SQm)。使用的优化器为 Adam。学习率从 0.0002 开始衰减,每 200 epoch 以 0.1 的因子衰减。这个实验使用了两个工作器。结果如图 3 所示。

ICLR 2019 paper read: quantify neural network

 

图 3:在 CIFAR-10 上不同位数的权重的收敛情况

图 3 展示了不同位数的量化权重下平均训练损失的收敛情况。结果表明,使用全精度或量化的梯度时,权重量化网络在收敛后的训练损失比全精度网络更高。使用的位数越多,最终损失就越小。这确认了分析部分的结果,也是我们直观上能预期的结果。

梯度量化分辨率∆_g

这里使用了同样的 Cifarnet 模型设置,优化器也是 Adam,研究了 ∆_g(量化梯度的步长)的影响。图 4 给出了不同数量的量化梯度位数下平均训练损失的收敛。同样,结果和预期一样。位数更少时,最终误差就更大,而且使用 2 或 3 位梯度比使用全精度梯度的训练损失更大、准确度更低。

ICLR 2019 paper read: quantify neural network

 

图 4:在 CIFAR-10 上不同位数的梯度下的收敛情况。其权重是二值化的(记为 W(LAB))或 m 位量化的(W(LAQm))

不同的工作器数量

最后,作者调查了不同工作器数量 N 的影响。他们的目标是调查当使用不同数量的工作器时准确度是否会有损失。他们使用了 Cifarnet(Wen et al., 2017)在分布式学习设置中测试不同数量的工作器。

每个工作器的 mini-batch 大小设置为 64。其中测试和比较了 3 位量化的权重(LAQ3),全精度或随机量化到 m = {2, 3, 4} 位(SQm)的梯度。表 1 展示了不同工作器数量下的测试准确度。

ICLR 2019 paper read: quantify neural network

 

表 1:使用不同数量(N)的工作器时,在 CIFAR-10 上的测试准确度(%)

表 1 还包含了使用梯度裁剪(gradient clipping)的结果。梯度裁剪是一种防止非常深度的网络中梯度爆炸问题的技术。梯度爆炸是指梯度变得过大且错误梯度累积的情况,这会导致网络不稳定。尽管如此,我相信从表 1 可以看到量化模型能够实现与全精度模型相媲美的表现。

总结

This paper examines the right weight loss-aware network have to quantify gradients. There are two purposes of quantized gradient. First, it can be calculated to reduce the amount of back-propagation phase. Second, it can reduce the cost of communication between the communication unit in a distributed setting. Paper provides the right weight convergence analysis model with full precision, and quantization of the quantized gradient cropped. In addition, the authors also confirmed the theoretical results through empirical experiments show that quantify network can accelerate the training speed and accuracy can be achieved with the full performance of comparable models.

Guess you like

Origin blog.csdn.net/weixin_42137700/article/details/91945269