论文笔记 《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进行参数化,学习到最优参数以保留更多的信息。

论文笔记 《Interpret Neural Networks by Identifying Critical Data Routing Paths》

这篇是发表在CVPR2018的论文《Interpret Neural Networks by Identifying Critical Data Routing Paths》,作者是清华大学的Hu xiaolin组,第一作者是Wang Yulong。

作者提出了一种利用知识蒸馏来生成神经网络的预测路由路径的方法。通过预测路由路径可以分析神经网络对不同的类别路由差异,以及相同类别的路由差异。同时也分析了对抗样本对路由路径的影响,并提出了一种利用路由路径检测对抗样本攻击的方法。

方法

蒸馏引导的路由路径 Distillation guided routing

  • 每个channel的output乘以一个gate$\lambda$
  • 通过知识蒸馏的方法来学习gate
    • $$\min_{\Lambda}L(f(x),f(x,\Lambda)+\gamma |\Lambda|_1) s.t. \lambda \ge 0$$
    • $\Lambda$代表所有层的所有$\lambda$连接起来的vector
    • 最小化蒸馏后的网络对同一张图片的输出与原始输出的loss,同时减少lambda的L1Norm
    • 通过gradient descent来学习最佳的$\Lambda$,训练30iteration
  • 找出训练的iterations里面最小的loss对应的$\Lambda$作为CDRP

实验

  • 剪枝量化研究
    • Pruning的方法来剪枝
    • 比Adaptive Weight Routing和Adaptive Activation Routing效果要好,Sparsity高
    • CDRP能代表很强的分类信息,分的清重要channel和不重要channel
  • 类别间的差异
    • t-SNE发现,前面的层差异小,后面加大
  • 类别内的差异
    • 可以通过agglomerative clustering来对组内的图片进行距离判别
  • 对抗样本
    • 对抗到不同的类别,能区分开来
    • 对抗到不确定类型,不能区分开来,因为这个时候被误解的类别和原始图片很想

总结

这篇论文总结了怎么用CDRP的方法来分析神经网络的性质。实验设置可以做到很好。

论文笔记 《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上面还是离恢复精度有一定的距离。

论文笔记 《Dynamic Convolution: Attention over Convolution Kernels》

这篇是发表在ECCV2020的文章《Dynamic Convolution: Attention over Convolution Kernels》,作者是微软研究院的Yinpeng Chen、Zicheng Liu等人。

文章为了增加网络的表示复杂性,针对不同的输入样本动态使用不同的卷积核,虽然整个网络计算量不会发生变化,但是网络的复杂性得到提升。

方法

Dynamic Convolution

  • Attention:使用和SE block一样的Global Avg Pool+FC+Softmax的方法
  • Kernel Aggregation:卷积的weight是由多个weight加权得到

Insight

  • Attention的加和为1
  • 在早期训练的epochs里面,用的是接近均值的Attention
  • 这两点是和以前的方法最大的不同

实验

  • ImageNet
    • Each layer has K = 4 convolution kernels
    • DY-ResNet-18
      • 42.7M 1.85G 72.7(提升2.3) (origin 11.1M 1.81G 70.4)
    • DY-MobileNetV2 x1.0
      • 11M Param 312.9M MAC 75.2% top1 (origin 300M 72%)
    • DY-MobileNetV3-Small
      • 4.8M 68.5M 70.3(2.9) (origin 2.9M 66.0M 67.4)
  • COCO 2017 single-person keypoint detection
    • Backbone和head都dynamic AP提到62.8(3.6)
    • 仅Backbone dynamic AP 62.3
    • 仅Head dynamic AP 60.3(1.1)

总结

Kernel级别的Dynamic,不一定要减计算量,增加性能也是另一个方向。

论文笔记 ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware

这篇是发表在ICLR2019的论文《ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware》,第一作者是Song Han的19级博士生Han Cai,本科硕士毕业于上海交大。

文章提出了使用sample binary的连接方式来进行One-Shot NAS的训练,从而减少显存开销还有计算开销。

方法

