那些年与SNN的爱恨情仇

脉冲神经网络

作为硕士阶段初次接触脉冲神经网络,特地进行记录~~
如今已经毕业,闲来无事,回顾一下之前所有的工作内容。
记得当初听说脉冲神经网络来自于2021年,那时候的SNN的资料还不全,并且有些名词还未统一,当初关于SNN的文章更是少之又少。如今,在此查阅相关资料已经出现很多资料,尽管与ANN那么庞大的资料库无法比。

背景介绍

脉冲神经网络(Spiking Neuron Networks, SNN),其主要灵感来自于大脑神经的运行方式。因此脉冲神经网络具有很高的生物相似性,被广大研究人员用于模拟生物神经网络。与现如今CNN相比,因为其生物相似性且内部数据的稀疏性而成为小众的研究方向。到目前为止,神经网络的进化之路,可以大致分为三个阶段:
1、第一代感知机(MLP):通过简单的输入输出层进行函数拟合,无法处理非线性问题。
2、第二代神经网络(ANN):将多层感知机进行连接,使其在理论上可以拟合任何函数。
3、第三代类脑智能:既SNN。
如图为ANN与SNN最大的区别。图左ANN内部数据为浮点连续值。而图右SNN内部数据为离散信号。
CNN与SNN区别
也正因为这个特点,有的文章中称SNN为脉冲驱动,有的则称为事件驱动。这个名词的含义在调研初期属实是捉摸不透。

本文主要通过通俗易懂的说法来进行个人理解,如有问题多包涵。
根据调研,本文将针对SNN的研究统分为两大类。第一类为SNN结合ANN的模型设计。第二类则是SNN模型设计。下图展示了大致的分类情况。
在这里插入图片描述

接下来也将从这几部分进行描述。

SNN结合ANN

在当前对于SNN的研究中,有一部分研究聚焦于将SNN与ANN相结合。从而保证ANN的高指标和SNN的数据离散化的特点。而在这方面又细分为两个流派,一种是ANN模型转换为SNN。另一种是ANN与SNN相结合的方式。

ANN to SNN

ANN to SNN 是一种通过对特定任务的ANN模型进行训练,将训练好的权重直接迁移至相似网络结构的SNN中,从而达到模型脉冲化的方法。在此过程中往往采用的SNN模型为经典的IF模型或者LIF模型(该部分很好搜索,此处就不赘述了)。

