一种自主学习脉冲神经网络权值量化方法与流程

文档序号:17444179发布日期:2019-04-17 05:16阅读:1371来源:国知局
一种自主学习脉冲神经网络权值量化方法与流程

本发明属于神经网络技术领域,涉及一种自主学习脉冲神经网络权值量化方法。



背景技术:

脉冲神经网络(spikingneuralnetwork,snn)被称为第三代神经网络,旨在弥补神经科学和机器学习之间的差距,它使用最拟合生物神经元机制的模型来进行计算。脉冲神经网络与目前流行的神经网络和机器学习方法有着根本上的不同。snn使用脉冲(一种发生在时间点上的离散事件)而非常见的连续值。每个峰值由代表生物过程的微分方程表示出来,其中最重要的是神经元的膜电位。本质上,一旦神经元达到了某一电位,脉冲就会出现,随后达到电位的神经元会被重置。对此,最常见的模型是整合-发放脉冲模型。此外,snn通常是稀疏连接的,并会利用特殊的网络拓扑。在用脉冲神经网络处理图片的过程中,由于每个神经元代表一张图片的一个像素点,每一层神经元网络将会有很多神经元,层与层之间的全连接将会产生大量的权值,巨大的权值参数量会占用大量的存储空间,降低运算速度,增大运算功耗。



技术实现要素:

针对上述问题,本发明提出了一种自主学习脉冲神经网络权值量化方法。

本发明的技术方案为:

一种自主学习脉冲神经网络权值量化方法,所述脉冲神经网络包括输入层、兴奋层和抑制层,其中输入层和兴奋层之间使用正向全连接突触,具有延迟,而且权值是可以训练的;兴奋层和抑制层之间是双向突触,没有延迟,权值是固定值,输入采用泊松分布频率编码,输出根据兴奋层神经元的发放脉冲数来得到;所述权值量化方法是指输入层和兴奋层之间的权值量化,包括以下步骤:

s1、初始化脉冲神经网络参数,包括权值、阈值、电导、电压、延迟、学习率和最大频率;

s2、在一定闭区间内根据均匀分布随机赋予原始权值w初始值,原始权值用64位二进制定点数表示;

s3、输入图片的泊松编码:图片的每个像素点的rgb值用一个神经元表示,神经元根据该rgb值在设定的时间窗口内生成特定的脉冲序列,脉冲序列采用泊松分布频率编码;

s4、权值量化,生成权值的索引和量化之后权值wq;

s5、使用量化权值wq计算电导、电流、电压和脉冲发放;

s6、根据突触前脉冲和突触后脉冲并利用stdp规则更新原始权值w;

s7、检查训练是否达到规定的时间窗口,若未达到时间窗口便继续输入脉冲进行训练,若已经达到时间窗口便输入下一张图片的泊松编码。

本发明的有益效果为,本发明的方法可以对脉冲神经网络大量的权值参数进行量化,而且该神经网络还可以利用量化权值进行训练,且与使用原始权值训练的结果非常接近,在神经网络测试阶段,可以使用索引编码后的量化权值进行计算,这样可以节省存储资源,提高计算速度。尤其当需要实现snn硬件化的时候,该方法可以减小ram等片上资源消耗,降低运算复杂度,提高硬件计算速度和性能。

附图说明

图1是权值量化自主学习脉冲神经网络结构。

图2是权值量化自主学习脉冲神经网络整体计算框图。

图3是权值量化的实例示意图。

图4是权值变化过程框图。

图5是基于trace的stdp学习规则下权值关于时间的变化。

具体实施方式

下面结合附图对本发明进行详细描述,以便本领域的技术人员能够更好地理解本发明。

参阅图1,权值量化自主学习脉冲神经网络网络一共三层,包括输入层,兴奋层和抑制层,其中输入层和兴奋层之间使用正向全连接突触,具有延迟,而且权值是可以训练的;而兴奋层和抑制层之间是双向突触,没有延迟,权值是固定值,不可训练。输入采用泊松分布频率编码,输出根据兴奋层神经元的发放脉冲数来得到。所以量化权值只针对输入层和兴奋层之间的权值。

参阅图2,权值量化自主学习脉冲神经网络的训练流程如下:

s1:初始化脉冲神经网络参数,包括权值、阈值、电导、电压、延迟、学习率、最大频率等。

s2:在一定闭区间内根据均匀分布随机赋予原始权值w初始值,原始权值用64位二进制定点数表示。

s3:图片的每个像素点的rgb值用一个神经元表示,神经元根据该rgb值在规定的时间窗口(即自定义的一段时间)内生成特定的脉冲序列,脉冲序列采用泊松分布频率编码。

s4:(参阅图3)对权值进行量化,具体操作公式为:

wx是量化后的权值,w是原始权值,n是量化之后权值的个数。

该操作是先将原始权值w乘以n-1,将乘积四舍五入取整后再除以n-1,便得到量化权值wq,量化后的权值依次用二进制数编码,生成索引,以供最后测试神经网络时调用。例如(参阅图3),16个原始权值量化为5个权值0.00、0.25、0.50、0.75、1.00之后,则可以将这量化的5个权值依次编码为:000、001、010、011、100,这样就可以将原始权值的64位二进制表达为3位二进制,测试神经网络的时候使用该3位二进制索引码便可以调用量化权值。

s5:(参阅图4)使用量化权值wq计算电导、电流、电压和脉冲发放等。

用传统的integrate-and-fire(if)神经元,首先使用量化权值wq更新电导,即若有脉冲传入,则原电导加上权值,若没有脉冲传入,则原电导不加权值;进而用电导更新神经元的兴奋电流和抑制电流,电流大小为电导乘以膜电压;然后用电流更新神经元的细胞膜电压,膜电压大小为原膜电压加上神经元的兴奋电流和抑制电流;最后根据细胞膜电压决定神经元的脉冲发放状态,若膜电压大于阈值电压,则发出一个脉冲,若膜电压小于阈值电压,则恢复到一个特定的电压,神经元进入一个不应期。

s6:进一步,(参阅图4)根据突触前脉冲和突触后脉冲到达的时间差利用stdp规则更新原始权值w。

根据量化权值进行前向计算,然后采用不同于传统stdp的一种等效的基于trace的stdp对snn神经网络进行训练,并更新原始权值。其中传统的stdp规则如下:

其中,δw是原始权值的变化量,为所有脉冲时间差经过函数处理后的和,tpre是突触前脉冲发生的时间,tpost是突触后脉冲发生的时间,f是一个特定的函数,公式如下:

其中apre和apost为突触前神经元和突触后神经元自定义的常数。

直接用这个方程来实现stdp效率很低,因为要对所有的脉冲进行求和,而且还需要神经元记住所有之前的脉冲时间,这样需要耗费大量的资源,在硬件实现上是不明智的,所以引入了trace来模拟这个方程。

定义两个新的变量pre和post,分别表示突触前和突触后的trace,trace随时间指数变化:

τpre和τpost是突触前神经元和突触后神经元的时间常数。

当突触前神经元发生了一个脉冲,突触前trace和权值变化如下:

pre(t)=pre(t-1)+apre(6)

w(t)=w(t-1)-post(7)

当突触后神经元发生了一个脉冲,突触后trace和权值变化如下:

post(t)=post(t-1)+apost(8)

w(t)=w(t-1)+pre(9)

以上的基于trace的stdp学习规则得到的权值变化(参阅图5)和传统的stdp学习规则得到的权值变化非常接近。

s7:判断一个时间窗口内的脉冲是否全部进入神经网络进行训练,若完成一个时间窗口,便可以输入下一张图片进行训练。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1