论文笔记 《OmniNet: Omnidirectional Representations from Transformers》

这篇文章是2021年挂在arxiv的《OmniNet: Omnidirectional Representations from Transformers》,作者是Google Research的Yi Tay/Mostafa Dehghani。

文章提出使用多层的Tokens作为Attention的输入,类似于DenseNet。

方法

全方向表达

  • $xformer(X)=X_1,X_2,\dots X_L$
  • $O=Attend(IndexSort(xformer(X)))$
  • $OmniNet(X)=xformer(X)_L+MaxPool1D(O)$

解决问题

  • 计算complexity, omninet变成flatnet
    • Attention被实现为meta-learner,输入所有的,精炼
    • 使用efficient transformer
      • kernel transformations
      • low-rank self-attention
      • block-based sparsity
    • partition layers

总结

很多细节没理解到。图像里面的很多思想是可以复用的。

论文笔记 《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的鲁棒性提升了,并且总结了可能的原因。但是加的噪声比较简单,而且结论太启发式,需要进一步研究。

论文笔记 Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference

这篇论文是发表在CVPR2018的《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》,作者是google brain做Mobilenet的Hartwig Adam和Dmitry Kalenichenko,第一作者是Benoit Jacob。

这篇文章提出了一套量化的流程,让前向预测的时候都是整数运算。同时设计了一套训练流程,能够保持较高的量化网络精度。

方法

量化前向预测

  • 量化策略:非对称量化
    • $r=S(q-Z)$
    • r是real q是quantized
    • Z是零点,代表quantized的空间上对应r为0的数值。
      • 因为有zero-padding
  • 矩阵乘法
    • r3=r1r2 分别有不同的S和Z
    • $S_3(q_3^{i,k}-Z_3)=\sum_{j}S_1(q_1^{i,j}-Z_1)S_2(q_2^{j,k}-Z_2)$
    • $q_3^{i,k}=Z_3+M\sum_{j}(q_1^{i,j}-Z_1)(q_2^{j,k}-Z_2)$
      • M是scale factor $M:=S_1 S_2/S_3$
        • 实际运算使用一个定点数乘和一个移位 $M=2^{-n}M_0$
        • $M_0\in[0.5,1)$是int16或者int32的
        • 有一定的损失,但利用定点数乘法把误差降到最低
    • $q_3^{i,k}=Z_3+M(NZ_1 Z_2-Z_1 a_2^k -Z_2 a_1^i +\sum_j q_1^{i,j} q_2^{j,k})$
      • 其中$a_1:=\sum_{j}q_2^{j,k}$ 整个矩阵运算里面是提前算好了O(N^2)
      • 整个计算量在q1q2 O(N^3)
  • 实现
    • 中间临时数值用int32
    • q1q2
      • int32+=uint8*uint8
    • bias
      • $S_{bias}=S_1 S_2, Z_{bias}=0 $
    • 算完之后cast到uint8
      • 使quantization倾向于使用uint8全部的表示区间

量化训练算法

  • 使用量化算法的原因
    • 1.原来算法weights的channel-level large differences>100x,导致range较小的那些channel有很大的量化误差
    • 2.weights的outlier
  • simulate quantization effects in the forward pass of training
    • weight and biases stored in FP32
    • $q_{sim}(r;a,b,n)=round(\frac{clamp(r;a,b)-a}{s(a,b,n)})s(a,b,n)+a$
    • n是量化的位点数目2^8,$s(a,b,n)=\frac{b-a}{n-1}$
    • biases are not quantized because they are represented as 32-bit integers
  • a,b的确定
    • weight: a:=min(w) b:=max(w)
    • activation: via EMA(exponential moving average)
      • disable activation quantization at start of training to get stable state
    • nudge a/b to make sure 0.0 is representable
  • batchnorm的处理
    • inference: fold to weight of conv $w_{fold}:=\frac{\gamma w}{EMA(\sigma_B)}$
    • training: simulate the folding
      • 计算图上计算两遍Conv,第一遍浮点把$\sigma_B$和$\mu_B$算出来
      • 第二遍把folded weights算出来然后quantize之后conv

实验

  • ImageNet ResNet,掉2%
  • ReLU6>ReLU
  • weights are more sensitive to reduced bit depth than activations.
  • it’s better to keep weight and activation bit depths the same.

总结

这篇文章系统性的提出了整个网络非对称量化的方法,非常具有实践意义。在计算图上进行分析修改的方法值得借鉴。分析掉点的原因:channel-wise quantization。数值误差:M的tail和cast到uint8; bias的量化损失。

