论文笔记: 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

  • 由于finetune full-precision网络到quantized network的开销比较大,采用predictor-transfer的方法,减少训练predictor的开销
  • 先训练只带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的量化也没有做,后续应该有相应的工作值得调研。

论文笔记: HAQ: Hardware-Aware Automated Quantization with Mixed Precision

这篇是MIT韩松组发表在CVPR2019的论文《HAQ: Hardware-Aware Automated Quantization with Mixed Precision》,第一作者是韩松组的Kuan Wang,清华毕业。

文章提出使用NAS去搜索NN网络中不同layers的最佳quantization bit-width,并且根据实际的硬件给出的表现来作为reward。

方法

算法

  • 描述成一个寻找特定constraint (Latency/Energy)下的最小accuracy degradation的网络问题
  • weight和activation使用不同的量化bit-width
    • 线性量化
    • 分布KL散度最小化求区间 $c=\arg\min_{x} D_{KL}(W_k || quantize(W_k, a_k, x))$
  • 使用RL
    • input是前一层的action+这一层的参数
    • action space使用的continuous的
    • reward只考虑accuracy下降 $\lambda \times (acc-acc_{original})$
    • 如果达不到constraint,所有层等量降低bit-width
    • DDPG优化

硬件

  • 使用了Cloud(batch-size大)和Edge的两种场景
  • 使用了两种硬件做测评原则
    • 时间维度复用硬件BISMO
    • 空间维度组合硬件BitFusion

结果分析

  • 只做了MobileNet V1和V2
    • 发现V2还比V1差
  • 根据roofline model分析
    • edge
      • depthwise的卷积是memory bound,因此分配更少的bit-width给activation
      • pointwise的卷积是computation bound,多分配
    • cloud
      • pointwise layer 更少的bitwidth

评价

CVPR2019的oral,文章算法写得非常清晰,结果也不错,韩松用NAS这一套可谓是轻车熟路。但是后面结果分析就很不清楚,edge和cloud不是很能让人信服。看完还是有很多疑问的:为什么不用classification这个很奇怪,可以把结果放出来看看;为什么不用联合reward;最后出来的cloud和edge相差有点大,让人摸不着头脑;为什么Mobilenet V1比V2好。可以从Hardware和Software联合优化的角度去看这个问题,硬件如何去设计完全可以根据算法的结果去优化,这个方面可以探讨的问题还挺多的。

论文笔记: Training and inference with integers in deep neural networks

这篇是清华施路平、李国齐组发表在2018年ICLR的论文《Training and inference with integers in deep neural networks》,引用量已有126。第一作者是博士生吴双;李国齐是清华副教授,去年一次智源会上有一面之缘,当时记得报告了SNN的训练算法;施路平是清华大学类脑计算中心主任,研究领域包括类脑计算、智能仪器,半导体非易失性存储器、光存储、集成光电子学、自旋电子学、纳米科学与技术等。

文章探讨了量化算法在神经网络训练过程中的应用问题,指出之前的量化工作的训练过程都有浮点数的存在。这篇论文提出将所有的数据和计算(包括反向传播activation和weight的gradient)都量化,从而能在不带浮点运算单元的硬件上使用。但是这样做的代价是比较大的,在ImageNet的top-5 accuracy上有4-8个点的损失。

方法

分析了神经网络训练过程需要四种数据 weights (W), activations (A), weight gradients (G) and activation errors (E),之前的工作如DoReFa-Net采用float的G来更新对float表示的weight进行更新;同时,也没有对BN层进行量化的工作。因此之前的方法不能应用到只含有整形运算的设备上做训练。

量化方法

  • Uniform均匀量化step size $\sigma(k)=2^{1-k} $
    • 其中k是bit-width
  • 对称量化
    • $Q(x,k)=Clip(\sigma(k)\cdot round[\frac{x}{\sigma(k)}],-1+\sigma(k),1-\sigma(k))$
    • 假设了x是[-1,1]
    • 负数区间的-1不用来保证对称性,所以2bit就是3个数[-1,0,1]
  • 把scale factor的乘法变成shift操作
    • $ Shift(x) = 2^{round(log_2 x)}$

