唐华锦老师的这篇论文"Spiking Deep Residual
Network",挂在arxiv上很久了,也不知道最后发到了哪里,主要的思想还是借助weight nornalization进行CNN-SNN的转换,发射率编码,近似ReLU**,作为一个结构上的探索,还是不错的。
1. 摘要
本文提供一种有效的把ResNet转成脉冲神经网络(SNN)的方法。主要提出两个方法。
一,针对残差结构的归一化,把连续**函数值转成发射频率(firerate)。
二,分层的误差补偿。
近些年,SNN由于它的生物可塑性吸引了大众注意力。理论上,SNN具有与ANN一样的计算能力,而且在功耗方面要比ANN更加节能。但是,在目前看来,训练一个很深的SNN依旧存在很大困难。本篇文章,提出了一个方法来构造ResNet的脉冲版本。我们把训练好的ResNet网络转化为脉冲神经元组成的SpikingResNet。为了解决转化过程中的问题,文章提出了shotcut归一化机制来缩减连续的**值,使之近似匹配SNN中的脉冲发放率;还提出一种逐层误差补偿方法来减少由离散导致的误差。在MNIST, CIFAR-10, 和CIFAR-100上做了实验,是目前SNN中性能最好的。
2.转换概述
方法一 shotcut标准化
针对残差结构的归一化,把连续**函数值转成发射频率(firerate)。
ResNet的基本block如下图
把ReLU123后的最大值(max1, max2, max3)找到,再通过下式进行归一化,可以算出每个神经的发射频率。
方法二 分层的误差补偿(采样误差的惩罚)
随着网络加深,抽样误差逐渐累积,减少了发射频率,导致表现变差.
在从ANN转到SNN过程中,每一层都要接收上一层采样误差的加权和,并且随着深度增加而不断累积。这种情况是由于抽样误差的离散性和传输性造成的。网络越深,累积的采样误差会减少脉冲发放率从而降低SNN性能。为了解决这个问题,文章给每一层适当的增加了权重来减小采样误差,引入惩罚因子(大于1)在采样过程中,增加脉冲发放率。
如下图。
为了解决这个问题,作者假设可以通过稍微放大每层的权重来减少抽样误差。 然后,我们将补偿因子λ应用于网络的每一层,以通过稍微放大权重来减少抽样误差。 在(1,τ_max)的区域内搜索补偿因子λ,其中τ_max是最后一层处最大发射频率的倒数。
如图,展示了转换ResNet到SpikingResNet的机制。通过假定Relu单元可以近似脉冲神经元的发放率,文章用IF神经元代替Relu。输入方式是图片输入,第一层卷积之后根据是否大于阈值判断输出脉冲。训好的权重先进行归一化,再根据BN缩减(论文中的2式)使用。
3.实验结果
在MNIST,CIFAR-10,和CIFAR100达到SNN最优。
有和没有针对残差结构shortcut归一化的对比:
有残差和没有残差的脉冲CNN对比:
误差补偿的效果:
文章的实验结果证明了shoucut标准化还有惩罚采样均提升了性能。网络越深,惩罚采样提升的性能越高。
最后作者认为,残差网是和生物神经网络相关的,所以残差网本身就是具有优势的。
资料参考:
https://blog.csdn.net/yingpeng_zhong/article/details/80300709
https://blog.csdn.net/Kerrwy/article/details/80330802