论文笔记 Noise Injection Adaption: End-to-End ReRAM Crossbar Non-ideal Effect Adaption for Neural Network Mapping

这篇论文是发表在DAC2019上的《Noise Injection Adaption: End-to-End ReRAM Crossbar Non-ideal Effect Adaption for Neural Network Mapping》,论文作者是中佛罗里达大学的Deliang Fan组,第一作者是Zhezhi He和Jie Lin。

文章分析了RRAM的crossbar运行DNN的不理想性质:SAF,IR-Drop,thermal noise, shot noise和random telegraph noise。提出了训练、映射和测试的框架PytorX,能有效减少这些不理想性质的影响。

方法

不理想性质

  • 确定的噪声:Stuck-at-fault(SAF)缺陷
    • SA0是卡在低阻态,1.75%
    • SA1是卡在高阻态,9.04%
  • 随机噪声1:IR-Drop
    • 线阻
    • 决定于于input电压和RRAM的电导
    • 建模成随机,因为直接计算太expensive了
  • 随机噪声2:Thermal Noise和Shot Noise
    • 热噪声
    • 散粒噪声
    • 建模成0均值的高斯分布
      • $i_{rms}=\sqrt{Gf(4K_B T+2qV)}$
      • rms是root-mean-square current
      • G是电导,f是crossbar的操作频率,T是温度,V是voltage drop
    • programming偏差
      • $\sigma=\Delta G/3$
      • $\Delta G$是ReRAM的电导分辨率resolution (每一级之间的差异)
    • 加上上面两种噪声影响,权值的总体偏差的标准差:
      • $g_{rms}=i_{rms}/V=\sqrt{\frac{Gf(4K_B T+2qV)}{V^2}+(\frac{\Delta G}{3})^2}$
  • 随机噪声3:Random Telegraph Noise(RTN)
    • 随机电报噪声,也叫Burst Noise 爆裂声
    • 临时的、随机的减少电导值
    • $G_{rtn}=G \frac{bG+a}{G-(bG+a)}$
    • 其中a、b是参数,取1.662e-7和0.0015
    • 根据参考文献,G有一半的可能性变成$G+G_{rtn}$(泊松分布)

ReRAM的crossbar计算

  • NN的算法计算
    • $y=(\alpha_w \alpha_x)\sum_i (w,x)$
    • w和x是量化后的权重,$\alpha_w, \alpha_x$是scale因子
  • RRAM的计算
    • DAC的输入$V_{DAC,i}=V_{ref}+\Delta V_{DAC}x_i$
      • $x_i$是n个二值数的比特串(the input $x_i$ is encoded as binary bit-strings n_i[n]),二进制补码表示,文章取n=8
      • $ΔV_{DAC}$ is the minimum voltage stage of the DAC
      • 这里是直接8bit输入了,不是一个个输入的
    • ADC收到的信号
      • $I_{ADC,j}=\sum_{i}(\Delta V_{DAC}x_i \dot (G_{i,j}^+ - G_{i,j}^-))$
      • $G_{i,j}^+ - G_{i,j}^-=\Delta G\dot w$
        • $\Delta G$是RRAM cell的电导step size
    • ADC的量化
      • $y=round(\frac{I_{ADC,j}}{\Delta I_{ADC}})$

End-to-end的适应

  • SAF的误差修正
    • 记录所有的错误cell,然后片外计算来补偿
  • Noise Injection Adaption for IR-drop
    • 128x128的crossbar的IR-drop非常高,不能用,64x64的可以用
    • 训练的时候考虑IR-drop
    • 但是如果直接算,花费的计算开销太大了
    • NIA方法
      • 训练网络,map到硬件,收集crossbar output current shift
      • 使用高斯噪声近似影响
      • 使用带高斯噪声来训练网络
  • 其他随机噪声
    • $G_{act}=G+G_g+G_p$
    • 高斯噪声和泊松噪声
    • 高斯噪声是和weight和input相关的
      • 使用NIA方法效果很差

总结

这篇论文详细的在算法层面上建模了硬件的不完美带来的影响,并且提出了解决方案,虽然有SAF等解决方案挺不容易实现的;但至少非常清晰明白,为未来指出方向。solid的工作。

论文笔记 Going Deeper in Spiking Neural Networks:VGG and Residual Architectures

这篇文章是2019年发在frontiers in Neuroscience的《Going Deeper in Spiking Neural Networks:VGG and Residual Architectures》,作者来自于普渡大学的Kaushik Roy组(负责Nanoelectronics Research Laboratory),第一作者是Abhronil Sengupta(18年毕业,现在在宾州州立做助理教授),还有和facebook reality labs的人员参与。

