论文提出Spiking-YOLO,是脉冲神经网络在目标检测领域的首次成功尝试,实现了与卷积神经网络至关的性能,而能源消耗极低。论文内容新颖,比较前沿,推荐给你们阅读
来源:晓飞的算法工程笔记 公众号
论文: Spiking-YOLO: Spiking Neural Network for Energy-Efficient Object Detection算法
脉冲神经网络(Spiking neural network, SNN)将脉冲神经元做为计算单元,可以模仿人类大脑的信息编码和处理过程。不一样于CNN使用具体的值(continuous)进行信息传递,SNN经过脉冲序列(discrete)中每一个脉冲发射时间(temporal)进行信息的传递,可以提供稀疏但强大的计算能力。脉冲神经元将输入累积到膜电压,当达到具体阈值时进行脉冲发射,可以进行事件驱动式计算。因为脉冲事件的稀疏性以及事件驱动的计算形式,SNN能提供卓越的能源利用效率,是神经形态结构的首选神经网络
尽管SNN有不少好处,但目前仅能处理相对简单的任务,因为神经元复杂的动态性以及不可导的操做,暂时没有一个可扩展的训练方法。DNN-to-SNN是近期普遍的SNN训练方法,该方法将目标DNN转化成SNN的中间DNN网络进行训练,而后转成SNN并复用其训练的参数,在小数据集分类上能达到不错的性能,可是在大数据集上分类结果不太理想
论文打算使用DNN-to-SNN转化方法将SNN应用到更复杂的目标检测领域中,图片分类只须要选择分类就好,而目标检测则须要神经网络进行高度准确的数字预测,难不少。在深刻分析后,论文实现YOLO的转换主要面临如下两个问题:spring
为此,论文使用channel-wise归一化(Channel-wise normalization)和阈值不平衡的有符号神经元(signed neuron with imbalanced threshold)来分别解决以上问题,搭建了基于SNN的目标检测模型Spiking-YOLO,论文的贡献总结以下:微信
SNN使用脉冲序列进行神经元间的信息传递,IF(integrate-and-fire)神经元累积输入$z$到膜电压$V_{mem}$网络
第$l$层的第$j$个神经元的膜电压计算如公式1,$\Theta_j^l(t)$为脉冲,$V_{th}$为临界电压,$z_k^l(t)$为神经元的输入机器学习
$z_k^l(t)$由多个输入累加,$w$和$b$为权重和偏置函数
当膜电压$V_{mem}$大于临界电压$V_{th}$时产生脉冲$\Theta$,$U$为单位阶跃函数(unit step function),知足输出1,不知足则输出0。因为SNN是事件驱动的,能源利用率至关高,但难以训练是SNN在全部应用上的主要障碍性能
论文直接使用DNN-to-SNN转换方法将SNN应用到目标检测中,发现性能降低得十分严重,在分析性能降低缘由后,得出两个主要缘由:a) 大量神经元的脉冲发射频率太低 b) SNN缺乏leaky-ReLU的高效实现学习
在SNN中,根据输入的幅度产生脉冲序列进行无损的内容传递是极为重要的。但在固定时间,激活过分或激活不足的神经元内将可能致使内容损失,这和临界电压$V_{th}$的设置有关。设置太高,神经元须要累积很长时间的电压才能发射脉冲,相反则会过多地发射脉冲。发射频率一般定义为$\frac{N}{T}$,$N$为$T$个timestep的脉冲发射总数,最大的发射率为100%,即每一个timestep都发射脉冲 测试
为了防止神经元的激活过分和激活不足,权值和临界电压都须要精心地选择。为此,不少研究提出了归一化的方法,好比经常使用的Layer-wise normalization(layer-norm)。该方法经过该层的最大化激活值来归一化层的权值,如公式4,$w$和$b$为权重,$\lambda$为输出特征图最大值。通过归一化后,神经元的输出就归一到$[0,1]$,方便设定临界电压。因为最大激活值$\lambda$从训练集获得的,因此测试集和训练集须要有相同的分布,但论文实验发现这种常规的归一化方法在目标检测任务上会致使明显的性能降低大数据
图1展现了经过layer-norm后的各层每一个channel的最大激活值,蓝色和红色的线分别为每层的平均激活值和最小激活值。能够看到每层的归一化后的激活值误差较大,整体而言,layer-norm使得神经元的channel偏向激活不足,这在仅需选择分类的图片分类任务是不被察觉的,但对于须要预测准确值的检测任务的回归则不同。好比传递0.7,则须要在10个timestep脉冲7次,0.007则须要在1000timestep脉冲7次。当tempstep自己就不多时,太低的发射率可能会因发射不到足够的脉冲而致使信息丢失
论文提出更细力度的归一化方法,channel-wise normalization(channel-norm),该方法在每层的channel维度上,使用最大激活值对权值进行归一化
channel-wise归一化方法如公式5,$i$和$j$为维度下标,$l$层权值$w$经过在每一个channel使用最大激活值$\lambda_j^l$进行归一化,该值依然是从训练集计算的。对于非首层中,归一化的激活值必须乘上$\lambda_i^{l-1}$来将输入还原为上一层归一化前的值,再进行本层的归一化,否则传递的信息会愈来愈小
具体的逻辑如图2和算法1,channel-wise的归一化方法可以消除激活值特别小的问题,即获得更高但合适的发射频率,在短期内也能准确地传递信息
如图3所示,对于channel-norm,大多数的神经元能接近80%的发射率,而对于layer-norm,大多数的神经元的发射率在0到3.5%之间,这明显代表channel-norm避免了太小的激活值使得更多神经发射频率更高且合适
另外从图4能够看出,channel-norm在大多数的channel上能产生更高的发射频率,特别在channel 2
图5则随机采样了20个神经元,记录其脉冲活动,使用channel-norm使得大多数神经元可以更有规律地发射脉冲
从上面的分析能够看出,channle-norm可以避免太小的归一化激活值,从而保持较高的脉冲发射频率,使得神经元可以在短期内准确地传递信息,是深度SNN在解决更高级的机器学习问题的一种可行解决方案
ReLU是最经常使用的激活函数,保留正值而去掉全部的负值,目前的DNN-to-SNN方法都专一于IF神经元与ReLU间的转换,忽略了激活函数中的负值,而在Tiny-YOLO中,负值激活占了51%。leaky-ReLU是目前最经常使用的激活,经过leakage项来保留负值$f(x)=\alpha x$,$\alpha$通常为0.01,但目前尚未准确且高效的SNN实现方法。此前有研究提出负临界电压(-1),使得能够存在正负激活,而后在这基础乘以$\alpha$来转换leaky-ReLU,但这违背了生物学(脉冲是离散信号),而在神经芯片上也需额外的模块进行浮点运算
论文提出阈值不平衡的有符号神经元(IBT),在负值区域使用临界电压$V_{th,neg}=-\frac{V_{th}}{\alpha}$,不只能够传递正负激活值,保持离散型,还能够高效和准确地仿照leaky-ReLU的leakage项
如图6所示,假设$V_{th,pos}=1V$,在$\alpha=0.1$时,$V_{th,neg}=-10V$,膜电压须要积累多10倍来发射负激活,相似于leaky-ReLU
实验的目的是无损地将Tiny-YOLO的转移为SNN,结果如图7所示,使用channel-norm和IBT能有效地提高性能,且使用的timestep更少
论文尝试了不一样的解码方式,分别为膜电压$V_{mem}$和脉冲数$V_{mem}/V_{th}$,因为脉冲数的余数要舍弃,这会带来偏差和信息损失,因此基于膜电压进行解压会更准确
DNN主要使用相乘累积(multiply-accumulate , MAC)操做,而SNN则主要是累积操做(accumulate, AC),由于脉冲是二值的(1或-1),当接受到脉冲时,不用实时乘权重就能够知道结果。32-bit浮点型MAC和AC分别须要3.6pJ和0.9pJ,而32-bit整数型MAC和AC分别为3.2pJ和0.1pJ。如图9所示,无论使用哪一种归一化方法,Spiking-YOLO的计算耗能仅为Tiny-YOLO的1/2000倍,能源利用十分高效
论文在实际设备上对比了Spiking-YOLO(TrueNorth chip)和Tiny-YOLO(Titan V100),由于channel-norm的发射率较高且合适,因此使用了更少的timestep,能源消耗最少
论文提出Spiking-YOLO,是脉冲神经网络在目标检测领域的首次成功尝试,实现了与卷积神经网络至关的性能,而能源消耗极低。论文内容新颖,比较前沿,推荐给你们阅读
若是本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】