论文笔记 Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference

这篇论文是发表在CVPR2018的《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》,作者是google brain做Mobilenet的Hartwig Adam和Dmitry Kalenichenko,第一作者是Benoit Jacob。

这篇文章提出了一套量化的流程,让前向预测的时候都是整数运算。同时设计了一套训练流程,能够保持较高的量化网络精度。

方法

量化前向预测

  • 量化策略:非对称量化
    • $r=S(q-Z)$
    • r是real q是quantized
    • Z是零点,代表quantized的空间上对应r为0的数值。
      • 因为有zero-padding
  • 矩阵乘法
    • r3=r1r2 分别有不同的S和Z
    • $S_3(q_3^{i,k}-Z_3)=\sum_{j}S_1(q_1^{i,j}-Z_1)S_2(q_2^{j,k}-Z_2)$
    • $q_3^{i,k}=Z_3+M\sum_{j}(q_1^{i,j}-Z_1)(q_2^{j,k}-Z_2)$
      • M是scale factor $M:=S_1 S_2/S_3$
        • 实际运算使用一个定点数乘和一个移位 $M=2^{-n}M_0$
        • $M_0\in[0.5,1)$是int16或者int32的
        • 有一定的损失,但利用定点数乘法把误差降到最低
    • $q_3^{i,k}=Z_3+M(NZ_1 Z_2-Z_1 a_2^k -Z_2 a_1^i +\sum_j q_1^{i,j} q_2^{j,k})$
      • 其中$a_1:=\sum_{j}q_2^{j,k}$ 整个矩阵运算里面是提前算好了O(N^2)
      • 整个计算量在q1q2 O(N^3)
  • 实现
    • 中间临时数值用int32
    • q1q2
      • int32+=uint8*uint8
    • bias
      • $S_{bias}=S_1 S_2, Z_{bias}=0 $
    • 算完之后cast到uint8
      • 使quantization倾向于使用uint8全部的表示区间

量化训练算法

  • 使用量化算法的原因
    • 1.原来算法weights的channel-level large differences>100x,导致range较小的那些channel有很大的量化误差
    • 2.weights的outlier
  • simulate quantization effects in the forward pass of training
    • weight and biases stored in FP32
    • $q_{sim}(r;a,b,n)=round(\frac{clamp(r;a,b)-a}{s(a,b,n)})s(a,b,n)+a$
    • n是量化的位点数目2^8,$s(a,b,n)=\frac{b-a}{n-1}$
    • biases are not quantized because they are represented as 32-bit integers
  • a,b的确定
    • weight: a:=min(w) b:=max(w)
    • activation: via EMA(exponential moving average)
      • disable activation quantization at start of training to get stable state
    • nudge a/b to make sure 0.0 is representable
  • batchnorm的处理
    • inference: fold to weight of conv $w_{fold}:=\frac{\gamma w}{EMA(\sigma_B)}$
    • training: simulate the folding
      • 计算图上计算两遍Conv,第一遍浮点把$\sigma_B$和$\mu_B$算出来
      • 第二遍把folded weights算出来然后quantize之后conv

实验

  • ImageNet ResNet,掉2%
  • ReLU6>ReLU
  • weights are more sensitive to reduced bit depth than activations.
  • it’s better to keep weight and activation bit depths the same.

总结

这篇文章系统性的提出了整个网络非对称量化的方法,非常具有实践意义。在计算图上进行分析修改的方法值得借鉴。分析掉点的原因:channel-wise quantization。数值误差:M的tail和cast到uint8; bias的量化损失。

论文笔记 《Binary Neural Networks: A Survey》

这篇论文是发表在期刊Pattern Recognition的论文《Binary Neural Networks: A Survey》,作者来自于北航,一座Haotong Qin,通讯Xianglong Liu,也是IR-Net的作者。

文章对2020年及以前二值神经网络进行了总结,把二值化的方法分为:直接量化、优化方法量化(包括最小化量化误差、升级网络的loss function、减少STE梯度的误差)

论文

简单的二值网络

  • 用固定的量化函数直接量化weight和activation。
  • 使用STE来finetune
  • BinaryConnect 2016
  • BNN (Binarized Neural Networks)

最小化量化误差

  • $J(b,\alpha)=|x-\alpha b|^2$
  • $arg\min_{\alpha b}J$
  • Binary Weight Netowrks
  • XNOR-Net
  • DoReFa-Net
  • ABC-Net
  • LQ-Nets

升级网络的Loss function

  • 联合优化binarization和task-specific objective
  • 问题
    • “degeneration”, “saturation”and “gradient mismatch”
  • Distilled BNN
  • Distillation and Quantization
  • BNN-DL
  • CI-BCNN
  • INQ(Incremental Network Quantization)

