论文笔记 Efficient Neural Architecture Search via Parameter Sharing

这篇是发表于CVPR2019,18年2月就挂在arxiv上的论文《Efficient Neural Architecture Search via Parameter Sharing》,作者是Quoc V.Le团队,第一作者是Hieu Pham和Melody Y.Guan,甚至Jeff Dean也有挂名。

文章对之前用RL做NAS的方法进行了改进,将不同网络的参数进行共享,从而减少搜索时间。

方法

搜索空间

  • 一个全连接N个节点的DAG
    • 节点表示local computations,保存它自己对于不同op的参数
    • 边代表flow of information

搜索方法

  • 使用RL方法搜索
    • 哪个edge被activated
    • 每个node的computation是

RNN搜索

  • sample一个activation func
  • sample一个previous index和activation func
  • 将所有loose节点求平均

CNN搜索

  • 一个node:两个input index,两个op,结果通过add合并

训练

  • 两阶段训练
    • 第一阶段训练shared weights,用1 epoch的数据
      • 固定controller参数,不同architectures的gradient合起来
    • 第二阶段是训练LSTM,2000 steps
      • R是在validation set计算

实验

  • controller
    • LSTM 100 hidden
    • autoregressive
  • PTB
    • limit the size of our ENAS cell to 24M parameters
  • CIFAR-10
    • 310epochs
    • 搜索0.5day+CutOut,2.89error
  • 和随机比较
    • 解释是不是因为search space的设计导致的效果好
  • 去掉ENAS搜索,只用shared weights
    • 比随机搜索还要差

总结

ENAS确实能大大减少搜索时间,但可能ENAS是不是可能陷入局部最优去了(weight sharing导致)?训练中的参数过多是否可以自动化?后续的DARTS就是可以解决两阶段训练的bias问题。

论文笔记: 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即轻松发论文,妙。

论文笔记 Once-for-all: train one network and specialize it for efficient deployment

这篇是发表在ICLR 2020的《Once-for-all: train one network and specialize it for efficient deployment》,作者是MIT的韩松团队,第一作者是Han Cai。

为了解决在不同设备和限制条件下神经网络高效推理的问题,一般会使用Hardware aware的NAS。作者提出使用一个once-for-all的网络,能够解耦训练和搜索过程,通过一次训练一个超大网络,再从中搜索子网络来得到限制条件下最高的性能。

方法

大网络设计(搜索空间)

  • 多个units,每个unit里面是多层,只有第一层是stride=2
  • 每个unit
    • elastic layers: 任意数量的layers {2,3,4}
    • elastic width: 任意数量的channels: expansion ratio{3,4,6}
    • elastic kernel size: 任意kernel size {3,5,7}

大网络训练

  • sample各种配置的网络联合训练
  • Progressive Shrinking
    • resolution: sample 128-224大小的输入,全部训练过程都有
    • 首先用最大的layers width kernel size训练,慢慢把不同配置加入sample池子
      • 子网络的loss使用knowledge distillation
    • width:大网络挑选L1最大的,作为子网络的initial,慢慢加入sample池
    • depth: 取前n层
    • kernel size: 7x7的center乘以一个变换矩阵得到子矩阵

搜索

  • sample 16K个网络,在10K个image上训练accuracy predictor
    • neural network twins
      • 3层,每层有400个hidden units
      • 输入是one-hot vector based on kernel size, input size and expand ratio,如果是skipped就zero vector
  • evolutionary search
    • 优化目标accuracy/latency

结果

  • ImageNet
    • OFA 76% acc, 230M MAC
    • OFA finetune#25epochs 76.4% 230M MAC
    • OFA finetune#75epochs 76.9% 230M
    • 比Mnasnet的74% 317M MAC好
    • 比MobileNet V3-Large的75.2% 219M MAC好
    • 训练时间为1200GPU hours
  • 在Samsung S7 Note8/10 Pixel1/2测试
  • 在1080Ti CPU TX2 ZU9EG FPGA ZU3EG上测试
  • FPGA经验
    • memory access是expensive的,computation是cheap的
    • 通过OPs/Byte来作为一个指标

总结

