脉冲神经网络Precise-Spike-Driven (PSD) Synaptic Plasticity学习笔记

脉冲神经网络Precise-Spike-Driven (PSD) Synaptic Plasticity学习笔记


       PSD算法设计的目的是为处理和记忆时空相关的输入。PSD从传统的Widrow-Hoff规则衍生,作为监督学习规则,利用实际输出脉冲和目标输出脉冲之间的误差修改神经元连接权值:正误差(positive errors)会导致长时程增强,而负误差(negative errors)会导致长时程的抑制。PSD的优势在于在计算上效率较高并且是符合生物学原理的,当编码方式正确时它可以取得很好的识别效果。..


一、 选取脉冲神经元模型

       脉冲神经元模型有很多:intergrate-and-fire(IF)模型,resonate-and-fire模型,HH模型,Izhikevich(IM)模型。不同的脉冲神经元模型用不同的方程解释导致Vm(神经元膜电位)变化的因素。考虑到使用模型的计算的效率和简单性,采用leaky intergrate-and-fire模型(LIF)。


       Vm是膜电位,E是复位电压,Ins是环境噪声电流,Isyn是突出输入电流,Rm是膜电阻。当Vm超过阈值电压(常量)Vthr= E+18mV,该神经元就会放出脉冲(fire),同时电压回归Vreset(复位电压)=0mV,并进入不应期。

对于后神经突触连接的神经元,它在t时间所获取的输入电流大小为:


       其中W代表权重,含义是第i个输入神经元的功效,Ipsc则是不加权重的第i个输入神经元的突触后的电流大小(即电流经过突触之后的大小,也就是实际输入下一层神经元的电流大小):


       其中t^j是第j个脉冲从第i个输入神经元发送的时间;也就是说,为计算第i个神经元在t时间对下一层连接神经元实际的输出电流大小(不加权重时),结合该输入神经元i所有的发出脉冲的时间t^j进行计算,每次计算的结果就是t^j时间发出的脉冲对t时间电流大小的实际贡献,最后对该结果求和,就得到t时间突触后电流实际大小。

H是海维赛德阶跃函数,具体表现为:H(x)=1,当x>0;H(x)=0,当x<0;H(x)=0到1之间的一个数,当x=0。即当 t < t^j 时电流大小为0,也就符合了实际情况(即在一个时间窗口内,当前时间t比实际发出电流t^j时间要早,则t^j对该时间t的电流大小无法做出贡献)。

        公式中K是标准化的核函数,计算方式为:


        V0的作用是使K函数结果标准化(保证K结果在0~1之间)。ts 和tf分别是慢和快衰减系数,和函数图形相关,其比例被固定在ts  / tf = 4。


        Fig1. 上图中每个输入神经元与一个突触后神经元连接;红线描绘了t时间第i个输入神经元发出的电流大小Isyn,突触后神经元接收到的PSCs是所有输入神经元发出电流的加权和,它导致了该神经元膜电位的变化。


二、 PSD学习规则

       已经有了脉冲神经网络的模型,下面需要应用PSD规则训练模型。PSD从传统的算法中使用WH规则,由于脉冲神经元的输入和输出信号是由脉冲时间描述的,因此不能直接使用WH规则。

定义一个脉冲序列:


       F代表在第f个发出的脉冲,该序列对一个Dirac函数求和(仅x=0时输出1,其他情况输出0),因此s(t)就计算了t时间是否有脉冲发出。

        以此定义输入、期望输出、实际输出时间序列:


        为了解决阶跃函数带来的数学问题,使用卷积的方法,将输入脉冲序列卷积后可得:


        输入序列被乘以一个卷积核,原先的WH规则可以被描述为:


        现在将yd用Sd(t)代替,yo用So(t)代替,xi用Ipsc代替,于是WH规则可演化为:


        也就是说,权值的更新和学习率、期望输出和实际输出之间的差距以及该权值所在突出后电流大小有关:


        Fig2 在改变的WH规则作用下,在正信号下(Sd = 1 &So = 0)w更新时增大,即刺激了该脉冲神经元在t下的输出;在负信号下(Sd = 0 & So = 1)w更新时减小,即抑制该脉冲神经元在t下的输出。

       最终Wi的更新是对所有t时间下Wi(t)更新值的积分:


       另外,由于K(t)函数不连续的特征,PSD监督规则下同样无法拓展模型到多层模型。

已标记关键词 清除标记
相关推荐
NNBP 1.0用法说明 本程序是BP算法的演示程序, 其中的Levenberg-Marquardt算法具有实用价值. 程序主界面如下: 一、网络训练 程序默认状态是样本训练状态,现将样本训练状态下的如何训练网络进行说明: 1. 系统精度: 定义系统目标精度,根据需要定义网络训练误差精度.误差公式是对训练出网络的输出层节点和实际的网络输出结果求平方差的和. 2. 最大训练次数: 默认为10000次,根据需要调整,如果到达最大训练次数网络还未能达到目标精度,程序退出. 3. 步长: 默认为0.01,由于采用变步长算法,一般不需人工设置. 4. 输入层数目: 人工神经网络的输入层神经元的节点数目. 5. 隐含层数目: 人工神经网络的隐含层神经元的节点数目. 6. 输出层数目: 人工神经网络的输出层神经元的节点数目. 7. 训练算法: 强烈建议选取Levenberg-Marquardt算法,该算法经过测试比较稳定. 8. 激活函数: 不同的网络激活函数表现的性能不同,可根据实际情况选择. 9. 样本数据的处理: 由于程序没有实现归一化功能, 因此用来训练的样本数据首先要归一化后才能进行训练. 其中: 数据输入: 就是选择用来训练的样本的文件,文件格式为每个参与训练网络的样本数据(包括输入和输出)占用一行,数据之间用空格隔开. 存储网络: 就是用来存放最终训练成功的网络权值等信息的文件,在仿真时调用用. 保存结果: 网络训练的最终结果,副产品,可丢弃,用来查看网络训练的精度. 10. 训练 点击该按钮用来训练网络。 二、网络仿真 首先要点击按钮 切换到数据仿真状态. 界面如图: 调入训练好的网络,然后选择用来仿真的数据(只包含输入层神经元的节点数目),点击仿真按钮即可。 调入网络: 选择已经训练好的网络文件,假设net_lm_sigmoid_16.txt文件是已经满足精度和泛化能力较好的网络文件,就调入该文件。 数据输入: 选择用来仿真的数据文件,该文件格式同前面介绍的用来训练网络的文件的格式,但需要去掉用网络来模拟的参数,只提供用来测试的网络输入层数据。 仿真结果: 用来保存对测试数据仿真后得到结果文件,即为所想要的数据。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页