减少STE梯度的误差

  • 解决sign和STE的梯度不匹配问题
  • Bi-Real net
  • BNN+
  • IR-Net

其他应用

  • BNN的鲁棒性比全精度要好
    • 变化输入对BNN影响不大
  • BNN有利于解释神经网络
    • 重要性排序
    • 改变01对结果影响大的

训练技巧

  • 网络结构的变换
    • 重新放置Pooling
    • Conv前面加入BN层
    • 连接全精度网络和binary网络
    • 增加channels
  • 网络hyper-parameters
    • Adam
    • momentum of BN
  • 梯度估计

总结

看完对这个领域终于有个蓝图的认知了,虽然分类的理由不够充分,还有一些模糊不好分类的工作。想了有一些可以做的点。

论文笔记 《Quantization Networks》

这篇论文是发表在CVPR2019的论文《Quantization Networks》,作者来自达摩院,第一作者是Jiwei Yang(中科大,田新梅学生),mentor 华先胜(IEEE Fellow 达摩院城市大脑人工智能负责人)。

这篇论文提出了一种新的可微分的方法实现网络权重和激活值的量化,取得了不错的效果。量化函数被建模成多个Sigmoid函数的线性组合,整个网络可以直接通过反向传播被端到端训练。

方法

量化函数的重新formulation

  • $y=\sum_{i=1}^n s_i \mathcal{A}(\beta x-b_i)-o$
    • $\beta$和$b_i$决定了每个量化位点的位置
      • $b_i$是第i个量化区间的开始点
    • $\mathcal{A}$是unit step function单位越界函数,>0为1,<0为0
    • $s_i$决定每个量化位点的间隔
      • 如{-4,-2,-1,0,1,2,4}
    • $o$是全局偏移量,是$1/2 \sum_{i=1}^n s_i$

使用Sigmoid函数来近似单位跃阶函数

  • $\sigma(Tx)=\frac{1}{1+exp(-Tx)}$
    • 当T越大的时候,和单位跃阶函数相近
    • 当T=0的时候,等价于线性函数
  • $y=\alpha (\sum_{i=1}^n s_i \sigma(T(\beta x - b_i))-o)$
    • 训练的时候不断增加T
    • $x, \alpha, \beta, b_i $的梯度都能求出
  • 训练的时候使用近似函数,前向预测的时候使用量化函数

实验

  • ImageNet ResNet-18(raw 70 top1 )
    • W/A 1/32 66.5
    • 3/32 70.4
    • 1/1 53.6
    • 1/2 63.4
  • SSD pascal VOC (raw 77.8 mAP)
    • 2/32 76.3
  • 影响因素
    • 非均匀量化,bias做成K-means,性能高一点点
    • pretrained model 效果好很多
    • T的收敛速度,需要在{5,10,20,40}里面选择调参

总结

通过重新formulate量化函数,可以比较好的找到一种可微分的近似方法,思路很清晰。这个方法没有名字,要是有个名字就好了。

论文笔记 《ReActNet: Towards precise binary neural network with generalized activation functions》

这篇文章是发表在arxiv2020的《ReActNet: Towards precise binary neural network with generalized activation functions》,作者CMU的Zechun Liu(香港科技大学)和Zhiqiang Shen,CMU的导师是Marios Savvides。

文章通过三种方法提升了二值化神经网络的精度。1.设计了一个类MobileNetV1的网络。2.显式地通过RSign和RPReLU学习Activation的distribution。3.通过类似于知识蒸馏的方法,学习原网络的output。

方法

设计了一个类MobileNetV1的网络

  • 取消了depth-wise的操作,全部都是正常卷积
  • 将降采样block的设置为两个block的concat
  • 每一个conv都要Residual-connection

学习Activation的distribution

  • 因为需要在每一个block之前对activation进行二值化,网络对这里二值化的分割点比较敏感
  • 在Addition之后加ReAct-PReLU,在block的第一个conv之前加
  • 使用RReLU学习二值化分割点
  • 使用RPReLU学习0点的位置

知识蒸馏

  • 使用一个ResNet-34的输出来作为target,直接计算KL loss

实验

  • 两步训练
    • 第一步训练Binary Activation的,但是weight是float的
    • 第二步训练binary activation & binary weight
  • 结果
    • baseline 58.2%
    • distribution loss 59.6%
    • Proposed baseline + distribution loss 62.5%
    • +Prelu 65.5%
    • +Rsign 66.1%
    • +Rprelu 67.4%
    • +Rsign+Rprelu 69.4%
    • Float model 72.4%