文章提出了一种将更深层的ANN转化成SNN的算法,可以实现VGG和ResNet的转化,在CIFAR-10和ImageNet上测试。

方法

SNN模型

  • 输入使用泊松随机产生500-1000个timesteps
  • 使用了激活后降低到0的neuron模型

网络限制

  • 不用bias
    • BN层换成dropout来做正则化
  • Pooling层使用avgpool

VGG转化

  • 激活阈值Vthr设置成最大ReLU的激活值
    • 被叫做”weight-normalization”或者”threshold-balancing”
      • weight normalization是将weight scale到和最大neural activation,Vthr设置为1
      • threshold-balancing是保持weight大小,Vthr设置到最大激活
  • Spike-Norm
    • 由于使用了降低到0的neuron模型,输入信息会有损失
    • 一层一层单独来转,保证最小化neuron的temporal delay,同时保证阈值不会太小
      • temporal delay是由于evidence integration导致的输入spike到输出spike的时间差
      • evidence integration(证据整合),就是乘累加计算
    • 每层的weight-normalization/threshold-balancing根据spike的输入来确定
      • Vthr=max(Vthr,max(Wx))

ResNet转化

  • 在加法之后加入ReLU
    • 因为ReLU才会Spike,因此ResBlock的第二层Conv和输入共同evidence integration,整合后转化成IF
    • 提供了一个时序balancing的作用
  • 输入layers使用相同threshold
    • 因为网络第一层conv出来的threshold比较高,但是ResBlock的conv出来的threshold比较低,junction layer的spike会被identity mapping的输入主导,需要balance
    • 两支的threshold都设为1
  • 7x7转为3x3的卷积
    • threshold-balancing更好

实验

  • VGG CIFAR-10 ANN 91.7%,SNN 91.5%
  • VGG ImageNet ANN 70.5% SNN 70%
  • ResNet-20 CIFAR-10 ANN 89.1% SNN 87.5%
  • ResNet-34 ImageNet ANN 70.7% SNN 65.5%

总结

论文将ANN全转化到SNN上,通过对VGG和ResNet的实践,发现不同网络需要特定处理。并且提供了一层一层转化的思路,直接利用Spike的信息,值得借鉴。

论文笔记 Optimal Conversion of Convolutional Artificial Neural Networks to Spiking Neural Networks

这篇是ICLR2021在审匿名论文《Optimal Conversion of Convolutional Artificial Neural Networks to Spiking Neural Networks》。

文章针对ANN到SNN的转化进行了误差分析,结论是网络的整体误差来源于每层的误差累积,提出减少每一层的误差的方法:1使用Threshold来抑制过多的激活值,从而能用更少的timesteps(simulation time);2使用Shift的方法补偿激活函数的误差。

方法

对ANN到SNN的建模

  • ANN d=h(Wa)
  • SNN $a’_{l+1}=h’(Wa’)$
    • 其中a’是post synaptic potential(PSP)突触后电位,化学突触的突触后末端的膜电位的变化,也就是前一层由于spike的减少的电位
  • $a’_{l+1}=Wa’-v(T)/T$
    • v(T)是T时刻的膜电位
  • $a’{l+1}=h’(Wa’)=V{th}/T*clip(floor(TWa/V_{th}),0,T)$
    • 输出脉冲等于输入脉冲造成的膜电位影响能被当前层PSP,也就是V_{th}的多少倍

分解转化误差到每层

  • 通过理论分析将转化误差问题化归为最小化每层的激活值误差问题

减少误差的方法

  • ANN上使用Threshold(类似ReLU6)来抑制过多的激活值
    • 取1或者2
  • SNN上使用Shift来减少激活函数带来的误差
    • h’(z)和h(z)存在系统误差,需要将数值shift一下
    • $E_z[h’(z-\delta)-h(z)]^2$
    • $\delta=V_{th}/2T$
  • 最后总误差控制到$\Delta L\approx LV_{th}^2/4T$

转换流程

  • 初始化V_th=0
  • 采样一系列samples
    • $V_{th}^l=max(V_{th}^l,max(a_l))$
  • weight:=ANN.weight
  • bias:=ANN.bias+V_{th}/2T

实验

  • ANN上使用Threshold对结果影响不大,甚至还有提升
  • timesteps可以讲到50以下基本不掉精度
    • Shift单独用可以在80以下不掉精度
    • Threshold单独用可以在60以下不掉精度