1、采用IF模型的SNN:通常在ANN直接使用Relu激活函数进行训练,对输入数据进行处理等技术,使得模型权重尽量适合于SNN。其中,Relu的转换公式如图:
z L ( t ) : = v t h r ( ∑ i = 1 M L − 1 W j 1 θ t L − 1 + b L ) \begin{equation} z^ {L} (t):= v_ {thr}(\sum _ {i=1}^ {M^{L-1}} W_ {j}^ {1} \theta _ {t}^ {L-1} + b^L) \end{equation} zL(t):=vthr(i=1ML1Wj1θtL1+bL)
其中,
V t h r ( x ) = { 1 i f x ⩾ θ 0 e l s e \begin{equation} V_ {thr} (x)= \begin{cases}1&ifx\geqslant\theta\\0&else\end{cases} \end{equation} Vthr(x)={10ifxθelse
2、采用LIF模型的SNN:这种情况下ANN模型中不需要采用Relu函数,而是通过推导一个与LIF模型中的响应方程尽量相似的激活函数,以此达到转换的目的。

此种转换方式过于复杂,且缺少通俗易懂的代码来辅助。所以较难理解。

ANN + SNN

ANN + SNN 相对于ANN to SNN 更好理解,由于其训练方式与传统ANN训练大致相似所以取得较多的研究。其大致流程是将ANN与SNN神经元进行融合,通过在ANN模型内部加入SNN来达到共赢的目的。可以通俗的理解为,ANN模型所传输的数据经过SNN转换为只有0和1的离散值。该方法抛弃了SNN时间累加机制,仅仅根据其转换为离散值的过程来进行改造ANN。并未充分利用数据的时间特征。(在此简单讲解一下 SNN 的基本机制。SNN 收到多次数据脉冲,会在上一时刻数据状态下进行累积,当累计达到一定阈值,则会产生下一阶段的数据脉冲。)
通过该公式将其转换为脉冲数据:
Y ( t ) = { 1 , i f i = t h r 0 , e l s e \begin{equation} Y\left( t\right) = \begin{cases} 1, &if\enspace i = thr \\ 0, &else \end{cases} \end{equation} Y(t)={1,0,ifi=threlse
而该方式势必会带来一个问题,即转换后的数据只有0和1,其在反向传播中不可微,如何进行梯度下降算法。而针对这一问题,则存在以下几种解决方法:
1、基于梯度下降算法
2、基于脉冲序列卷积算法
3、基于梯度代理算法
4、基于STDP算法

基于梯度下降算法

该算法中最为经典的为SpikeProp算法,通过对脉冲发放的时间进行误差分析,从而达到模型训练的目的。其Loss函数如图:
E = 1 2 ∑ i ∈ J 1 ( t j 3 − t j d ) 2 \begin{equation} E= \frac {1}{2} \sum _ {i\in J}^ {1} (t_ {j}^ {3}-t_ {j}^ {d})^ {2} \end{equation} E=21iJ1(tj3tjd)2
其中, t j a t_j ^a tja t j d t_j ^d tjd分别表示输出层神经元 j j j的实际脉冲发放时间和目标脉冲发放时间。

基于脉冲序列卷积算法

该算法通过引入核函数将最终的脉冲序列转换为连续函数进行分析。PSD学习规则便是其中的一种算法,PSD规则通过将脉冲数据和卷积核进行卷积,从而得到一个可导的连续值。从而使其能够进行梯度下降。

基于代理梯度算法

基于代理梯度算法主要是通过对反向传播过程中的计算公式进行拟合来使模型在反向传播过程中能正常进行梯度计算。
在这里插入图片描述
如图为反向传播过程中代理梯度的图像,通俗点讲即模型在正向传播中将数据转换为0和1,而在反向传播时对上图进行求导来代替正向传播时的梯度。其公式如下:
f ( x ) = 1 1 + e Q ( t h r e − x ) \begin{equation} f\left( x\right) =\dfrac{1}{1+e^{Q\left( thre-x\right) }} \end{equation} f(x)=1+eQ(threx)1
其中,thre 为设定阈值,Q 为预先设定的参数。当Q值越大,其函数越发接近正向传播时的函数。

基于STDP算法

之前介绍的算法都是有监督的算法,而基于STDP是一种无监督的算法,通过脉冲序列相关可塑性(Spike Timing Dependent Plasticity,STDP)来进行无监督的模型训练。具体内容网上很多,本文不做详细解释。

总结

大概介绍了SNN的内容,希望刚接触SNN的同学不再迷茫。同样的,希望这篇文章可以给大家点有用的东西,即使没有有用的东西也可以明白应该检索那些东西。

参考文献

[1] Chakraborty B , She X , Mukhopadhyay S . A Fully Spiking Hybrid Neural Network for Energy-Efficient Object Detection[J]. 2021.
[2] Hu S G, Qiao G C, Chen T P, et al. Quantized STDP-based online-learning spiking neural network[J]. Neural Computing and Applications, 2021, 33(19): 12317-12332.
[3] Hu Y, Tang H, Pan G. Spiking deep residual networks[J]. IEEE Transactions on Neural Networks and Learning Systems, 2021.
[4] Neftci E O, Mostafa H, Zenke F. Surrogate gradient learning in spiking neural networks: Bringing the power of gradient-based optimization to spiking neural networks[J]. IEEE Signal Processing Magazine, 2019, 36(6): 51-63.

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值