BN替代方案

  • 使用单独的shift操作替代
  • 由于没有了BN,weight不合适会造成梯度消失或者梯度爆炸,初始化Weight使用$W\sim U(-L,L), L=max(\sqrt{5/n_{in}},L_{min}),L_{min}=\beta\sigma$
    • $\beta$是一个超参数,决定最大值和最小step size的距离,取了1.5
  • 计算Conv层后面的scale
    • $\alpha=max(Shift(L_{min}/L),1) $
    • 给每一个网络层提前定好
  • Activation量化的时候执行scale
    • 实际硬件中MAC后只需要截取就行了
    • 浮点的表示的话是:$Q(a/\alpha,k_{A})$

Activation Gradient量化

  • 反向传播优化中使用的是梯度方向,而不是梯度的而绝对大小。因此运行时计算最大的那个绝对数值去来决定量化区间
  • $Q(e/Shift(max(|e|)),k_E)$

Weight Gradient量化

  • 先rescale计算的gradient $g_s=g/Shift(max(|g|))$
  • 为了处理小gradient的情况,根据gradient的step size之间小数部分的大小作为概率,使用了16bit的随机数去上取整或者下取整
    • $sgn(g_s)\cdot (floor(|g_s|)+Bernoulli(|g_s|-floor(|g_s|)) )$

效果

  • W2 A8 G8 E8 bit的时候ImageNet在AlexNet达到51.6/27.8 error,分别从41.80 / 19.20降了10个点左右
  • Ablation top5
    • 28ff-BN 20.67
    • 28ff 24.14
    • 28f8 23.92
    • 288C 26.88

评价

这篇论文不愧是18年ICLR的oral,虽然读起来思路不是特别清晰,但是做的事情很漂亮。算是第一个做training的量化的尝试,还发现了Gradient的量化有一定的正则化功效。另外,可以改进的空间也是非常大,可以调研它后面的论文来跟进做研究。

论文笔记: Forward and backward information retention for accurate binary neural networks

读了在CVPR2020上发表的文章《Forward and backward information retention for accurate binary neural networks》,收获颇丰。这篇论文分析了二值化神经网络的训练过程中前向和反向过程的存在的问题,分别提出了解决方案。论文的第一作者是来自于北航的Haotong Qin,通讯作者是北航的Xianglong Liu。

首先文章启发式地分析了二值神经网络前向中存在的问题是diversity的问题,因为二值化了,不管是weight的diversity和activation的diversity都变小了很多,因为网络的能力下降;反向传播中存在的问题是gradient不准,不准的原因来自于sign函数的导函数的近似。因为不同epoch的lr大小和不同,因此需要不断变化近似导函数来提升效果。

方法

前向传播(Libra-PB)

  • weight的information最大化模型
  • 当+1的weight和-1的weight数量相等时达到最大(中位数)
  • 在quantization之前将weight做重分布,也就是减中位数除标准差
    • 除以标准差是为了让weight分布范围更大(dispersed)
  • 做完权重重分布,再量化
  • 另一个优化策略是对weight做shift,避免quantization error和 extra float-point计算
    • $ B^, s^ = argmin_{B_w, s} ||w_{std}-B_w << >> s|| $
    • $ s=round(log_2(||w_{std}||_1/n)) $

反向传播(Error Decay Estimator(EDE))

  • 手工设计一个加上epoch为参数的导函数,导函数随着epoch变化
  • Stage1,在训练初期,Identity->Clip。目的是更好的训练(理解是更像全精度,更新效果好;更能重新分布weight)
  • Stage2,在训练末期,Clip->sign。目的是让网络更适应quantization

效果:EDE能提升1.4%在CIFAR,Libra-PB能提升0.8%,一共提升2.7%。ImageNet上ResNet-18提升2%左右,到58.1%(bitwidth W/A 1/1)66.5%(bitwidth W/A 1/32);ResNet-34 62.9%(1/1) 70.4(W/A 1/32)

评价

我很喜欢这篇论文,首先是通过对二值量化的启发式分析(为什么精度会低)进行设计的思路,其次是提出的Libra-PB算法有部分理论支撑(信息论)。另外文章的算法有很大的提升空间,EDE算法是手工设计的,没有理论依据;前向的activation信息是关键的,是否可以针对activation信息做保留;信息论的分析是启发式的,方向对了但是方法不一定是最佳的,还有一个可能方法是最大化kernel之间的差异。

Your browser is out-of-date!

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

×