一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种脉冲神经网络加速器

2022-11-12 20:40:16 来源:中国专利 TAG:


1.本技术涉及脉冲神经网络加速技术领域,尤其涉及一种脉冲神经网络加速器。


背景技术:

2.人工智能技术及应用在日常生活中发挥着重大的作用,其中以脉冲神经网络为基础的模型在分类、回归以及目标检测等领域展示极高的准确度以及性能,能够较准确地模拟人类大脑神经网络的运行机制,且随着网络层数的加深,对系统资源的消耗较少,利于推进人工智能应用的发展。
3.现有的硬件脉冲神经网络驱动算法普遍为事件驱动,在硬件实现上无法确定当前时间下是否属于未处理的事件,导致加速器的性能较低。


技术实现要素:

4.本技术提供了一种脉冲神经网络加速器,用于改善现有的加速器在硬件实现上无法确定当前时间下是否剩余未处理的事件,导致加速器的性能较低的技术问题。
5.有鉴于此,本技术第一方面提供了一种脉冲神经网络加速器方法,包括:
6.所述控制器,用于在接收到输入数据后驱动所述时间步生成器生成时间步t,并将时间步t和输入数据发送给所述脉冲编码器单元;
7.所述脉冲编码单元,用于基于时间步t将输入数据编码为下一个时间步t 1的脉冲数据,并将所述脉冲数据发送给所述控制器,由所述控制器将所述脉冲数据发送给所述调度器;
8.所述调度器,用于对所述脉冲数据进行解码得到脉冲源地址和时间步t 1,并将脉冲源地址和时间步t 1存储到fifo阵列中;
9.所述控制器还用于基于当前的时间步从所述fifo阵列中读取脉冲源地址,并将该脉冲源地址发送给所述神经元计算单元;
10.所述神经元计算单元,用于根据脉冲源地址从所述状态存储器中读取对应的神经元状态数据,根据所述神经元状态数据对对应层的神经元进行状态更新,将更新后的状态数据写回所述状态存储器中,并将输出的脉冲数据发送给所述调度器进行存储,以便下一层神经元进行状态更新。
11.可选的,所述脉冲编码单元包括:伪随机数生成器和泊松编码器;
12.所述伪随机数生成器,用于在接收到时间步后,随机生成0到1之间的随机数;
13.所述泊松编码器,用于基于所述随机数对输入数据进行泊松编码,生成下一个时间步t 1的脉冲数据。
14.可选的,所述脉冲编码单元,还用于在编码完下一个时间步t 1的输入数据后,触发所述时间步生成器生成下一个时间步t 1。
15.可选的,还包括:延迟存储单元和突触延迟计算单元;
16.所述延迟存储单元,用于存储目标神经元的突触延迟时间;
17.所述突触延迟计算单元,用于根据所述目标神经元的突触延迟和当前时间步计算目标时间步,将所述目标神经元的目标时间步发送给所述调度器,由所述调度器根据所述目标神经元的脉冲源地址和所述目标时间步进行存储。
18.可选的,所述神经元计算单元,具体用于:
19.当神经元为if或lif神经元时,基于四级流水线根据脉冲源地址从所述状态存储器中读取对应的神经元状态数据,根据所述神经元状态数据计算脉冲神经网络参数,基于脉冲神经网络参数更新神经元状态,以及将更新后的神经元状态写回到所述状态存储器中;
20.当神经元为izhikevich神经元时,基于六级流水线根据脉冲源地址从所述状态存储器中读取对应的神经元状态数据,根据所述神经元状态数据计算脉冲神经网络参数,基于脉冲神经网络参数更新神经元状态,以及将更新后的神经元状态写回到所述状态存储器中。
21.可选的,当神经元为lif神经元时,所述脉冲神经网络参数包括基于一阶欧拉方法计算的lif神经元的膜电位电压,计算公式为:
[0022][0023][0024][0025]
β1=α
·
v[n],
[0026]
式中,v[n]为当前时刻的膜状态,v[n 1]为所求的膜电位大小,为采用一阶欧拉方法求得的膜电位电压,tn为计算时的第n个离散时间步,vn为输入膜电位大小,α为神经元膜电阻产生的电压受神经元此时膜电位的影响大小,f1(t,v)为第一目标方程,f2(t,v)为第二目标方程,β1、β2为不同阶段v的大小偏置,v
reset
为神经元静息电位,h为时间步,τm为时间常数。
[0027]
可选的,当神经元为izhikevich神经元时,所述脉冲神经网络参数包括基于一阶欧拉方法计算的izhikevich神经元的膜电位电压,计算公式为:
[0028]
v[n 1]=(0.04v2 5v 140-u i)
·
h;
[0029]
u[n 1]=[a(bv-u)]
·
h;
[0030]
式中,v为所求的膜电位电压,u为膜电位恢复变量,i为神经元的输入电流,h为时间步,a、b、c、d为神经元的模型参数,v
threhold
为膜电压阈值。
[0031]
可选的,所述状态存储器包括用于存储神经元的权重的权重存储器和用于存储神经元参数的神经元参数存储单元。
[0032]
可选的,所述调度器中的fifo阵列为16个并行的fifo阵列。
[0033]
从以上技术方案可以看出,本技术具有以下优点:
[0034]
本技术提供了一种脉冲神经网络加速器,包括:脉冲编码单元、控制器、时间步生成器、调度器、状态存储器和神经元计算单元;控制器,用于在接收到输入数据后驱动时间步生成器生成时间步t,并将时间步t和输入数据发送给脉冲编码器单元;脉冲编码单元,用
于基于时间步t将输入数据编码为下一个时间步t 1的脉冲数据,并将脉冲数据发送给控制器,由控制器将脉冲数据发送给调度器;调度器,用于对脉冲数据进行解码得到脉冲源地址和时间步t 1,并将脉冲源地址和时间步t 1存储到fifo阵列中;控制器还用于基于当前的时间步从fifo阵列中读取脉冲源地址,并将该脉冲源地址发送给神经元计算单元;神经元计算单元,用于根据脉冲源地址从状态存储器中读取对应的神经元状态数据,根据神经元状态数据对对应层的神经元进行状态更新,将更新后的状态数据写回状态存储器中,并将输出的脉冲数据发送给调度器进行存储,以便下一层神经元进行状态更新。
[0035]
本技术中,采用脉冲编码的时间步比时间步生成器产生的时间步延迟一个时间步,使得神经元计算单元在计算t时刻的输入脉冲时,脉冲编码单元在编码t 1时刻的脉冲,从而神经元计算单元在t时刻时便可以直接得到待计算的脉冲,而无需等待编码,提高了计算效率,通过时间步可以确定当前时间下的脉冲是否计算完成,从而改善了现有的加速器在硬件实现上无法确定当前时间下是否剩余未处理的事件,导致加速器的性能较低的技术问题。
附图说明
[0036]
为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
[0037]
图1为本技术实施例提供的一种脉冲神经网络加速器的一个结构示意图;
[0038]
图2为本技术实施例提供的一种伪随机数生成器的一个结构示意图;
[0039]
图3为本技术实施例提供的一种脉冲神经网络加速器的一个结构示意图;
[0040]
图4为本技术实施例提供的lif神经元流水线计算方式示意图;
[0041]
图5为本技术实施例提供的izhikevich神经元神经元流水线计算方式示意图;
[0042]
图6为本技术实施例提供的并行缓存及转发的示意图。
具体实施方式
[0043]
为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
[0044]
为了便于理解,请参阅图1,本技术实施例提供了一种脉冲神经网络加速器,包括:脉冲编码单元、控制器、时间步生成器、调度器、状态存储器和神经元计算单元;
[0045]
控制器,用于在接收到输入数据后驱动时间步生成器生成时间步t,并将时间步t和输入数据发送给脉冲编码器单元;
[0046]
脉冲编码单元,用于基于时间步t将输入数据编码为下一个时间步t 1的脉冲数据,并将脉冲数据发送给控制器,由控制器将脉冲数据发送给调度器;
[0047]
调度器,用于对脉冲数据进行解码得到脉冲源地址和时间步t 1,并将脉冲源地址和时间步t 1存储到fifo阵列中;
[0048]
控制器还用于基于当前的时间步从fifo阵列中读取脉冲源地址,并将该脉冲源地址发送给神经元计算单元;
[0049]
神经元计算单元,用于根据脉冲源地址从状态存储器中读取对应的神经元状态数据,根据神经元状态数据对对应层的神经元进行状态更新,将更新后的状态数据写回状态存储器中,并将输出的脉冲数据发送给调度器进行存储,以便下一层神经元进行状态更新。
[0050]
本技术中的脉冲神经网络加速器的核心模块为控制器,控制器在接收到输入数据后,驱动时间步生成器运行生成时间步t,然后发送时间步t和输入数据给脉冲编码单元。脉冲编码单元在接收到时间步t和输入数据后,对时间步t进行加一,并将输入数据编码为脉冲数据,得到下一个时间步t 1的脉冲数据,并将脉冲数据发送给控制器,由控制器将脉冲数据发送给调度器;脉冲编码单元,还用于在编码完下一个时间步t 1的输入数据后,触发时间步生成器生成下一个时间步t 1。
[0051]
进一步,为了解决将输入数据转换为脉冲数据,本技术实施例设计了一种基于伪随机数的泊松编码器。本技术实施例中的脉冲编码单元包括:伪随机数生成器和泊松编码器;
[0052]
伪随机数生成器,用于在接收到时间步t后,随机生成0到1之间的随机数;
[0053]
泊松编码器,用于基于随机数对输入数据进行泊松编码,生成下一个时间步t 1的脉冲数据。
[0054]
请参考图2,本技术实施例采用12bit线性反馈移位寄存器(lsfr)生成0到1之间的随机数rand,泊松编码器的编码公式为:
[0055]
if rand《c
×iijk
,then spike;
[0056]
式中,c为控制参数,用于控制最大的脉冲发放频率,优选设置c=1,即最大发放脉冲频率为1khz,i
ijk
为输入数据,输入数据可以是归一化后的数据,根据上式可知,当c=1时,只要生成的随机数小于输入数据,便会产生一个脉冲。
[0057]
控制器接受脉冲编码单元通过aer总线发送的脉冲数据,并转发给调度器,调度器对脉冲数据进行解码得到脉冲源地址和时间步,将脉冲源地址和时间步存储到fifo阵列中。
[0058]
进一步,本技术实施例中的脉冲神经网络加速器还包括:延迟存储单元和突触延迟计算单元;
[0059]
延迟存储单元,用于存储目标神经元的突触延迟时间;延迟存储单元存储着每一个突触后神经元发送脉冲时需要的延迟大小,该延迟只会在产生脉冲时才会作用于调度器;
[0060]
突触延迟计算单元,用于根据目标神经元的突触延迟和当前时间步计算目标时间步,将目标神经元的目标时间步发送给调度器,由调度器根据目标神经元的脉冲源地址和目标时间步进行存储。
[0061]
调度器中的fifo阵列为16个并行的fifo阵列,如图3所示,可以实现16种不同的突触延迟,16个并行的fifo阵列组成一个环形阵列,实现对不同时间步下的脉冲源地址的读取。
[0062]
当脉冲编码单元完成对输入数据的编码后,控制器基于当前的时间步从fifo阵列中读取脉冲源地址,并将该脉冲源地址发送给神经元计算单元,神经元计算单元根据脉冲
源地址从状态存储器中读取对应的神经元状态数据,根据神经元状态数据对对应层的神经元进行状态更新,将更新后的状态数据写回状态存储器中,并将生成的脉冲数据发送给调度器进行存储,以便下一层神经元进行状态更新。在当前时间步完成对应神经元状态更新后,将输出的脉冲数据存储到调度器中,以便对下一层神经元的状态更新。
[0063]
本技术实施例中的加速器当完成对输入的图片数据完成编码和对应神经元时间单位的脉冲事件处理完成(即当前神经元单位下待处理的脉冲事件,其中一个脉冲事件代表需更新一次对应的神经网络层的所有神经元膜电位,n个表示更新n次)后,便可以完成神经元时间单位的更新,开始下一时间单位的神经元状态更新。采用结合泊松编码器、时间步和环形fifo设计的加速器,16个并行的fifo阵列组成一个环形阵列,实现对不同时间步下的脉冲源地址的读取,加速器不仅可以完成对外部数据的脉冲编码,还可以减少神经元状态更新的等待时间,有效的提高了硬件执行脉冲神经网络计算的速度。
[0064]
进一步,神经元计算单元,具体用于:
[0065]
当神经元为if或lif神经元时,基于四级流水线根据脉冲源地址从状态存储器中读取对应的神经元状态数据,根据神经元状态数据计算脉冲神经网络参数,基于脉冲神经网络参数更新神经元状态,以及将更新后的神经元状态写回到状态存储器中;
[0066]
当神经元为izhikevich神经元时,基于六级流水线根据脉冲源地址从状态存储器中读取对应的神经元状态数据,根据神经元状态数据计算脉冲神经网络参数,基于脉冲神经网络参数更新神经元状态,以及将更新后的神经元状态写回到状态存储器中。
[0067]
本技术中,状态存储器包括用于存储神经元的权重的权重存储器和用于存储神经元参数的神经元参数存储单元。神经元计算单元根据脉冲源地址从状态存储器中读取出权重和神经元参数,根据权重和神经元参数进行神经元状态更新,即更新神经元膜电位,需要将更新后的神经元状态重新写回到状态存储器。本技术实施例使用并行结合流水线技术实现神经元状态的更新。采用16个并行工作的神经元计算单元,因此可以同时完成16个神经元状态的更新。对于计算较简单的if神经元/lif神经元,如图4所示,其更新方法为四级流水线。每一个神经元更新的时候分为读取(r)、模型参数计算(o)、神经元状态计算(c)和写回(w),计算的模型参数包括基于一阶欧拉方法计算的lif神经元的膜电位电压和不应期更新值,神经元状态计算包括膜电位更新以及不应期更新。而对于计算较为复杂的izhikevich神经元,如图5所示,其更新方法为六级流水线,包括了读取(r)、模型参数计算和神经元状态计算(a、b、c及d)和写回(w)。采用流水线技术加速计算将传统的读写分离方法中的计算部分的组合逻辑更改为流水线处理,不仅可以提高系统电路的工作时钟频率,还可以提高电路调试的简易性。
[0068]
当神经元为lif神经元时,脉冲神经网络参数包括基于一阶欧拉方法计算的lif神经元的膜电位电压。lif神经元以指数过程模拟生物神经元的膜电压泄漏,如下式所示:
[0069][0070]
式中,vm为神经元当前膜电位电压,v
m 1
为泄露之后的膜电位电压,δt为泄露时间差,τm为时间常数。当突触前神经元i产生一个输出脉冲时,突触权重经过一个设定的传播延迟后,更新到突触后神经元j的膜电位。根据上述计算公式可知,lif神经元计算中存在指
数运算,采用一阶euler方法消除求解的指数计算,使用算术移位替代乘法计算,得到优化后的计算公式为:
[0071][0072][0073][0074]
β1=α
·
v[n],
[0075]
式中,v[n]为当前时刻的膜状态,v[n 1]为所求的膜电位大小,为采用一阶欧拉方法求得的膜电位电压,tn为计算时的第n个离散时间步,vn为输入膜电位大小,α为神经元膜电阻产生的电压受神经元此时膜电位的影响大小,f1(t,v)为第一目标方程,f2(t,v)为第二目标方程,β1、β2为不同阶段v的大小偏置,v
reset
为神经元静息电位,h为时间步,τm为时间常数。
[0076]
将上述部分参数固定,其中,v
reset
设置为0,α设置为0.5,设置为0.125,简化后的计算公式为:
[0077]
v[n 1]=v[n]-(y1 y2);
[0078]
y1=(v[n]-β1)>>4;
[0079][0080][0081]
式中,》》4为逻辑左移4位,》》3为逻辑左移3位,y1、y2为中间参数。
[0082]
当神经元为izhikevich神经元时,脉冲神经网络参数包括基于一阶欧拉方法计算的izhikevich神经元的膜电位电压。相比lif神经元,izhikevich神经元具有更高的生物真实性,因此计算复杂度也会相应提升,其计算公式如下式为:
[0083][0084][0085]
if v>v
threhold
,spikeandv=c,u=u d;
[0086]
式中,v为膜电压,u为膜电位恢复变量,i为神经元的输入电流,a、b、c、d为神经元的模型参数,v
threhold
为膜电压阈值;
[0087]
对于izhikevich神经元其优化过程与优化lif神经元的过程类似,采用一阶欧拉方法实现公式中的dv/dt和du/dt,虽然,izhikevich神经元在优化后仍存在乘法计算,但已经极大的减小了指数计算,优化后的izhikevich神经元的计算公式为:
[0088]
v[n 1]=(0.04v2 5v 140-u i)
·
h;
[0089]
u[n 1]=[a(bv-u)]
·
h;
[0090]
本技术实施例中设置a为6,b为2,c为1.0,d为0.01。
[0091]
采用一阶euler方法消除lif/izh神经元求解的微分计算,减少了求解的复杂度,使其硬件友好化。采用了一阶欧拉方法消除lif神经元和izhikevich神经元求解的微分计算得到的优化后的神经元,优化了lif神经元和izhikevich神经元的计算过程,降低了计算复杂度,使得神经元计算单元更新神经元膜电位的速度加快,占用更少的硬件资源,并且可以支持不同脉冲神经元的脉冲神经网络,改善了现有技术存在神经元模型单一,无法支持多个不同的脉冲神经元搭建的snn,并且计算单元所占用的硬件资源、计算量和功耗很大的技术问题。
[0092]
调度器接收到的脉冲数据为内部脉冲时,即神经元进行状态更新后输出的脉冲数据,神经元计算单元将更新后生成的脉冲数据发送给调度器进行存储,采用16个fifo阵列对发放脉冲的地址进行缓存,并将fifo的空信号组合起来传递至仲裁器,可以参考图6。仲裁器会根据设定好的优先级从fifo取出发放脉冲神经元地址,这样处理的优势主要有:

