SNN_文献阅读_Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition
两种方法将CNN转化成为SNN:
- 直接训练一个类似CNN架构的SNN「虽然有类似于STDP等无监督方法,但是处于起步状态」
- 训练初始的CNN,将训练得到的权重直接应用于类似于CNN架构的SNN「将CNN转化为SNN的时候,训练的准确性可能无法保证」
准确性损失的原因:
- CNN中的负值在SNN中无法准确表示,原因是:a.sigmoid函数tanh()的输出值介于-1.0和1.0之间;b.在每个卷积层中,每个输出特征映射的值都是输入加上偏差的加权和,权重和偏差都可能为负,导致输出值为负;c.预处理的输出值(例如颜色变换和空间标准化)可能会产生负值。「虽然抑制性神经元可以表示负值,但是需要增加很多的神经元,会增加计算成本。」
- 不同于CNN,SNN不能表示误差。每个卷积层中的误差可能是正的也可能是负的,在SNN中不能表示。
- 最大池化需要两层SNN。在CNN中,空间最大池化被限制在输入中一个小的图像邻域上获取最大输出值,在SNN中需要两层神经网络,第一层用来侧向抑制,第二层用来在小图像区域上进行聚集,这种方法需要更多的神经元,并且可能损失复杂性。
改进:
- 使所有层的输出值变为正值。a.在预处理后面加一个abs()函数,使得所有的值变为正值;b.将sigmoid函数从tanh()改成HalfRect(x),定义为,有很多优点,比如在训练的时候收敛的快,而且在的时候是线性的,将转化的误差降到了最低。
- 消除所有卷积层和全联接层的误差。在每次训练迭代后将所有的误差值置0。
- 不用空间最大池化,而用空间线性子采样。空间线性子采样采用一个单一形式的权重核,将所有像素添加到一个小图像邻域上。空间线性子采样函数可以很容易地转换为脉冲域。
采用上述三条改进,可以将CNN转化为定制CNN。
integrate-and-fire neuron model模型进行更新:
是常数,为泄漏参数;是连接的神经元的所有突触在时间的总输入。当神经元电压超过阈值的时候,神经元会激发一个脉冲,并且其膜电位置0。膜电位不能低于静止状态。
第层的神经元可以定义为:
其中是来自前一层的输入脉冲(0或者1),是大小为77的卷积核权重,由同一映射中的神经元共享。
ANN2SNN不仅局限于使用integrate-and-fire neuronmodel模型,还可以使用其他模型进行训练。
脉冲生成层的定义:是输入到脉冲生成层的图像匹配。在时间内,如果满足,第层图像匹配的神经元发射一个脉冲。其中,是之间的随机数生成器,是一个常数,用来缩放生成脉冲的频率。
实验结果:
Neovision2 Tower Dataset:
CIFAR-10 Dataset:
硬件:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人