总结

activation对信息的编码在二值化之后会显著下降,这篇paper通过对activation进行参数化,学习到最优参数以保留更多的信息。

论文笔记 《FQ-Conv: Fully Quantized Convolution for Efficient and Accurate Inference》

这篇是2019年发表在arxiv的论文《FQ-Conv: Fully Quantized Convolution for Efficient and Accurate Inference》,第一作者是比利时鲁汶的IMEC(微电子研究中心)的Bram-Ernst Verhoef、Nathan Laubeuf。

文章提出了一种针对CNN网络的低比特(2bit weight 5bit activation)量化及量化训练的方法,效果不错,并在analog的器件上测试了带噪声情况的精度。

方法

新的量化算法

  • End-to-End
    • 除了最后的AVGPooling和FC,其它层全部都量化
  • 量化的映射区间使用layer-wise的一个可学习权值表示
    • weight的区间是[-b,b]
    • activation的区间是[0,b]
  • 将BN的Weight整合到Conv,但Shift不整合,直接抛弃
    • $y=\alpha\frac{x-\mu}{\sigma}+\beta=Weight x + Shift$

新的训练算法

  • Gradually lower bitwidth
    • 一点一点把bitwidth降到w2,a5
    • 最后Fuse BN再训练
  • Distillation

实验

  • FP0->Q88->FP1(Trainer Net)->Q66->Q55->Q44->Q33->Q22
    • ResNet-20 CIFAR-10,BN全精度
      • 91.6->89.9(Q22) 91.6(Q33)
  • ->Q55->Q45->Q35->Q25
    • DarkNet-19 ImageNet
      • 72.3%->69.9%(Q25) 72.6%(Q35)
  • Fully Quantized Network
    • ResNet-32 on CIFAR-100
    • 77.9->FQ25(76.9)
  • 带模拟电路噪声训练
    • weight的噪声(memory cells)
    • input activation的噪声(DACs)
    • output MAC的噪声(ADCs)
    • 使用高斯噪声,带这个在FQ22上训练可以恢复准确率
      • $\sigma_w$ 5%, $\sigma_a=5%, \sigma_{MAC}=25%$可以恢复精度

总结

这篇文章写得不太好,但是结果很不错。训练的方法可以和很多事情结合一下用,带高斯噪声训练的方法可以继续想一想。

论文笔记 《Fully Quantized network for Object Detection》

这篇论文是发表在CVPR2019的《Fully Quantized network for Object Detection》,作者是上海科技大学的Rundong Li和商汤的闫俊杰,闫俊杰是商汤智能城市商业组的CTO,15年从中科大博士毕业、17年从清华博士后毕业。

这篇论文提出了一些物体检测模型进行了4bit量化(将检测模型的所有层全部量化)的优化算法。具体来说,通过在finetune过程中减少batch normalization的不稳定性、去掉activation的outlier、channel-wise的quantization来增加量化网络的性能。

方法

均匀量化到k比特

  • $$X^Q=Quant_k(X^R)=\Delta(X^I-z)\in \{q_0,q_1,\dots q_{2^k-1}\}$$
    • 其中$X^I=$是整数的indices,z是偏差的index
    • $\Delta=\frac{ub-lb}{2^k-1}$
    • 把$[lb, ub]$作为量化的范围
  • 计算$y=Quant_k(W)Quant_k(x)=\Delta_W\Delta_x(W^Ix^I)$
    • 忽略z
  • Weight量化
    • lb和ub都是channel-wise到W的最小和最大
    • channel-wise:直方图统计分析了channel的ub的分布
    • BN的folding
      • $W_{fold}=\frac{\alpha}{\sqrt{\sigma^2+\epsilon}}W$
      • batch norm的parameters和在训练时会变化很大,会对量化造成很大影响
      • 由于detection网络的小batch size,均值/方差变化很大,量化造成很大影响
      • 固定$\sigma, \mu$
  • Activation量化
    • 不稳定性: Activation会有一些outlier、之前方法动态统计的会变化很大
      • 使用一个子数据集统计,在$γ$和$1-γ$分位数来求ub和lb对activation进行量化
  • 反向传播使用STE

实验

  • BN不稳定 AP 0.20->0.24
  • Activation分位数 AP 0.20->0.22
  • Channel-Wise AP 0.20->0.25
  • 总体 0.20->0.29,原始0.32

总结

简单的改进也能取得很大的进步,但在Object Detection上面还是离恢复精度有一定的距离。

论文笔记: APQ:Joint Search for Network Architecture, Pruning and Quantization Policy