无需暂停上述计算的流水线,提高计算效率。

可灵活完成十六个并行脉冲的缓存并记录脉冲源地址,无需地址变换即可完成下一层神经元更新,缩短转换时间。
[0093]
本技术实施例采用两种数据集(mnist和fashion-mnist)对脉冲神经网络加速器进行验证,均证明本技术实施例中的加速器有较好的加速性能。
[0094]
本技术实施例中,采用脉冲编码的时间步比时间步生成器产生的时间步延迟一个时间步,使得神经元计算单元在计算t时刻的输入脉冲时,脉冲编码单元在编码t 1时刻的脉冲,从而神经元计算单元在t时刻时便可以直接得到待计算的脉冲,而无需等待编码,提高了计算效率,通过时间步可以确定当前时间下的脉冲是否计算完成,从而改善了现有的加速器在硬件实现上无法确定当前时间下是否剩余未处理的事件,导致加速器的性能较低的技术问题。并且,采用并行和可配置变长流水线架构实现对if、lif及izh神经元膜电位的更新,采用时分复用技术,有效的提高了加速器规模和数据处理的效率。
[0095]
本技术的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0096]
应当理解,在本技术中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
[0097]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结
合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0098]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0099]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0100]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以通过一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(英文全称:read-only memory,英文缩写:rom)、随机存取存储器(英文全称:random access memory,英文缩写:ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0101]
以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献