Proxyless

  • 使用sample binary连接的方式,减少训练和计算开销
    • 每层的每一种operation有α的概率被sample出来
    • 相当于用个小网络进行训练部分weight
  • 直接可以搜索所有的block的不同配置
  • 不用在Cifar-10上训练迁移

path-level pruning perspective of NAS

  • 网络的搜索和剪枝类似,去掉相应的连接
  • 步骤
    • 先固定α,训练网络的参数
    • 固定参数,训练α,两种更新方法
      • 1.gradient的方法
      • 2.新提出的Reinforce的方法
        • $\partial J(\alpha)/\partial alpha=\sum_i R(N(e=o_i))p_i\partial log(p_i)/\partial \alpha$
    • prune那些不重要的连接

hardware-aware的搜索

  • 将latency整合到loss里面去
    • $CE+lambda_1|W|_1+lambda_2latency$
  • 将latency整合到reward里面去
    • $ACC(m)*[LAT(m)/T]^\omega$
      • T是目标latency

实验

  • 空间
  • CIFAR-10
    • Gradient 2.08%err 5.7M param
    • Reinforce 2.3%err 5.8M param
  • ImageNet
    • MobileNetV3结构
      “””
      • 3×3dilateddepthwise-separableconvolution
      • Identity
      • 3×3depthwise-separableconvolution
      • 5×5depthwise-separableconvolution
      • 7×7depthwise-separableconvolution
      • 3×3averagepooling
      • 3×3maxpooling
      “””
    • gradient 方案 top1 71.8% 83ms
    • Reinforce方案 top1 74.6% 78ms
    • 200hours

总结

这篇论文提出剪枝来做NAS搜索,具有很强理论指导意义;同时二值化网络训练,具有很强的实践意义。简单的Reinforce训练思路也棒。

论文笔记 《Resolution Adaptive Networks for Efficient Inference》

这篇是发表在CVPR2020的论文《Resolution Adaptive Networks for Efficient Inference》,清华黄高老师组的最新Adaptive的成果,第一作者是Le Yang, Yizeng Han和Xi Chen。

这篇论文对MSDNet进行了改进,提出了RANet,先以低分辨率feature maps输入一个神经网络进行计算,再使用高分辨率feature maps输入一个神经网络进行计算。低分辨率图像就足够分类简单样本了,然后再使用高分辨率的feature maps处理复杂样本。

方法

网络结构设计

  • 用steam的几个conv生成不同resolution的初始特征
    • 第一个特征通过Regular-Conv层产生,后面的特征通过Strided-Conv层产生
  • 最小的resolution特征上进行分类
  • 更高resolution使用Fusion Blocks来融合自Sub-network的特征
    • 一种为图3b的保持特征图大小
    • 另一种为图3c的降低特征图大小
    • 上采样使用Up-Conv(Regular-Conv+Bilinear interpolation)
  • TODO: 具体组织形式看代码

训练

  • loss function采用weighted cumulative loss,文章里用相同weight
  • train集合分出一个validation集合来进行threshold的搜索,但训练还是在整个train集合上训练的

结果

  • Anytime Prediction
    • 任意一个sample都小于computation budget
    • RANets好于ResNet ensemble,是因为它是专门为simple samples设计的
  • Batch Budget Prediction
    • 好于MSDNet

可视化

  • 高低分辨率可能的原因
    • 同一图片多物体
    • 小物体
    • 没有明显特征
      • 从low-frequency和high-frequency的角度解释

总结

这篇论文改进了MSDNet,有更高的性能,并且讨论了可能的原因。

论文笔记 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}
  • 网络数目$((3 × 3)^2 + (3 × 3)^3 + (3 × 3)^4)^5 ≈ 2 × 10^19$
    • 5个Unit,最外是5次方
    • 每个unit里面可以选择2,3,4三种block数量(幂次),加起来
    • 每个layer可以3种kernel size选择,3种width选择,所以是3x3
    • 另外,resolution还有25种可能

大网络训练

  • 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的趋势吧,应该能做更多东西出来。

Your browser is out-of-date!

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

×