这篇论文是发表在CVPR2020的《APQ:Joint Search for Network Architecture, Purning and Quantization Policy》,作者为MIT的韩松组,第一作者是上海交大的AMC班的本科生Tianzhe Wang,

文章对Once-for-all的论文进行了升级,可以联合搜索神经网络的Architecture+Prune+Quantization。

方法

Quantization-Aware accuracy predictor

  • 全精度网络的acc预测器,迁移学习到量化网络的acc预测器上
    • 原因:finetune full-precision网络到quantized network的开销比较大,需要0.2 GPU hours per data point
    • 采用predictor-transfer的方法,减少训练predictor的[bits, arch, acc]样本对
    • 先训练只带Architecture Embedding (skip-Channel-kernel)的predictor网络,然后再在这个基础上finetune训练Quantize的bitwidth的predictor网络
  • 训练full predictor用了80,000个网络,加训练5000个sampled quantized network

结果

  • MobileNetV2 基础上进行搜索
  • 74.1 acc的情况下13.2G ops
  • 2400+0.5N GPU hours

总结

这篇论文在Once-for-all的基础上进行修改,支持Quantization即轻松发论文,妙。

论文笔记 《Neural-Hardware Architecture Search》

这篇论文是发表杂在NeurIPS 2019的《Neural-Hardware Architecture Search》。作者为我们的老朋友MIT的Song Han(韩松)组。第一作者为Yujun Lin,本科毕业于清华。

文章探索了NN网络结构与硬件架构的联合搜索方法,使用Evolution Algorithm来搜索硬件架构(HAS),NN这边使用One-shot hyper-net的方法搜索量化网络(QNAS)。

方法

搜索空间

  • 硬件是一个systolic-array-like architecture(MPA),包括5个可调节参数
    • #rows #cols 2x4->16x64
    • input/weight/output buffer size 128B->4096B,间隔4B
  • 网络是一个ResNet blocks的结构
    • kernel size 3\5
    • channels 0.125 0.25 0.5 1 1.5
    • each layer
      • activation 4/6/8 bits
      • weights 2/4/6 bits
    • identity/ residual blocks
      • 最大16blocks

搜索方法

  • 先HAS:硬件架构搜索

    • 在几个已有网络上进行搜索,目标是减少Energy-Delay Product
    • 采用进化算法
      • 根据各个搜索维度的mean和var随机生成一些样本
      • Evaluate这些样本,排序
      • 选择top-K重新计算mean和var
  • 后QNAS:神经网络搜索采用超网络

    • 训练一个大的超网络,它的子网络集合包含所有搜索空间中的网络
      • 大网络训练时间较长,且需要特殊的技巧来优化
    • Controller sample网络后,从超网络中取对应的weight,不需要重新训练
    • 采用标准进化算法进行sample
      • 先生成一些父代神经网络
      • 根据accuracy选择top-K作为

结果

  • HAS 1.1x speedup than human
  • QNAS 1.3x speedup than HAS

总结

这篇文章把硬件设计也题上议程,先HAS再QNAS,但是没有联合搜索。

论文笔记 Comprehensive SNN Compression Using ADMM Optimization and Activity Regularization

阅读了19年挂在arxiv上的论文《Comprehensive SNN Compression Using ADMM Optimization and Activity Regularization》。这篇文章是清华李国齐组、UCSB谢源老师组、李鹏组做的。第一作者是UCSB的博士后Lei Deng。

这篇论文使用量化、剪枝和抑制Activity对SNN做压缩。量化和剪枝用的是ADMM,抑制Activity用的是加regularizaiton。直接在SNN上进行训练。

方法

剪枝

  • ADMM解带损失函数的sparse weight的问题。
  • 先进行ADMM重新训练、再进行Hard-pruning重训练
  • 训练采用STBP(AAAI 19)

量化

  • ADMM解带损失函数的对称quantization问题
  • 训练过程同剪枝

Activity Regularization

  • $\lambda R$作为正则化项,其中R是firing ratio

三种方法同时使用

  • 先ADMM剪枝的重训练
  • 再 ADMM 剪枝和量化的重训练
  • 最后 Hard-pruning-quantization 重训练

实验

  • 由于使用了STBP,在timesteps=10左右的时候效果都非常不错,CIFAR10在5层conv上能达到89%左右的top1
  • 效果好,4bit量化下基本保持精度 1bit(+1 -1) 2bit下CIFAR10掉不超过1个点
  • 提出了评价的不精确地Metric:剩余计算量$R_ops$
    • $R_ops=(1-s)b/B r/R = R_mem R_s$
    • b是bitwidth
    • s是sparsity
    • r是firing ratio
  • SNN在quantization上面,能比pruning降低更多计算量
  • 对于event-driven的N-MNIST来说,对于这些Compression更加敏感
    • 原因可能是信息分布到了各个time-step里面,由于内部稀疏的features的敏感性,时序分布的信息导致了准确率下降。(完全不懂在说什么)

