论文笔记 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都是以前的方法,但是效果不错。

Your browser is out-of-date!

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

×