总结

这篇paper从理论的角度来探讨了ANN转换SNN的技术,思路非常棒,使用PSP也给我提供了一个新的视角。
但是这个既没有Quantization也没处理Pooling和BN层,所以仅从Conv上可以参考。

论文笔记 《Binary Neural Networks: A Survey》

这篇论文是发表在期刊Pattern Recognition的论文《Binary Neural Networks: A Survey》,作者来自于北航,一座Haotong Qin,通讯Xianglong Liu,也是IR-Net的作者。

文章对2020年及以前二值神经网络进行了总结,把二值化的方法分为:直接量化、优化方法量化(包括最小化量化误差、升级网络的loss function、减少STE梯度的误差)

论文

简单的二值网络

  • 用固定的量化函数直接量化weight和activation。
  • 使用STE来finetune
  • BinaryConnect 2016
  • BNN (Binarized Neural Networks)

最小化量化误差

  • $J(b,\alpha)=|x-\alpha b|^2$
  • $arg\min_{\alpha b}J$
  • Binary Weight Netowrks
  • XNOR-Net
  • DoReFa-Net
  • ABC-Net
  • LQ-Nets

升级网络的Loss function

  • 联合优化binarization和task-specific objective
  • 问题
    • “degeneration”, “saturation”and “gradient mismatch”
  • Distilled BNN
  • Distillation and Quantization
  • BNN-DL
  • CI-BCNN
  • INQ(Incremental Network Quantization)

减少STE梯度的误差

  • 解决sign和STE的梯度不匹配问题
  • Bi-Real net
  • BNN+
  • IR-Net

其他应用

  • BNN的鲁棒性比全精度要好
    • 变化输入对BNN影响不大
  • BNN有利于解释神经网络
    • 重要性排序
    • 改变01对结果影响大的

训练技巧

  • 网络结构的变换
    • 重新放置Pooling
    • Conv前面加入BN层
    • 连接全精度网络和binary网络
    • 增加channels
  • 网络hyper-parameters
    • Adam
    • momentum of BN
  • 梯度估计

总结

看完对这个领域终于有个蓝图的认知了,虽然分类的理由不够充分,还有一些模糊不好分类的工作。想了有一些可以做的点。

论文笔记 《Quantization Networks》

这篇论文是发表在CVPR2019的论文《Quantization Networks》,作者来自达摩院,第一作者是Jiwei Yang(中科大,田新梅学生),mentor 华先胜(IEEE Fellow 达摩院城市大脑人工智能负责人)。

这篇论文提出了一种新的可微分的方法实现网络权重和激活值的量化,取得了不错的效果。量化函数被建模成多个Sigmoid函数的线性组合,整个网络可以直接通过反向传播被端到端训练。

方法

量化函数的重新formulation

  • $y=\sum_{i=1}^n s_i \mathcal{A}(\beta x-b_i)-o$
    • $\beta$和$b_i$决定了每个量化位点的位置
      • $b_i$是第i个量化区间的开始点
    • $\mathcal{A}$是unit step function单位越界函数,>0为1,<0为0
    • $s_i$决定每个量化位点的间隔
      • 如{-4,-2,-1,0,1,2,4}
    • $o$是全局偏移量,是$1/2 \sum_{i=1}^n s_i$

使用Sigmoid函数来近似单位跃阶函数

  • $\sigma(Tx)=\frac{1}{1+exp(-Tx)}$
    • 当T越大的时候,和单位跃阶函数相近
    • 当T=0的时候,等价于线性函数
  • $y=\alpha (\sum_{i=1}^n s_i \sigma(T(\beta x - b_i))-o)$
    • 训练的时候不断增加T
    • $x, \alpha, \beta, b_i $的梯度都能求出
  • 训练的时候使用近似函数,前向预测的时候使用量化函数

实验

  • ImageNet ResNet-18(raw 70 top1 )
    • W/A 1/32 66.5
    • 3/32 70.4
    • 1/1 53.6
    • 1/2 63.4
  • SSD pascal VOC (raw 77.8 mAP)
    • 2/32 76.3
  • 影响因素
    • 非均匀量化,bias做成K-means,性能高一点点
    • pretrained model 效果好很多
    • T的收敛速度,需要在{5,10,20,40}里面选择调参

总结

通过重新formulate量化函数,可以比较好的找到一种可微分的近似方法,思路很清晰。这个方法没有名字,要是有个名字就好了。

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

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

论文笔记 《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),减少了计算量,提升了性能

总结

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

Your browser is out-of-date!

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

×