评价

我想做的几个东西:activity regularization还有量化的优化,其实已经有人做好了。现在想来,这更像是工程的实现问题。至于需要研究的东西,比如event-driven的数据集为什么这么不中用、量化剪枝等方法为什么要这样融合、activity regularization如何给网络带来影响的(或者说firing ratio的影响),需要接下来的工作解释清楚。我想可以把着力点放在这些问题上面,对SNN有怀疑,那就通过科学的研究来杀死它;对SNN抱有希望,那就提出新的方法来超越原来的方法。

论文笔记: Extremely Low Bit Neural Network: Squeeze the Last Bit Out with ADMM

读了AAAI18年发表的《Extremely Low Bit Neural Network: Squeeze the Last Bit Out with ADMM》这篇论文,收获很大。这篇论文是阿里Rong Jin团队(现在是达摩院机器智能研究团队)的论文,金榕是CMU的博士,曾任密歇根州立大学终身教授,15年到阿里。第一作者是Cong Leng。

文章把神经网络的量化问题看成是一个优化问题,使用了ADMM方法把不连续的量化和连续的参数优化分开来解,避免了采用STE方法中因为前向和反向使用的weight不是不同所导致的不稳定,采用ADMM方法量化后的效果很好。

方法

N-bit的对称量化的问题formulate为:
$$\min_{W} f(W,X)\quad s.t.\quad W \in C= \{ -2^{N-1}-1,…,-1,0,1,…,2^{N-1} \} $$
在训练的时候,需要给每一层的$W_i$乘上一个scaling factor $\alpha_i$,C就变成$C=C_1\times C_2 \times … \times C_L$
定义一个指示函数$I_C(W)$,当$W \in C$等于0,否则为正无穷。问题可以转化为:
$$\min_{W} f(W)+I_C(W)$$
引入一个辅助变量 G,问题转化为:
$$\min_{W,G} f(W)+I_C(G)\quad s.t. W=G$$
这个问题就是ADMM需要的形式了,引入拉格朗日乘子$\mu \in R^d$,其增广拉格朗日方程为:
$$L_\rho (W,G,\mu)=f(W)+I_C(G)+\rho/2||W-G||^2+\mu^T(W-G)$$
对朗格朗日乘子进行变量变换$\lambda=(1/\rho)\mu$,得到
$$L_\rho (W,G,\mu)=f(W)+I_C(G)+\rho/2||W-G+\lambda||^2-\rho/2||\lambda||^2$$
就可以轮流迭代的解下面三个方程来得到量化后的权重G:
$$W^{k+1}:=\arg\min_{W}L_\rho(W,G^k,\lambda^k)$$
$$G^{k+1}:=\arg\min_G L_\rho (W^{k+1},G,\lambda^k)$$
$$\lambda^{k+1}:=\lambda^k+W^{k+1}-G^{k+1}$$

第一个问题:排除不变的变量,等价于优化:
$$\arg\min_{W} f(W)+\rho/2||W-G+\lambda||^2$$
相当于一个神经网络训练,加上一个特殊的正则化因子

第二个问题:排除不变的变量,等价于优化:
$$\arg\min_{G} I_C(G)+\rho/2||W-G+\lambda||^2$$
进一步转化为:
$$\arg\min_{G}||W+\lambda-G||^2 s.t. G\in C$$
就是一个最小化量化到$W+\lambda$的误差的问题,论文对每一层单独解,使用5次交替优化$\alpha$和$Q$

结果

  • 在resnet-50上,binary 比BWN高了5个点,到了68.7%的top1;ternary比TWN高了7个点,到了72.5%的top1
  • 在VOC2007上,Darkent+SSD ternary到了60.9,低了3个点;VGG16+SSD ternary到了76.2mAP,低了2个点
    • 1x1卷积超低bit量化对网络的性能有较大影响,如果使用8bit,darknet在ternary下降2个点

评价

这篇论文第一次把ADMM方法引入进超低bit的神经网络量化中来,取得了非常不错的效果。也第一次把object detection做了超低bit的量化,并且分析到了1x1卷积的作用,整个文章非常solid,很有实用性。但文章并没有分析为什么ADMM就能很好地用在这种非凸优化的量化任务上来;为什么STE的方法就不稳定了,如果提升稳定性的STE能比得过ADMM吗?对activation的量化也没有做,后续应该有相应的工作值得调研。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×