首先本文是读完
如何看待第三代神经网络SNN?详解脉冲神经网络的架构原理、数据集和训练方法 原创-CSDN博客
一文通俗入门·脉冲神经网络(SNN)·第三代神经网络-CSDN博客
两篇文章的总结,文章仅用于学习。
本文主要讨论STDP和STBP方法。
我们都知道,SNN网络由于其复杂的动力学和脉冲的不可微性质导致训练困难,于是有两种方法解决,
1、STDP(Spike-Timing-Dependent Plasticity,脉冲时间依赖可塑性)是一种基于神经元之间的相对脉冲发放时间来调整突触权重的无监督学习规则。这种学习方式不需要标签数据,而是通过神经元的活动本身来指导学习过程。
2、STBP是一种直接训练SNN的方法,它能够同时利用空间域和时间域的信息进行训练,它通过引入梯度下降训练,可以有效地优化网络权重,提高学习性能。STBP需要解决脉冲活动的不可微分问题,通常通过引入近似导数的方法来实现。
1、脉冲神经网络简介
脉冲神经网络(SNN,Spiking Neural Network)是一种受生物神经系统启发的计算模型,它与传统的人工神经网络(ANN)在信息处理方式上存在显著差异。以下是SNN网络的一些基本特点:
-
生物可解释性:SNN模仿了生物神经元的工作机制,包括脉冲发放、突触权重变化等,因此在神经科学和认知科学领域具有较高的生物可解释性。
-
脉冲编码:在SNN中,信息通过神经元的脉冲(或称为尖峰)序列来编码和传递,而不是像ANN那样通过连续的激活值。
-
时间动态:SNN能够处理时间动态信息,即网络的输出不仅取决于当前的输入,还取决于输入的时间历史。
-
事件驱动:SNN是事件驱动的,这意味着它们对输入信号的变化做出反应,而不是在每个时间步长都进行计算,这使得SNN在处理动态视觉传感器数据等方面表现出色。
-
稀疏激活:SNN中的神经元通常不会同时激活,这种稀疏性有助于提高计算效率和降低能耗。
-
突触可塑性:SNN中的突触权重可以根据学习规则(如STDP)动态变化,这使得网络能够通过突触权重的调整来学习输入数据的统计特性。
-
多样化的神经元模型:SNN中可以使用多种神经元模型,如Leaky Integrate-and-Fire (LIF) 模型、Izhikevich模型等,以适应不同的生物学特性和计算需求。
-
学习算法:SNN的训练可以使用不同的学习算法,包括无监督学习(如基于STDP的规则)、间接监督学习(如先训练ANN再转换为SNN)和直接监督学习(如STBP算法)。
-
硬件兼容性:SNN的脉冲特性使其非常适合在神经形态硬件上实现,这些硬件可以高效地执行SNN模型,有望在能效和速度上超越传统计算平台。
-
应用领域:SNN在多个领域都有潜在的应用,包括图像和语音识别、机器人控制、生物信号处理、以及需要处理时间序列数据的场景。
SNN的研究和应用正在快速发展,它们提供了一种与传统ANN不同的视角,以理解和模拟智能信息处理机制。
然而我们的大脑在绝对识别准确性方面,通常比现有的人工智能机器表现得差。这反映了我们需要更全面和公平的衡量标准来评估和模拟生物大脑工作方式的 SNN。我们需要考虑 SNN 网络的 Efficiency,而不仅仅是 Accuracy。评价一个 SNN 时要从多个角度考量,比如:application accuracy,memory cost, compute cost 。
在以 ANN 主导的评价指标和任务中,相同大小的 SNN 无法打败 ANN。但是在以 SNN 主导的评价指标和任务中,SNN 的表现会更好。
2. LIF模型的两种数学模型
从这里我们可以看出,ANN处理的是连续的数据,而SNN处理的是离散的数据。
2.1 第一种LIF模型
脉冲神经元电位动力学的数学模型最常用的是漏电积分放电模型(leaky integrate-and-fire ( LIF )),这个模型工作过程与生物神经元充电、漏电、放电过程类似。下面详细讨论LIF模型。
我们知道,每个脉冲神经元内部有电压v,当没有接收到任何脉冲输入时,电压v会随着时间指数稳定到平衡电压,这个过程用LIF模型描述为:
这是一个一阶线性非齐次微分方程,求解后得到
其中,控制变化到静息电位的速率,并且与速率成反比。 初始时t=0时刻,v=a-c,其中c取恰当的值就可以使a-c等于脉冲神经元初始时刻电压,当t为无穷时,v=a,该方程控制了电压v随时间指数稳定到平衡电压a。
上面是连续电压v(t)的变化方程,然而计算机只能模拟离散过程,取离散时间间隔为dt:
故微分方程的离散形式为:
当某个时刻神经元接收到一个脉冲输入时,要累积该脉冲到电压中,最简单的方式是让当前的电压加上某个值,通常这个值跟连接该输入脉冲的突触权重有关,电压更新过程为:
神经元内部有一个发放阈值,当神经元内部电压大于发放阈值时,神经元会发送一个电压,并回到静息电位。
前向传播
我们来研究这个前向传播的案例,牢记我们的离散公式,并且x是输入
v(0)=0
此时神经元释放一次脉冲,释放后回到静息电压,
2.2 第二种LIF模型
在有些文章中我们可能看到这样的LIF公式,与第一种相比,这里将电压v换成了u,静息电压a换成了 ,是重置电位。但是注意,在第一种中我们没有将外部输入加进公式,我们是先推导出LIF公式,然后将外部输入加进来,让外部输入也遵从LIF的衰减规则。简单的说就是我们也是通过LIF模型来模拟每个时刻的输入是如何随时间变化的。
而在第二种模型中,我们可以看到多了
wj是第j个神经元的权重,是神经元j发射脉冲的时刻的集合, 意思是找出所有发射脉冲的时刻,K(·)是代表延时效应的核函数,简单的说,就是在第二种LIF模型中使用核函数来模拟每个时刻的输入随时间的变化,而不是通过LIF模型。
将输入看做常数,求解这个一阶线性非齐次微分方程的结果是
3.SNN的三种学习方法
3.1 ANN转SNN
最简单的方法是把训练好的ANN换成SNN
1.训练ANN:首先,我们使用常规的反向传播算法训练一个ANN
2.网络结构的调整:为了使ANN能够转换为SNN,我们需要对网络结构进行一些调整。例如,我们可能需要去除偏置项,使用dropout,以及将池化层改为平均池化
3.权重归一化:在将ANN转换为SNN之前,我们需要对权重进行归一化。这是因为SNN中的神经元只能发出脉冲,而不能像ANN中的神经元那样输出连续值。因此,我们需要将权重归一化,以便在SNN中可以通过脉冲的频率来表示权重的大小。
4.阈值的调整:在SNN中,神经元的阈值决定了神经元何时发出脉冲。因此,我们需要根据ANN中的权重来调整SNN中的阈值。
5.负值的处理:由于SNN中的神经元只能发出正的脉冲,因此我们需要找到一种方法来处理ANN中的负值。一种可能的方法是使用抑制性神经元,建立一个双脉冲发放机制的网络。
6.转换为SNN:最后,我们将训练好的ANN转换为SNN。这一步通常包括将ANN中的激活函数替换为脉冲函数,以及将ANN中的权重和阈值映射到SNN中。
3.2 STDP
STDP,全称为脉冲时序依赖可塑性(Spike-Timing-Dependent Plasticity),是一种调整大脑中神经连结强度的生理过程。具体来说,是根据一个特定神经元的动作电位输入与输出的相对时间,去调整连接的强度。
在脉冲时序依赖可塑性(STDP)中,如果神经元的某个输入信号总是发生在整个神经元输出信号前的瞬间,该输入信号会变得更强效。而如果某个输入信号总是发生在神经元输出信号后的瞬间,该输入信号则会变得更弱效,所以得名"脉冲冲时序依赖可塑性"。
这种可塑性被认为是学习、记忆、实时计算等功能的核心的神经基础。例如在学习同一知识点时,第二次学习比第一次更轻松,因为这个知识点对应的突触的连接强度增强,所谓“熟能生巧“也是这个道理。
STDP是由Henry Markram提出的,它根据神经元学习的先后顺序,调整神经元之间连接的强弱。这种机制部分解释了神经系统中的活性依赖发育,具体来讲如长期增强作用(LTP)和长期抑制作用(LTD)。
省流的说,就是
假如突触前神经元是j,突触后神经元是i,兴奋由j传到i。
如果j在i之前兴奋,就说明是j的兴奋导致了i的兴奋,那么就增加他们之间的权重。
如果i在j之前兴奋,就说明i的兴奋和j没多大关系,就减小他们之间的权重。
这个很类似于我们人类的学习方法,就是用进废退,用的多了就会增强,长时间不用就会遗忘。
那么如何调整权重呢?增加权重,要加多少。减少权重,又要减多少呢?如果建一个表,存储每个神经元产生兴奋的话是不现实的,因为人体内的神经元不可能记住之前的所有尖峰时间,同时这样也很占用内存,效率低下。
事实证明,有一种更有效、生理上更合理的方法可以达到同样的效果,该方法可以在突触前脉冲发放或突触后脉冲发放就立刻更新权重。
这里我们也用LIF模型来对权重进行修改,这样可以将时间的因素也加进去,假如突触后神经元没有兴奋,那么100ms前发生的突触前兴奋对权重的影响肯定要比10ms前发生的突触前兴奋对权重的影响更大。
我们定义和,分别对应上图中的黑色曲线和橙色曲线,他们的变化满足LIF模型。
我们再定义两个变量和,分别是非常小的正常数和负常数,并且是不会改变的。
如果突触前神经元兴奋,那么就,同时
如果突触后神经元兴奋,那么就,同时
要注意,这里的与神经元的膜电位无关,只用于调整权重,他们可以看做一个特殊的LIF模型,这个LIF模型中,静息电位是0。
同时要么就是加,要么就是在向静息电位0恢复,所以一定大于0。同理一定小于零。
所以当突触前神经元兴奋时,,只要还没有衰减到0,就会使权重减小。同理当突触后神经元兴奋也一样。
这样,我们就能对权重进行合理的修改,并且这还是一个无监督的学习方法,不需要损失函数和反向传播。
3.3 STBP
基于前向模型是LIF模型
LIF的迭代版本表示如下,
这里o代表脉冲输出
t代表time step
n代表层
是膜电位的延迟效应,也就是我们第一种LIF模型中的
是一个阶跃函数,也就是膜电位是否输出
这里为了方便理解,我们将静息电位和重置电位设为0,积分时间窗口设为1,代表延时效应的核函数设为。因为每个时间步长只考虑一个单位时间内的输入脉冲,这样输入脉冲的影响可以直接加在膜电位上,而不需要权重进行缩放。
那么我们来理解一下这个公式,首先
这一项的意思是这一层的神经元如果在上一个时间步发出了脉冲(=0),那么就将膜电位变为重置电位(0)。如果没有发出脉冲(=1),则将上一个时间步的膜电位根据LIF模型缩小。
现在已经算出了历史遗留电位,再让膜电位累积上上一层神经元的输出(),就得到新时刻的膜电位。
于是给定迭代 LIF 模型,梯度沿着时间和空间维度传播,LIF 模型的迭代版本的参数更新可以按照如下方式进行:
由于从膜电位u到输出o是一个阶跃函数(),它是不可导的,为了解决这个问题,可以用辅助函数计算输出o到膜电位u的导数值。比如下面这个函数:
式中,参数 a 决定了梯度宽度。
L 是损失函数,比如可以是 MSE Loss:
这样SNN网络就可以进行反向传播了。
4. 编码及数据集任务
4.1 泊松脉冲编码
由于脉冲神经网络接收的是脉冲信号,所以需要对初始输入数据进行脉冲编码,其中输入数据脉冲编码一个比较常用的方式是泊松脉冲编码。
泊松脉冲编码首先需要设置脉冲速率ρ0 ,ρ0 可以是常数,也可以是时间函数。编码过程可描述为:取时间间隔为Δt ,则每个时间间隔脉冲发放的概率为pF=ρ0*Δt ,电脑在每个时间间隔生成一个(0,1)范围内均匀分布的随机数,随机数小于ρ0*Δt 则在该时间间隔内产生一个脉冲。
泊松脉冲编码可以这样应用:把输入时间序列值看成脉冲速率ρ0 ,如t1时刻输入为a, t2时刻输入为b,t3时刻输入为c,若t1时刻0-1随机数大于或等于a*Δt ,则t1时刻神经元不发放脉冲,t2时刻0-1随机数小于b*Δt ,则t2时刻神经元发放脉冲,t3时刻0-1随机数大于或等于c*Δt ,则t3时刻神经元不发放脉冲,所以a,b,c编码后的脉冲序列为无脉冲,脉冲,无脉冲。
4.2 脉冲神经网络数据集
像 MNIST,CIFAR10 这类基于帧的静态图像,广泛应用于 ANN 中,我们称之为 ANN-oriented dataset,这类数据集的维度一般是[H,W,C]
图中的后2行 N-MNIST 和 DVS-CIFAR10 叫做 SNN-oriented dataset。这里的 DVS 叫做 dynamic vision sensor(动态视觉传感器),代表使用了动态视觉传感器扫描每张 images 得到的 spike 数据。它除了具有与 ANN-oriented dataset 相似的空间信息外,还包含更多的动态时间信息,而且尖峰事件与神经网络中的信号格式自然兼容,因此我们称之为 SNN-oriented dataset。
DVS 产生两个通道的脉冲事件,命名为 On 和Off 事件 (分别如图2中红色和蓝色所示)。因此,DVS 将每个图像转换为[row,column,2,T] 的脉冲模式。
一般来说,ANN 接收帧为基础的图像,而 SNN 接收事件驱动的脉冲信号。因此,有时需要将相同的数据转换为另一个域中的不同形式来处理。本文以视觉识别任务为例,主要介绍了四种信号转换方法,如下图所示。
Image to spike pattern
由图片信号转化为脉冲信号的方法比较直观。
一种方法是:如图 (a) 所示。 在每一个时间步骤,采样的原始像素强度 (pixel intensity) 到一个二进制值 (通常归一化为[0,1]),其中的这个强度值就等于发射一个脉冲的概率。这个采样遵循一个特定的概率分布,例如伯努利分布或泊松分布。
例如,图(a) 中的 i1 神经元,对应于标准化强度为 0.8 的 intensity,产生一个二进制尖峰序列,跟随着伯努利分布 B ( 0.8 , T )。这里 T 是取样的时间窗口。
再例如,图(a) 中的 i2 神经元,对应于标准化强度为 0.1 的 intensity,产生一个二进制尖峰序列,跟随着伯努利分布 B ( 0.1 , T ) 。这里 T 是取样的时间窗口。
这种方法在取样的时间窗口 T 比较短时有一个较大的精度损失。
另一种方法是: 如图 (b) 所示。使用一个编码器来产生全局的脉冲信号。这个编码器的每个神经元接受图片多个像素的强度值intensity 信号作为输入, 而产生脉冲作为输出。 虽然编码层是 ANN-SNN 混合层,而不是像网络中的其他层那样的完整 SNN 层,但它的权重是可训练的,因为我们的训练方法也是 BP 兼容的。由于神经元的数量可以灵活定制,参数也可以调整,因此它可以适应整体最佳化问题,从而获得更高的精确度。
Spike pattern to image
由脉冲信号转化为图片信号的输出主要有2种:
binary image with 0/1 pixels。
intensity image with real-valued pixels。
如图(c) 所示,代表把脉冲pattern转化为二值图片。2D 脉冲 pattern 可以直接看做一个二值图像 (每个脉冲 Event 代表像素强度为1,否则像素强度为0)。 为了转换为强度图像 (Intensity image),需要在一个时间窗 T 内随时间对脉冲时间的累积。
如图(d)所示,代表把脉冲pattern转化为强度图片。描述了100毫秒内脉冲事件的累积过程,累积脉冲数将被归一化为具有适当强度值的像素。由于 DVS 的相对运动和固有噪声,使得图像常常模糊,边缘特征模糊。这种转换只允许一个强大的假设,每个脉冲位置不应该移动,否则将严重损害生成的图像质量。
5. 总结
文章写到这里就结束了,希望可以一直坚持下去。在此最要感谢的就是两位作者大佬,他们的文章为我学习SNN之路扫清了道路。同时文章仅供学习。
首先我们在第一章中简短的介绍了SNN网络的特点,然后在第二章中直入正题,分别介绍了两种LIF数学模型,这两种模型又分别对应我们后面说的STDP和STBP学习方法,并且在第一个LIF离散模型中我们简要的说了一个前向传播的例子,要牢记第一个LIF模型的离散公式。
第二个LIF模型的数学公式其实与第一个相差无几,要主要他使用一个代表延时效应的核函数来模拟每个时刻的输入随时间的变化。
第三章是本文的重中之重,我们详细讲了SNN网络的三种学习方法,这也是当初我最困惑的地方,我在两位作者的肩膀上做了一些梳理。5.1的ANN转SNN就没什么可细说的了,然后是STDP和STBP方法,其中我觉得STDP是精髓中的精髓,因为SNN相较于ANN最大的突破就是它更受生物神经系统启发。STDP我做了详细的描述,虽然文字不多,但我相信应该通俗易懂。而STBP应该更好理解一些,因为他与ANN的BP算法没什么区别,需要注意的就是他用了一个辅助函数来计算输出o到膜电位u的导数值。
说完了几个大头,第四章的内容就显得非常容易理解了,包括泊松编码和ANN-oriented dataset,SNN-oriented dataset。
本篇作为因为一些个人原因0科研一年后的第一篇文章,祝我日后在SNN的研究道路上顺利!谢谢大家🙏!