论文笔记 《FTT-NAS: Discovering Fault-Tolerant Neural Networks》

这篇文章是发在ASP-DAC2020的《FTT-NAS: Discovering Fault-Tolerant Neural Networks》,作者来自清华汪玉组,共同第一作者Wenshuo Li和Xuefei Ning。

这篇文章针对硬件运行神经网络可能会有错误的场景,提出使用NAS来搜索抗错误的神经网络架构(FT-NAS);并使用抗错误训练(FTT)的方法来减少错误。结合这两种方法就是FTT-NAS。

Motivation:
安全性和可信特性需要去解决。
safety-critic applications的需要:硬件对于soft error更加sensitive(来自atmospheric neutrons大气中子/radioactive impurities放射性杂质)。
边缘设备:Voltage instability/aging/temperature variation。
malicious attackers:embedding hardware trojans(硬件木马)/manipulating back-doors/memory injection。

方法

错误模型

  • 模型用8bit量化
  • 训练模型
    • random bit-flip
    • $y=f(Wx+b+\theta 2^{\alpha} (-1)^\beta)$
    • $\theta~ Bernoulli(p)$ p概率产生bit偏移
    • $\alpha ~ Uniform(0,1,\dots, Q-1)$ Q-1个比特随机选
    • $\beta~ Uniform(0,1)$ 随机产生正负偏移
  • 注意,为了效率,这个模型只在feature map上面加,相当于bias

NAS

  • RL的模型,CIFAR-10
  • super-net里面选择,用shared-weights
    • shared weights使用FTT方法训练
  • search space
    • normal cell和reduce cell
    • 7 operations: none, skip connect, 3x3 avg, 3x3 max, 1x1 conv, 3x3 relu-conv-bn, 5x5 relu-conv-bn
    • B-2 nodes,2个输入来自于上两个cell
    • 6.9*10^21 B=6
  • searching
    • $R=(1-\alpha)acc_c+\alphaacc_f$
    • search iter
      • 数据集$D_t$训练shared weights
      • 另一个数据集$D_v$训练controller
    • FTT训练的loss $L=(1-\beta)acc_c+\betaacc_f$

实验

  • ResNet-20 1110M flpps 3%flip 13.6%
  • FT-NAS-Net 750M flops 3%flip 78.2%
  • FTT-NAS-Net-20 704M flops 3%flip 88.6%
    • 发现双重connections between some pairs of nodes
    • 说明可能找到了敏感的connections,然后用冗余的path来保护这些nodes
  • ResNet-M (使用5%的错误率训练) 862M flops 81.9%
    • 使用了double connection
    • base channel 从64降到了40,保持flops
  • 提升来自于两个方面:1.架构,2.redundancy的forwarding
    • 简单的inference conv两次,然后取平均 57.4%
  • 其它noise的效果
    • 对于bit-flips效果最好>gaussian noise> salt-and-pepper noise

总结

这篇文章使用简单的加feature map噪声的方法将神经网络对于noise的鲁棒性提升了,并且总结了可能的原因。但是加的噪声比较简单,而且结论太启发式,需要进一步研究。

论文笔记 《Searching for MobileNetV3》

这篇论文是发表在ICCV2019的《Searching for MobileNetV3》,作者是Google Brain的Quoc V. Le和Hartwig Adam组。第一作者是Andrew Howard。

这篇论文结合NAS以及SE Block的设计新方法改进MobileNetV2。

方法

结合SE Block新设计

  • 使用MobileNetV2的inverted residual block+MnasNet的SE
  • 仅在部分层使用se-block

使用NAS+NetAdapt

  • NAS直接用MnasNet搜到的结构
  • NetAdapt在这个搜到的结构上,随机sample每一层的expand ratio,和每一个block的bottleneck size,做Evolution

改进的激活函数

  • hswish替代原来的swish,不用sigmoid用ReLU6
  • $h-swish(x)=x RELU6(x+3)/6 $
  • 在网络前面block里面使用relu,后面使用hswish

改进block前后网络结构

  • 前面stem,使用16channels替代32channels
  • 最后一层使用avg-pool替代1x1Conv

Segmentation

  • 提出Lite R-ASPP(LR-ASPP),减少了计算量,提升了性能

总结

结合一些已有的算法,做了详实的实验,得到了很好的效果。

论文笔记 《Path-Level Network Transformation for Efficient Architecture Search》

这篇论文是发表在ICML2018的《Path-Level Network Transformation for Efficient Architecture Search》

论文笔记 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的训练,从而减少显存开销还有计算开销。

方法

Super-Network

  • 每个层包括不同的operations
  • 每层后面有一个gate

Proxyless

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

优化过程

  • 先固定α,训练网络的参数
  • 固定参数,训练α
    • 1.gradient的方法
    • 2.新提出的Reinforce的方法
      • $\partial J(\alpha)/\partial alpha=\sum_i R(N(e=o_i))p_i\partial log(p_i)/\partial \alpha$
  • path-level pruning perspective of NAS
    • 网络的搜索和剪枝类似,去掉相应的连接
    • 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训练思路也棒。

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

  • 全精度网络的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即轻松发论文,妙。

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

论文阅读 DARTS: Differentiable Architecture Search

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

这篇论文使用可微分的方法进行神经网络架构搜索,在连续域内进行模型搜索,这样就可以使用梯度下降对模型进行优化。将Cell搜索空间relax到一个DAG表示,然后建模成为一个嵌套优化的问题,并提出了一个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%)

评价

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

论文笔记 《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,但是没有联合搜索。

Your browser is out-of-date!

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

×