IncrementalNetwork 您所在的位置:网站首页 inq怎么计算 IncrementalNetwork

IncrementalNetwork

2024-03-15 13:10| 来源: 网络整理| 查看: 265

作者‖ Cocoon

编辑‖ 3D视觉开发者社区

3D开发者社区链接:https://mp.weixin.qq.com/s/GWyYcV6wVjxFnDOcU5ZMHg

概述

论文链接: https://arxiv.org/pdf/1702.03044v2.pdf

代码链接: https://github.com/Zhouaojun/IncrementalNetwork-Quantization

谷歌学术被引量: 797

该方法发表于ICLR 2017,由英特尔中国提出,目的是希望能够无损地用低位宽的权重表达神经网络,是量化领域中的经典论文之一。具体地,文章提出了一种渐进量化方式,其主要包含三个相互依赖的操作:权重划分、分组量化与重训练。即,首先通过某种分组规则将权重分为两个互不相干的组,然后对其中一组进行量化,而后将其冻结,再对另外一组以渐进迭代的方式进行重训练,目的是补偿第一组的量化损失。其中,渐进迭代的终止条件是所有的权值都被量化完毕。

下文将对权值量化的方式、渐进量化的策略以及整体的算法步骤进行介绍,并在实验部分贴出INQ相比起其他SOTA的对比效果及部分消融实验结果。

渐进量化 变长编码的权重量化(variable-length encoding scheme)

命名:

假设预训练的全精度的模型为 { W l : 1 ≤ l ≤ L } \{W_l: 1 \leq l \leq L\} {Wl​:1≤l≤L},其中 W l W_l Wl​表示第 l l l层的权重, L L L表示在模型中要学习参数的层数。为了对接下来的表达进行简化,我们只考虑对卷积层和全连接层进行量化。举个例子,就像 A l e x N e t AlexNet AlexNet、 V G G − 16 VGG-16 VGG−16、 G o o g l e N e t GoogleNet GoogleNet以及 R e s N e t s ResNets ResNets之类的网络而言,对应于其中的卷积层, W l W_l Wl​可以是4D的tensor,对应于其中的全连接层, W l W_l Wl​可以是2D的矩阵。

设低比特版本的权重为 W l ^ \hat{W_l} Wl​^​,且其中的每一个元素只能从以下的集合中选取: P l = { ± 2 n 1 , ⋯   , ± 2 n 2 , 0 } \mathbf{P}_{l}=\left\{\pm 2^{n_{1}}, \cdots, \pm 2^{n_{2}}, 0\right\} Pl​={±2n1​,⋯,±2n2​,0} 其中 n 1 n1 n1和 n 2 n2 n2是两个整数,且 n 2 ≤ n 1 n2 \leq n1 n2≤n1。

也就是说,量化后的权重数值范围由 n 2 n2 n2和 n 1 n1 n1决定,在一定范围以外的数值会被直接怼成0。

任务描述:

给定一个预训练的全精度模型,INQ的目的是在尽可能不损失精度的前提下,将该32位的浮点型权重变换到2的整数幂或0上。

此外,还希望能够探索在网络无损量化限定下能支持的最极端的小位宽是多少。

怎么做?

在INQ中,期待的位宽 b b b需要我们预先确定好,然后我们只要确定好超参 n 1 n1 n1就可以了,因为 n 2 n2 n2可以根据位宽 b b b以及超参 n 1 n1 n1推断而得。

n 1 n1 n1的计算方式为一个经验上有点复杂又实践证明有用的公式: n 1 =  floor  ( log ⁡ 2 ( 4 s / 3 ) ) n_{1}=\text { floor }\left(\log _{2}(4 s / 3)\right) n1​= floor (log2​(4s/3)) 其中, s s s的计算方式为: s = max ⁡ ( abs ⁡ ( W l ) ) s=\max \left(\operatorname{abs}\left(\mathbf{W}_{l}\right)\right) s=max(abs(Wl​)) 再其中, a b s abs abs为逐元素的操作。

当 n 1 n1 n1获得后, n 2 n2 n2可以自然而然的通过 n 2 = n 1 + 1 − 2 b − 1 2 n2 = n1+1-\frac{2^{b-1}}{2} n2=n1+1−22b−1​而得,举个例子,当 b = 3 b=3 b=3, n 1 = − 1 n1=-1 n1=−1时, n 2 = − 2 n2=-2 n2=−2。

当侯选池 P l P_l Pl​确定后,我们进一步地通过下式将 W l W_l Wl​中的每一个元素变换成低比特的量化

值: W ^ l ( i , j ) = { β sgn ⁡ ( W l ( i , j ) )  if  ( α + β ) / 2 ≤ abs ⁡ ( W l ( i , j ) ) < 3 β / 2 0  otherwise  \widehat{\mathbf{W}}_{l}(i, j)= \begin{cases}\beta \operatorname{sgn}\left(\mathbf{W}_{l}(i, j)\right) & \text { if }(\alpha+\beta) / 2 \leq \operatorname{abs}\left(\mathbf{W}_{l}(i, j)\right)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有