once-for-all的思路是weight sharing的一个扩展,亮点在于graph不是predefine的,而是online generate的,借用了一些pruning的技术。有一个sharing的趋势吧,应该能做更多东西出来。

论文笔记 FastGRNN: A Fast, Accurate, Stable and Tiny Kilobyte Sized Gated Recurrent Neural Network

这篇是发表在NIPS2018的论文《FastGRNN: A Fast, Accurate, Stable and Tiny Kilobyte Sized Gated Recurrent Neural Network》,论文作者是微软印度研究院的Aditya Kusupati和德里印度理工学院、伯克利大学。

论文对带residual connection的FastRNN进行分析,理论证明FastRNN能有很好的训练收敛性能(解决梯度消失和梯度爆炸的能力)。另外提出了它的改进版本FastGRNN,增加可学习参数提升性能,通过weight复用、low-ranking、sparse和quantization减少参数和加速计算。

方法

FastRNN

  • 正常RNN$h_t=tanh(Wx_t+Uh_{t-1}+b)$变为下面
  • $\tilde{h_t}=\sigma(Wx_t+Uh_{t-1}+b)$
  • $h_{t}=\alpha\tilde{h_t}+\beta h_{t-1}$
    • 一般$\alpha<<1 \beta\approx 1-\alpha$
    • 都是可学习参数
    • 把当前算出来的$\tilde{h_t}$和之前的$h_{t-1}$结合

FastRNN解决病态gradients的证明

  • 没仔细看
  • Notation
    • T是RNN的timestep
  • Convergence Bound
    • 最大的iterations被bound在O(\frac{\alpha T}{\epsilon^2} \dot poly(L(\theta_0),R_W R_U R_v,\bar{D})),当$\alpha=O(1/T)$
  • Generalization Error Bound
    • Generalization error和T无关

FastGRNN

  • 使用Gated模型并增加一个可学习参数提升准确性
    • $z_t=\sigma(Wx_t+Uh_{t-1}+b_z)$
    • $\tilde{h_t}=tanh(Wx_t+Uh_{t-1}+b_h))$
    • $h_t=(\zeta(1-z_t)+v)\odot \tilde{h_t}+z_t\odot h_{t-1}$
    • 注意:W和U参数共享

压缩

  • Sparse low-rank
    • $W=W^1(W^2)^T,U=U^1(U^2)^T, ||W^i||_0\le s_w^i, ||U^i||_0\le s_u^i$
    • $W^i$是$R^{D\times r_w}$
    • $U^i$是$R^{D\times r_u}$
  • Byte Quantization
    • piecewise-linear approximation of the non-linear functions训练
    • 解决1.accuracy loss 2.非线性操作要转化成float算

训练

  1. 训练low-rank
    • 直接训练W1 W2的形式
  2. 训练
    • Iterative Hard Threshold(IHT)
  3. 固定支持参数{W,U}训练

实验

  • 语音唤醒任务
  • PTB
  • Pixel-MNIST
  • 结果
    • 直接用FastGRNN可以200KB->57KB,保持精度,减少一倍训练时间
    • 使用LSQ压缩后,57KB->5.5KB
    • 只是用LS压缩,大概22KB,Q压缩减少4倍数据

总结

FastRNN理论证明部分虽然看不懂,但是深度学习理论的魅力所在,从理论上分析才是正确的道路,不能瞎搞。FastGRNN压缩网络把RNN压缩了很多,改动不是很大,LSQ都是以前的方法,但是效果不错。

论文阅读 DARTS: Differentiable Architecture Search

这篇论文是发表在ICLR 2019的《DARTS: Differentiable Architecture Search》,文章的作者是CMU的Yiming Yang 组,第一作者是Hanxiao Liu。

这篇论文使用可微分的方法进行神经网络架构搜索,将搜索空间relax,然后建模成为一个嵌套优化的问题,并提出了一个one-step的approximate的优化方法,可以用1-2d的GPU hours达到和RL-based NAS类似的结果

方法

