ANN Converse to SNN|(1) 开篇之作
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition
作者:Yongqiang Cao, Yang Chen,Deepak Khosla
期刊:International Journal of Computer Vision
发表时间:2015
原文链接:paper
Conversion方法的开山之作,(在此之前也有类似思想的几个工作,后续会补充),训练SNN的困难很大,诸如STDP等生物可解释性方法在无监督上尚且效果不佳,在监督学习中,如何引入监督信号也是一大困难。作者想到能否定制一个与SNN结构相同的ANN结构,使用反向传播算法训练定制好的ANN,然后将得到的权重直接映射到SNN中去,作者使用的网络也较简单。
主要工作
作者指出,转换的方法遇到的一大困难是不可接受的精度损失,可能的原因有三个:
- 一是CNN网络中的负值很难在SNN中准确的表达,负值的来源主要有三个:
- tanh**函数的输出在-1和1之间
- 每个卷积层输出的特征图来源于输入的加权和加上偏置,当权重和偏置同时为负时会导致输出为负(关于加权输出为负的情况有很多,作者这里只列出了一种显而易见的情况)
- 对输入的预处理可能产生负值
- SNN很难表示偏置,不管bias是正还是负,SNN中没有这个概念
- Maxpooling在SNN中需要使用两层来表示,增加复杂性的同时会造成精度下降
对于网络中的负值,作者指出,一种可能的方法是使用抑制性神经元,建立一个双脉冲发放机制的网络,但是会double神经元的数量并使得SNN连接更加复杂,为避免上述困难,作者提出CNN的网络要进行如下处理:
- 首先是确保网络各层输出为正值
- 对输入的预处理结果使用abs函数
- 将tanh**函数改用ReLU**函数(这在现在已经不再是问题)
- 去除卷积和全连接层的偏置项
- 使用均值池化(作者说的是Spatial Linear Subsampling)而不是空间最大池化,stride要无重叠
使用LIF神经元模型
对于SNN中的LIF(经过实验,作者后续指出使用IF神经元更好)的阈值,作者将其作为了超参数进行设置,后续许多工作探讨了阈值选择的重要性。
SNN的对预处理的输入进行泊松编码,设像素强度为,其中ij表示空间位置,k表示通道位置,该像素在时刻t对应的输入为
其中用来控制最大脉冲发放频率,若像素强度为0-1,当时,最大脉冲发放频率为1KHz;若,最大像素1仅有的概率发放脉冲;如果则会使部分像素强度没有区别,故这里的泊松编码的最大脉冲发放频率为1KHz,作者此处设置。
实验
作者在Tower Dasaset和CIFAR-10上进行了验证。
在cifar-10实验之后,作者指出在复杂网络和任务上通常需要更多的仿真时间来达到与ANN相同的性能,同时指出三点改进
-
使用IF神经元模型
-
使用软重置方法(作者并未提出这种说法)
-
第一个卷积层的阈值要进行改动(后续工作有分析为什么改动)
基于IF神经元和软重置的有效行会在后续的文章中进行说明,基于阈值改动的原因在max-norm的博客中进行说明。
总结
作为第一个提出的转换的方法,其中像泊松编码、IF模型(包括负值截断)、软重置、均值池化、阈值调整等技术一直沿用到现在,虽然没有明确指出ANN到SNN映射的理论,但已经注意到负值对整个转换过程的影响。