搜索空间的relax

  • 神经网络为一个tensor作为node、operation作为edges的DAG
  • N个node编号,所有小号对应的node连edge到大号对应的node
  • 确定edge的种类为Conv等神经网络层还是identity或者不连接
  • 网络只搜normal block和reduction block,CIFAR10有$10^25$(里面有isomorphism)

建模问题

  • 将所有的搜索空间可选操作集的weighted sum作为edge操作
  • 优化这个weight softmax(α)
  • $\min_{\alpha} L_{val}(w^(\alpha),\alpha) s.t. w^(\alpha)=\arg\min_{w}L_{train}(w,\alpha)$
  • 最后从每个edge的operation set里面选择最大的top-k alpha新建网络训练

one-step的approximate优化方法

  • 两步优化
    • 使用更新后的w作为参数,使用梯度下降法在validation set上优化alpha
    • 更新w的参数
    • 如果不用w更新后的参数,就是first-order的方法,效果更差一点
  • 避免alpha在training set上过拟合
  • 选择合适的w学习的学习率对结果影响大

实验

  • CIFAR10
  • 迁移ImageNet
  • PTB

评价

这篇文章使用可微分的方法将NAS搜索的时间大大降低了,理论部分也有两阶段优化的一些理论依据(first-order和second-order确实有差别),而不是简单的拍拍脑袋做了实验,这点需要学习。
接着这篇论文可以做很多工作。

论文笔记 《A Semi-Supervised Assessor of Neural Architectures》

这篇文章是发表在CVPR2020的《A Semi-Supervised Assessor of Neural Architectures》,作者来自北京大学Yehui Tang,华为诺亚方舟实验室Chunjing Xu为通讯作者。

文章提出了一种网络性能预测器,在NAS的场景下,不用训练网络得到网络性能,而是直接用性能预测器预测网络的性能,从而减少搜索时间。使用了AutoEncoder + 图网络的结构来实现半监督学习。

方法

网络Embedding表示

  • 使用AutoEncoder将邻接矩阵表达的网络结构Embedding到一个向量
  • 采用重建Loss训练

网络关系图谱

  • 一个网络是图中的node
  • 由网络结构的Embedding的距离,建立网络关系图谱
    • 距离小于Threshold 才有边
    • 边根据距离设定weight

性能预测器

  • 直接预测关系图中每一个node(网络)的accuracy
  • sample一些labeled样本和unlabeled样本一个batch的graph。
  • 网络关系图谱用Labeled训练集训练(半监督)
    • 训练同时优化Labeled node周围连边的非Labeled node的accuracy

实验

  • Autoencoder
    • 2Conv+FC
    • FC+2Conv
  • 性能预测器
    • 两层图网络
  • 把预测器放到RL或者EA里面替代evaluate
  • 在NASBench 1K个网络的accuracy可以很好地预测到94.01的网络(最好是94.41%)

评价

半监督为性能预测器打开了一个新的思路,采用图网络的解决方案是一个很不错的方向。之前学术十杰答辩的时候有人问到因为网络结构与网络性能之间的映射关系很不平坦,所以会有一些质疑,但是从实验结果来想,我认为统计上确实相似的网络有相似的性能。

论文笔记 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的量化也没有做,后续应该有相应的工作值得调研。

论文笔记: A regularization method for convolutional networks

这篇是Google Brain的Quec V.Le组是发表在NeurIPS 2018的论文《A regularization method for convolutional networks》。文章的第一作者是Golnaz Ghiasi(匈牙利或者瑞典),2011-2016加利福尼亚大学欧文分校(UCI)博士,第二作者是Tsung-Yi Lin,2009本科毕业于国立台湾大学,2017年博士毕业于康奈尔,现Google高级研究员(Senior Research Scientist)。

文章介绍了一种针对卷积的dropout方法,克服了普通的dropout因为稀疏性在卷积上依然传递空间信息的问题。该方法直接把feature map上的一些连续的空间块(block)设为0。

方法

  • BN层后面加
  • 训练阶段,从(block_size, w-block_size)这些区域里面选择sample mask,概率为γ
  • 以block_size扩张mask
  • 把feature map乘以mask

block_size和γ的选择

  • block_size实验选7号
  • γ根据keep_prob来计算,keep_prob从高到低线性降到0.9

结果

  • resnet50可以涨1.6个点
  • RetinaNet在COCO可以涨1.6个点
  • 不同resolution的层来做实验,可能是越大的resolution这个最佳block_size越高
  • 从CAM上来看,可以增加空间上更分散的表达

评价

非常简单易行的一个方法,增加空间上更分散的表达是一个很重要的点,期待后面有人可以分析一下。可以看到keep_prob其实比较高,说明每个层去掉的东西不多。不太能用来减少计算量,另外这个Dropblock加到哪里,其实没有讲清楚。

论文笔记: Designing Network Design Spaces

读了一篇FAIR何凯明组刚发的论文《Designing Network Design Spaces》,作者全都来自于Facebook AI Research(FAIR),包括大名鼎鼎的Ross Girshick、Piotr Dollár和Kaiming He组合,一作是伯克利的Ph.D Ilija Radosavovic(可能是斯拉夫人名)。

这篇文章通过对网络设计空间中的模型进行分析,找到好模型的规律,手工缩小设计空间,再从缩小的设计空间中找到更小的设计空间,一步步对设计空间进行设计。最后发现了一个好模型的空间,这个空间里的模型可以由量化的线性函数确定每个block的widths和depths。

方法

初始设计空间

  • AnyNet:类ResNet的Block,每个block有4个自由度(width w, numbers of blocks d, group size(中间层是group conv) g, bottleneck ratio r)
  • 输入224x224,4个blocks,和ResNet一样的stride
  • 自由度是power of 2,(空间大小2e18)

不使用NAS,使用grid search

  • 每次从设计空间随机sample 500 models进行训练10epochs
  • 画EDF(Error distribution function)图片(x轴是error,y轴是probability,类似于ROC曲线),可以直观地看到一个搜索空间的好坏,便于比较
  • 另外一个参考指标是自由度-error 散点图,可以看到不同的自由度下面error的趋势
  • 对于网络大小的参考指标是 flops-自由度,然后把good models的区域标志出来,然后画出均值曲线
  • 好坏网络分别的 block_index-自由度 或者 自由度1-自由度2 曲线

人工优化搜索空间的目标

  • 简化搜索空间的结构
  • 提升或者保持空间的模型表现
  • 保持model的diversity
  • 可解释性

优化路径

  • AnyNetXB: shared bottleneck ratio:不同blocks共享(EDF没变化,7e16)
  • AnyNetXC: shared groups (EDF没变化 3e14)
  • AnyNetXD: $w_{i+1}>=w_{i}$ (EDF变好 1e13)
  • AnyNetXE: $d_{i+1}>=d_{i}$ 5e11
  • RegNet: quantized linear$u_j=w_0+w_a\cdot j for 0<=j<=d$,然后用一个分段函数(因为一个stage w是一样的)去近似它,让拟合误差$e_fit$小 3e8

设计hint

  • 最好网络的depth是稳定的,大概是20blocks(60 layers),不是说层数越高越好
  • 最好的网络bottleneck 1.0最好(没有bottleneck)
  • width multiplier $w_m$约2.5
  • (g,w_a,w_0)随着计算复杂度增加增加

效果

  • REGNETX-600MF top1error 25.9%
  • REGNETY-600MF top1error 24.5%(加了SE)

评价

一开看这篇文章的时候,还不是非常理解为什么有这么好的NAS算法之后还要对设计空间进行设计,难道我们不就是想找一个最优的网络吗?直接NAS不就好了?看完论文才发现,可解释性是多么的重要,神经网络不是玄学,网络的设计也不是玄学,通过一步步的优化搜索空间,我们才能直观地了解到怎样设计网络才是好的,为未来的设计提供指导性的思想。神经网络的设计也是(EDF好的才算好的)。人工优化搜索空间的四个目标是另一个需要业界注意的问题。这篇文章最让我受益匪浅的是它的方法学,在多目标优化的情况下怎么分解成一个个的小问题。还是有一些毛病:RegNet的quantize方法不是很优美、后面解释alternate design choice的时候224x224放大之类的问题不是很solid。

Your browser is out-of-date!

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

×