用于执行LSTM神经网络运算的装置和运算方法与流程

专利2022-06-29  118


本发明涉及神经网络运算技术领域,更具体地涉及一种用于执行lstm神经网络运算的装置和运算方法。



背景技术:

长短时间记忆网络(lstm)是一种时间递归神经网络(rnn),由于网络本身独特的结构设计,lstm适合于处理和预测时间序列中间隔和延时非常长的重要事件。相比于传统的递归神经网络,lstm网络表现出更好的性能,它非常适合从经验中学习,以便在重要事件之间存在未知大小时间之后时对时间序列进行分类、处理和预测。目前,在语音识别、视频描述、机器翻译和音乐自动合成等诸多领域,lstm网络被广泛应用。同时,随着对lstm网络研究的不断深入,lstm网络的性能得到了大幅的改善,也在工业界和学术界引起广泛重视。

lstm网络的运算涉及到多种算法,具体的实现装置主要有以下两种:

一种实现lstm网络运算的装置是通用处理器。该方法通过使用通用寄存器堆栈和通用功能部件执行通用指令来支持上述算法。该方法的缺点之一是单个通用处理器的运算性能较低,无法满足通常的借助lstm网络本身运算的可并行性来进行加速。而通过多个通用处理器并行执行时,通过处理器之间相互通信又成为了性能瓶颈。另外,通用处理器需要把人工神经网络运算译码成一系列的运算以及访存指令,处理器前端译码也存在较大的功耗开销。

另一种支持lstm网络运算的已知方法是使用图形处理器(gpu)。该方法通过使用通用寄存器堆栈和通用流处理单元执行通用simd指令来执行上述算法。由于gpu是专门用来执行图形图像运算以及科学计算的设备,没有对lstm网络提供专门的支持,仍然需要大量的前端译码工作才能执行lstm网络运算,这会带来大量的额外开销。另外,gpu只有较小的片上缓存,lstm网络中使用的相关参数需要反复从片外搬运,片外带宽也成为了性能瓶颈。

由此可见,如何设计和提供一种以较小的io量、低开销的方式实现高运算性能的lstm网络运算的装置和方法是当前迫切需要解决的技术问题。



技术实现要素:

有鉴于此,本发明的主要目的是提供一种用于执行lstm网络运算的装置和方法,以解决上述技术问题中的至少之一。

为了实现上述目的,作为本发明的一个方面,本发明提供了一种用于执行lstm神经网络运算的装置,其特征在于,包括:

并列设置的多个数据缓存单元,用于对运算所需数据、状态和结果进行缓存;

并列设置的多个数据处理模块,用于从对应数据缓存单元中获取输入数据和运算时所需的权值和偏置,进行lstm神经网络运算;其中所述多个数据处理模块与所述数据缓存单元一一对应,且所述多个数据处理模块之间执行并行运算。

作为本发明的另一个方面,本发明还提供了一种用于执行lstm神经网络运算的装置,其特征在于,包括:

存储器;

处理器,所述处理器执行如下操作:

步骤1,从外部指定地址空间读取用于lstm神经网络运算的权值和偏置,并将其分割成与所述lstm神经网络运算的神经元对应的多个部分后存储到所述存储器的不同空间中,其中每个空间中的权值和偏置的数量相同;并从外部指定地址空间读取用于lstm神经网络运算的输入数据并将其存储在所述存储器的每一个所述不同空间中;

步骤2,将所述存储器的每一个所述不同空间中的权值和输入数据分割成若干份,其中每份的权值或输入数据的数量与对应的向量运算单元运算的数量相同;每次将一份权值和输入数据计算得到部分和,再与之前得到的部分和进行向量加,得到新的部分和,其中所述部分和的初始值为偏置值;

步骤3,待所述存储器的每一个所述不同空间中的所有输入数据均进行了处理之后,得到的部分和即为神经元对应的净激活量,通过非线性函数tanh或sigmoid函数变换所述神经元的净激活量,得到所述神经元的输出值;

步骤4,通过这种方式使用不同的权值和偏置,重复上述步骤1~3,分别计算出lstm神经网络运算中的忘记门、输入门、输出门以及待选状态单元的向量值;其中,计算部分和的过程采用的是向量运算指令,所述存储器的每一个所述不同空间中的输入数据采用并行运算方式进行计算;

步骤5,判断所述存储器的每一个所述不同空间中的当前忘记门、输入门以及待选状态单元向量值计算是否完成,若完成,则进行新的状态单元的计算,即将旧的状态单元和忘记门向量值通过向量点乘部件得到部分和,然后将待选状态单元和输入门的值通过向量点乘部件得到部分和,将所述两个部分和通过向量求和子模块得到更新后的状态单元,同时,将更新后的状态单元通过非线性变换函数tanh进行变换;判断当前更新后的数据状态单元的非线性变换和输出门是否计算完成,如果计算完成,将输出门与带更新后的数据状态单元非线性变换后的向量通过向量点乘部件进行计算得到所述存储器的每一个所述不同空间的最终输出值;

步骤6,将各个所述存储器的每一个所述不同空间的最终输出值通过拼接得到最终的输出值。

作为本发明的再一个方面,本发明还提供了一种lstm神经网络的运算方法,其特征在于,包括以下步骤:

步骤s1,从外部指定地址空间读取用于lstm神经网络运算的权重和偏置,并将其写入到多个并行设置的数据缓存单元,对各数据缓存单元的状态单元进行初始化;其中,从外部指定地址空间读取的权值和偏置对应于所述lstm神经网络运算的神经元而被分割送入到各相应数据缓存单元,各数据缓存单元中的权值和偏置的数量分别相同;

步骤s2,从外部指定地址空间读取输入数据,并将其写入到所述多个数据缓存单元,其中每一个所述数据缓存单元中写入的输入数据均为完整的;

步骤s3,与所述多个并行设置的数据缓存单元一一对应的多个数据处理模块分别从对应的数据缓存单元中读取所述权重、偏置和输入数据,并采用向量点乘部件、向量加法部件、向量求和部件和向量非线性函数转换部件对其进行lstm神经网络运算,分别得到每一个数据处理模块的输出值;

步骤s4,将各个数据处理模块的输出值通过拼接得到最终的输出值,即所述lstm神经网络运算的最终结果。

基于上述技术方案可知,本发明的用于执行神经网络运算的装置和方法,相比于已有的实现方式具有以下的有益效果:

1、采用外部指令运行,相比于已有的实现方式,运算所需的指令数大幅度减少,使得进行lstm网络运算时产生的译码开销降低;

2、利用lstm网络运算过程中隐含层的权值和偏置会重复使用这一特点,将权值和偏置值在数据缓存单元中进行暂存,使得装置与外部的io量减少,数据传输产生的开销降低;

3、本发明不限制具体的lstm网络的应用领域,可以在诸如语音识别、文本翻译、音乐合成等领域使用,可扩展性强;

4、装置中的多个数据处理模块之间完全并行,数据处理模块内部部分并行,能充分利用lstm网络的可并行性,显著地提高了lstm网络的运算速度;

5、作为优选,向量非线性函数转换部件的具体实现可以通过查表方法进行,相比于传统的函数运算,效率大幅度提升。

附图说明

为了更完整地理解本发明及其优势,现在将参考结合附图的以下描述,其中:

图1示出了根据本发明一实施例的用于执行lstm网络运算的装置的整体结构示意图;

图2示出了根据本发明一实施例的用于执行lstm网络运算的装置的数据处理模块示意图;

图3示出了根据本发明一实施例的用于执行lstm网络运算的方法流程图;

图4示出了根据本发明一实施例的用于执行lstm网络运算的方法中数据处理过程的详细流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。

在本说明书中,下述用于描述本发明原理的各种实施例只是说明,不应该以任何方式解释为限制发明的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本发明的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本发明的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相似功能和操作。在本发明中,术语“包括”和“含有”及其派生词意为包括而非限制。

本发明的用于执行lstm网络运算的装置可以应用于以下场景中,包括但不限于:数据处理、机器人、电脑、打印机、扫描仪、电话、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备等各类电子产品;飞机、轮船、车辆等各类交通工具;电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、抽烟机等各类家用电器,以及包括核磁共振仪、b超、心电图仪等各类医疗设备。

具体地,本发明公开了一种用于执行lstm神经网络运算的装置,包括:

并列设置的多个数据缓存单元,用于对运算所需数据、状态和结果进行缓存;

并列设置的多个数据处理模块,用于从对应数据缓存单元中获取输入数据和运算时所需的权值和偏置,进行lstm神经网络运算;其中所述多个数据处理模块与所述数据缓存单元一一对应,且所述多个数据处理模块之间执行并行运算。

其中,所述数据缓存单元还对所述数据处理模块计算的中间结果进行缓存,且在整个执行过程中只从所述直接内存访问单元导入一次权值和偏置,之后不再改变。

其中,每一个所述数据缓存单元中写入了对应于所述lstm神经网络运算的神经元而被分割的权值和偏置,其中各数据缓存单元中的权值和偏置的数量均相同,且每个数据缓存单元都获取了一份完整的输入数据。

其中,所述数据处理模块采用向量点乘部件、向量加法部件、向量求和部件和向量非线性函数转换部件进行所述lstm神经网络运算。

其中,所述向量非线性函数转换部件通过查表方法进行函数运算。

其中,每一个所述数据处理模块通过分别计算出lstm网络运算中的忘记门、输入门、输出门以及待选状态单元的向量值来进行所述向量运算,再由各所述向量值得到每一个所述数据处理模块的输出值,最后将各所述数据处理模块的输出值拼接得到最终的输出值。

作为一个优选实施方式,本发明公开了一种用于执行lstm神经网络运算的装置,包括:

直接内存访问单元,用于从所述装置外的外部地址空间获取指令和lstm神经网络运算所需的数据,并将其中的指令和数据分别传输给指令缓存单元和数据缓存单元,以及从数据处理模块或数据缓存单元将运算结果写回到外部地址空间;

指令缓存单元,用于缓存直接内存访问单元从外部地址空间获取的指令,并输入到控制器单元;

控制器单元,从指令缓存单元中读取指令,并将指令译码成微指令,用于控制直接内存单元进行数据io操作、数据处理模块进行相关运算和数据缓存单元进行数据缓存和传输;

并列设置的多个数据缓存单元,用于对运算所需数据、状态和结果进行缓存;

并列设置的多个数据处理模块,用于从相应数据缓存单元中获取输入数据和运算时所需的权值和偏置,进行lstm神经网络运算,并将运算结果输入到相应数据缓存单元或直接内存访问单元中;其中所述多个数据处理模块与所述数据缓存单元一一对应,且所述多个数据处理模块之间执行并行运算。

作为优选,所述直接内存访问单元、指令缓存单元、控制器单元、多个数据缓存单元和多个数据处理模块均通过硬件电路实现。

作为优选,所述数据缓存单元还对所述数据处理模块计算的中间结果进行缓存,且在整个执行过程中只从所述直接内存访问单元导入一次权值和偏置,之后不再改变。

作为优选,所述多个数据处理模块均采用向量点乘部件、向量加法部件、向量求和部件和向量非线性函数转换部件进行所述lstm神经网络运算。

作为优选,所述向量非线性函数转换部件通过查表方法进行函数运算。

作为优选,所述多个数据处理模块通过如下方式进行并行运算:

步骤1,各相应数据缓存单元中写入了从外部指定地址空间读取的、对应于所述lstm神经网络运算的神经元而被分割的权值和偏置,其中各数据缓存单元中的权值和偏置的数量均相同,且每个数据缓存单元都获取了一份完整的输入数据;每一数据处理模块将各相应数据缓存单元中的权值和输入数据分割成若干份,其中每份的权值或输入数据的数量与对应的单个数据处理模块中向量运算单元运算的数量相同;每次将一份权值和输入数据送入所述相应数据处理模块中,计算得到部分和,再从所述数据缓存单元中取出之前得到的部分和,对部分和进行向量加,得到新的部分和,送回到所述数据缓存单元中,其中所述部分和的初始值为偏置值;

步骤2,待各数据缓存单元中的所有输入数据送入到相应数据处理模块处理一次后,得到的部分和即为神经元对应的净激活量,相应数据处理模块通过非线性函数tanh或sigmoid函数变换所述神经元的净激活量,得到所述神经元的输出值;

步骤3,通过这种方式使用不同的权值和偏置,重复上述步骤1~2,分别计算出lstm网络运算中的忘记门、输入门、输出门以及待选状态单元的向量值;其中,在同一个数据处理模块中,计算部分和的过程采用的是向量运算指令,数据间采用并行运算;

步骤4,每个数据处理模块判断当前忘记门、输入门以及待选状态单元向量值计算是否完成,若完成,则进行新的状态单元的计算,即将旧的状态单元和忘记门向量值送入到数据处理模块,通过向量点乘部件得到部分和,送回到数据缓存单元中,然后将待选状态单元和输入门的值送到数据处理模块,通过向量点乘部件得到部分和,将数据缓存单元中的部分和送到数据处理模块中,通过向量求和子模块得到更新后的状态单元,然后,送回到数据缓存单元中,同时,将数据处理模块中的更新后的状态单元通过非线性变换函数tanh进行变换;每个数据处理模块判断当前更新后的数据状态单元的非线性变换和输出门是否计算完成,如果计算完成,将输出门与带更新后的数据状态单元非线性变换后的向量通过向量点乘部件进行计算得到最终的输出值,将输出值写回到数据缓存单元中;

步骤5,待所有数据处理模块中的输出值写回到数据缓存单元后,将各个数据处理模块中的输出值通过拼接得到最终的输出值,并通过直接内存访问单元送至外部指定地址处。

本发明还公开了一种用于执行lstm神经网络运算的装置,包括:

存储器;

处理器,所述处理器执行如下操作:

步骤1,从外部指定地址空间读取用于lstm神经网络运算的权值和偏置,并将其分割成与所述lstm神经网络运算的神经元对应的多个部分后存储到所述存储器的不同空间中,其中每个空间中的权值和偏置的数量相同;并从外部指定地址空间读取用于lstm神经网络运算的输入数据并将其存储在所述存储器的每一个所述不同空间中;

步骤2,将所述存储器的每一个所述不同空间中的权值和输入数据分割成若干份,其中每份的权值或输入数据的数量与对应的向量运算单元运算的数量相同;每次将一份权值和输入数据计算得到部分和,再与之前得到的部分和进行向量加,得到新的部分和,其中所述部分和的初始值为偏置值;

步骤3,待所述存储器的每一个所述不同空间中的所有输入数据均进行了处理之后,得到的部分和即为神经元对应的净激活量,通过非线性函数tanh或sigmoid函数变换所述神经元的净激活量,得到所述神经元的输出值;

步骤4,通过这种方式使用不同的权值和偏置,重复上述步骤1~3,分别计算出lstm神经网络运算中的忘记门、输入门、输出门以及待选状态单元的向量值;其中,计算部分和的过程采用的是向量运算指令,所述存储器的每一个所述不同空间中的输入数据采用并行运算方式进行计算;

步骤5,判断所述存储器的每一个所述不同空间中的当前忘记门、输入门以及待选状态单元向量值计算是否完成,若完成,则进行新的状态单元的计算,即将旧的状态单元和忘记门向量值通过向量点乘部件得到部分和,然后将待选状态单元和输入门的值通过向量点乘部件得到部分和,将所述两个部分和通过向量求和子模块得到更新后的状态单元,同时,将更新后的状态单元通过非线性变换函数tanh进行变换;判断当前更新后的数据状态单元的非线性变换和输出门是否计算完成,如果计算完成,将输出门与带更新后的数据状态单元非线性变换后的向量通过向量点乘部件进行计算得到所述存储器的每一个所述不同空间的最终输出值;

步骤6,将各个所述存储器的每一个所述不同空间的最终输出值通过拼接得到最终的输出值。

本发明还公开了一种lstm神经网络的运算方法,包括以下步骤:

步骤s1,从外部指定地址空间读取用于lstm神经网络运算的权重和偏置,并将其写入到多个并行设置的数据缓存单元,对各数据缓存单元的状态单元进行初始化;其中,从外部指定地址空间读取的权值和偏置对应于所述lstm神经网络运算的神经元而被分割送入到各相应数据缓存单元,各数据缓存单元中的权值和偏置的数量分别相同;

步骤s2,从外部指定地址空间读取输入数据,并将其写入到所述多个数据缓存单元,其中每一个所述数据缓存单元中写入的输入数据均为完整的;

步骤s3,与所述多个并行设置的数据缓存单元一一对应的多个数据处理模块分别从对应的数据缓存单元中读取所述权重、偏置和输入数据,并采用向量点乘部件、向量加法部件、向量求和部件和向量非线性函数转换部件对其进行lstm神经网络运算,分别得到每一个数据处理模块的输出值;

步骤s4,将各个数据处理模块的输出值通过拼接得到最终的输出值,即所述lstm神经网络运算的最终结果。

作为优选,所述步骤s3中,每一个数据处理模块分别将对应数据缓存单元中的权值和输入数据分割成若干份,其中每份的权值或输入数据的数量与对应的单个数据处理模块中向量运算单元运算的数量相同;每一数据缓存单元每次将一份权值和输入数据送入与其对应的数据处理模块中,计算得到部分和,再从所述数据缓存单元中取出之前得到的部分和,对部分和进行向量加,得到新的部分和,送回到所述数据缓存单元中,其中所述部分和的初始值为偏置值;

待所有输入数据送入到数据处理模块一次后,得到的部分和即为神经元对应的净激活量,然后将神经元的净激活量送入到数据处理模块中,通过数据运算子模块中的非线性函数tanh或sigmoid函数变换得到神经元的输出值,通过这种方式使用不同的权值和偏置,分别计算出lstm神经网络中的忘记门、输入门、输出门以及待选状态单元的向量值;

每个数据处理模块判断当前忘记门、输入门以及待选状态单元向量值计算是否完成,若完成,则进行新的状态单元的计算,即将旧的状态单元和忘记门向量值送入到数据处理模块,通过向量点乘部件得到部分和,送回到数据缓存单元中,然后将待选状态单元和输入门的值送到数据处理模块,通过向量点乘部件得到部分和,将数据缓存单元中的部分和送到数据处理模块中,通过向量求和子模块得到更新后的状态单元,然后,送回到数据缓存单元中,同时,将数据处理模块中的更新后的状态单元通过非线性变换函数tanh进行变换;每个数据处理模块判断当前更新后的数据状态单元的非线性变换和输出门是否计算完成,如果计算完成,将输出门与带更新后的数据状态单元非线性变换后的向量通过向量点乘部件进行计算得到最终的输出值,将输出值写回到数据缓存单元中。

作为优选,所述非线性函数tanh或sigmoid函数通过查表方法进行函数运算。

根据本发明实施例结合附图对本发明示例性实施例的以下详细描述,本发明的其它方面、优势和突出特征对于本领域技术人员将变得显而易见。

作为本发明的一实施方式,本发明公开了一种lstm网络运算的装置和方法,可以用以加速使用lstm网络方面的应用。该方法具体包括以下步骤:

(1)将用于lstm网络运算中使用的权重和偏置通过直接内存访问单元从外部指定地址空间取出,并写入到各个数据缓存单元,其中,权值和偏置是将从外部指定地址空间取出分割后送入到各个数据缓存单元,各个数据缓存单元中的权值和偏置数量相同,且各个数据缓存单元中的权值和偏置与神经元相对应,并初始化数据缓存单元中的状态单元;

(2)将输入数据通过直接内存访问单元从外部指定地址空间取出写入到数据缓存单元,此处每个数据缓存单元都获取一份完整的输入数据;

(3)将各个数据缓存单元中的权值和输入数据分割成若干份,其中每份的权值或输入数据的数量与对应的单个数据处理模块中向量运算单元运算的数量相同,每次将一份权值和输入数据送入数据处理模块中,计算得到部分和,再从数据缓存单元中取出之前得到的部分和,对部分和进行向量加,得到新的部分和,送回到数据缓存单元中。其中部分和的初始值为偏置值。待所有输入数据送入到数据处理模块一次后,得到的部分和即为神经元对应的净激活量,然后将神经元的净激活量送入到数据处理模块中,通过数据运算子模块中的非线性函数tanh或sigmoid函数变换得到神经元的输出值,这里的函数变换可以通过查表法和函数运算两种方法进行。通过这种方式使用不同的权值和偏置,可以分别计算出lstm网络中的忘记门、输入门、输出门以及待选状态单元的向量值。在同一个数据处理模块中,计算部分和的过程采用的是向量运算指令,数据间存在并行。然后,每个数据处理模块中的数据依赖判别子模块会判断当前忘记门、输入门以及待选状态单元向量值计算是否完成,若完成,则进行新的状态单元的计算。首先,将旧的状态单元和忘记门向量值送入到数据处理模块,通过数据运算子模块中的向量点乘部件得到部分和,送回到数据缓存单元中;然后将待选状态单元和输入门的值送到数据处理模块,通过数据运算子模块中的向量点乘部件得到部分和,将数据缓存单元中的部分和送到数据处理模块中,通过数据运算子模块中的向量求和子模块得到更新后的状态单元,然后,送回到数据缓存单元中,同时,将数据处理模块中的更新后的状态单元通过数据运算子模块中的非线性变换函数tanh进行变换。每个数据处理模块中的数据依赖判别子模块会判断当前更新后的数据状态单元的非线性变换和输出门是否计算完成,如果计算完成,将输出门与带更新后的数据状态单元非线性变换后的向量通过数据运算子模块中的向量点乘部件进行计算得到最终的输出值,将输出值写回到数据缓存单元中。在整个运算过程中,不同的数据处理模块之间都不存在数据依赖或数据冲突问题,可以始终并行处理。

(4)待所有数据处理模块中的输出值写回到数据缓存单元后,将各个数据处理模块中的输出值通过拼接得到最终的输出值通过直接内存访问单元送至外部指定地址处。

(5)判断lstm网络是否需要进行下一时刻的输出,如果需要,转(2),否则,结束运行。

图1示出了根据本发明一实施方式的用于执行lstm网络运算的装置的整体结构示意图。如图1所示,该装置包括直接内存访问单元1、指令缓存单元2、控制器单元3、数据缓存单元4、数据处理模块5,均可以通过硬件电路实现。

直接内存访问单元1能够访问外部地址空间,可以向装置内部各个缓存单元读写数据,完成数据的加载和存储。具体包括向指令缓存单元2读取指令,从指定存储单元之间读取lstm网络运算所需的权值、偏置以及输入数据到数据缓存单元4,将运算后的输出从数据缓存单元4直接写入外部指定空间。

指令缓存单元2通过直接内存访问单元1读取指令,并缓存读入的指令。

控制器单元3从指令缓存单元2中读取指令,将指令译码为控制其他模块行为的微指令并将其发送给其他模块如直接内存访问单元1、数据缓存单元4、数据处理模块5等。

数据缓存单元4在装置初始化时初始化lstm的状态单元,并通过直接内存访问单元1从外部指定地址将权值和偏置读取进来,每个数据缓存单元4中读入的权值和偏置与所要计算的神经元对应,即每个数据缓存单元4中读入的权值和偏置为总的权值和偏置的一部分,所有数据缓存单元4中的权值和偏置合并之后为从外部指定地址读入的权值和偏置;在具体运算时,首先会从直接内存访问单元1获取输入数据,每个数据缓存单元4都得到一份输入数据的拷贝,部分和初始化为偏置值,然后将权值、偏置以及输入值中的一部分送至数据处理模块5,在数据处理模块5计算得到中间值,然后将中间值从数据处理模块5读出并保存数据缓存单元4中,当所有的数入都进行一遍运算后,将部分和输入到数据处理模块5计算得到神经元输出,然后写回到数据缓存单元4中,最终得到输入门、输出门、忘记门和待选状态单元的向量值。然后,将忘记门和旧的状态单元送入到数据处理模块5中,计算得到部分和,写回到数据缓存单元4中,将待选状态单元和输入门送入到数据处理模块5中,计算得到部分和,将数据缓存单4中的部分和写入到数据处理模块5中与之前计算得到的部分和进行向量加得到更新后的状态单元,并将其写回到数据缓存单元4中。将输出门送入到数据处理模块5中,与更新后的状态单元的非线性变换函数tanh变换后的值进行向量点乘得到输出值,并将输出值写回到数据缓存单元4中。最终,每个数据缓存单元4中得到对应的更新后的状态单元以及输出值,所有数据缓存单元4中的输出值合并即为最终的输出值。最终,每个数据缓存单元4将其得到的部分输出值通过直接内存访问单元1写回到外部指定地址空间。

lstm网络中对应的运算如下所示:

ft=σ(wf[ht-1,xt] bf);

it=σ(wi[ht-1,xt] bi);

ot=σ(wo[ht-1,xt] bo);

ht=ot⊙tanh(ct);

其中,xt为第t时刻的输入数据,ht-1表示t-1时刻的输出数据,wf、wi、wc和wo分别表示忘记门、输入门、更新状态单元和输出门所对应的权值向量,bf、bi、bc和bo分别表示忘记门、输入门、更新状态单元和输出门所对应偏置;ft表示忘记门的输出,与t-1时刻的状态单元进行点乘来有选择的遗忘过去的状态单元值;it表示输入门的输出,与t时刻的得到的候选状态值点乘来有选择地将t时刻的候选状态值加入到状态单元中;表示t时刻计算得到的候选状态值;ct表示通过将t-1时刻的状态值有选择的遗忘和将t时刻的状态值有选择的加入得到的新的状态值,它将在计算最终输出时刻被使用并传输到下一时刻;ot表示t时刻状态单元中需要作为结果部分输出的选择条件;ht表示t时刻的输出,同时它还将被传输到下一时刻;⊙为向量按元素运算的乘积;σ为sigmoid函数,计算公式为:激活函数tanh函数的计算公式为

数据处理模块5每次从对应的数据缓存单元4中读取部分权值wi/wf/wo/wc和权值bi/bf/bo/bc以及对应的输入数据[ht-1,xt],通过数据处理模块5中的向量乘部件和求和部件完成部分和的计算,直到对于每个神经元所有的输入数据都运算一次后,即可得到神经元的净激活量neti/netf/neto/netc,然后通过向量非线性函数sigmoid或tanh函数的换完成输出值的计算,用这种方式分别完成输入门ii、忘记门fi、输出门oi以及待选状态单元的计算。然后通过分别通过数据处理模块5中的向量点乘部件计算出旧状态单元与忘记门、待选状态单元与输入门的点乘,然后将这两个结果通过向量加部件运算得到新的状态单元ct。将新得到的状态单元写回到数据缓存单元4中。将数据处理模块5中的状态单元利用向量非线性函数装换部件完成tanh函数的转换,得到tanh(ct),在计算过程中,可以通过计算tanh函数值或者查表两种方式完成。然后,将输出门与状态单元经过tanh非线性变换后的向量通过向量点乘部件运算得到最终的神经元输出值ht。最终,将神经元输出值ht写回到数据缓存单元4中。

图2示出了根据本发明一实施例的用于执行lstm网络运算的装置的数据处理模块示意图;

如图2所示,数据处理模块5包括数据处理控制子模块51、数据依赖判别子模块52以及数据运算子模块53。

其中,数据处理控制子模块51控制数据运算子模块53所进行的运算。控制数据依赖判别子模块52对当前的运算是否存在数据依赖进行判断。对于部分运算,数据处理控制子模块51控制数据运算子模块53所进行的运算;而对于可能存在数据依赖关系的运算,数据处理控制子模块51首先会控制数据依赖判别子模块52对当前的运算是否存在数据依赖进行判断,如果,存在数据依赖关系,数据处理控制子模块51会使数据运算子模块53中插入空操作,等到数据依赖关系解除之后,再控制数据运算子模块53进行数据运算。

数据依赖判别子模块52受数据处理控制子模块51控制,检查数据运算子模块53中是否存在数据依赖关系。如果下次进行的操作需要用到当前尚未运算完成的值,则说明当前存在数据依赖,否则,则不存在数据依赖。一种数据依赖检测的方法是在数据运算子模块53中存在寄存器r1、r2、r3、r4、r5,分别用来标记输入门、忘记门、输出门、待选状态单元以及更新后的状态单元的tanh函数转换运算是否完成,寄存器的值非0表示运算完成,为0表示尚未完成。对应lstm网络,数据依赖判别子模块52会判断两次数据依赖,分别为计算新的状态单元时判断输入门、输出门以及带选状态单元之间是否存在数据依赖和计算输出值时判断输出门与更新后的状态单元的tanh函数转换是否存在数据依赖,分别判断r1、r3、r4是否都非0和r2、r是否都非0即可。判断完成后,需要将判断结果传回给数据处理控制子模块51。

数据运算子模块53受数据处理控制子模块51的控制,用以完成网络运算过程中的数据处理。数据运算子模块53中包括向量点乘部件、向量加法部件、向量求和部件以及向量非线性变换部件以及标志相关数据运算是否完成的寄存器r1、r2、r3、r4、r5。寄存器r1、r2、r3、r4、r5,分别用来标记输入门、忘记门、输出门、待选状态单元以及更新后的状态单元的tanh函数转换运算是否完成,寄存器的值非0表示运算完成,为0表示尚未完成。其中向量加法部件是将两个向量对应位置相加得到一个向量,而向量求和部件是将向量拆分成几段,每段内部求和,最终得到的向量长度与段数相等。向量非线性变换部件是将向量中每个元素作为输入,得到非线性函数变换后的输出。具体的非线性变换可以通过两种方式完成。以输入为x的sigmoid函数为例,一种是采用函数运算方式,直接计算得sigmoid(x),另一种方式是采用查表法完成,数据运算子模块53中维护一张sigmoid函数的表,分别记录了输入x1、x2…xn(x1<x2<…<xn)时对应的输出y1、y2…yn值,计算x对应的函数值是,首先找到区间[xi,xi 1]满足xi<x<xi 1,计算作为输出值。对于lstm网络运算过程中,进行如下的运算:

首先,将r1、r2、r3、r4、r5置为0。用偏置初始化输入门部分和;用部分输入数据和和此输入数据对应的权值通过向量点乘部件计算得到临时值,然后,根据不同神经元对应的临时值向量将临时值分段用向量求和部件完成临时值的求和运算,将计算结果与输入门部分和完成部分和的更新;取另一份输入数据和权值进行相同运算更新部分和,待所有的输入数据都运算一次后,得到的部分和即为神经元的净激活量,然后通过向量非线性变换部件计算得到输入门的输出值。将输出值写回到数据缓存单元4中,并将r1寄存器置为非0。

用计算输入门输出相同的方法计算出忘记门、输出门以及待选状态单元的输出值,将对应的输出值写回到数据缓存单元4中,并将r2、r3、r4寄存器置为非0。

根据数据处理模块子模块51的控制命令执行空操作或进行更新后的状态单元的运算。更新后的状态单元的运算为:从数据缓存单元4中取出忘记门输出值和旧的状态单元,通过向量点乘部件计算的到部分和,然后从数据缓存单元4中取出输入门输出值和待选状态单元,通过向量点乘部件计算的到部分和,和之间的状态单元部分和通过向量加部件得到更新后的状态单元。最终将最后的状态单元写回到数据缓存单元4中。

根据数据处理模块子模块51的控制命令执行空操作或lstm网络输出值的运算。输出值的运算为:将更新后的状态单元利用向量非线性函数变化部件计算状态单元的非线性变换值,然后将r5置为非0。然后,利用向量点乘部件将输出门和状态单元的非线性变换值进行点乘运算,计算出最终的输出值即为lstm网络对应的神经元的输出值。将输出值写回到数据缓存单元4中。

图3示出了根据本发明实施例提供的用于执行lstm网络运算的流程图。

在步骤s1中,在指令缓存单元2的首地址处预先存入一条io指令。

在步骤s2中,控制器单元3从指令缓存单元2的首地址读取该条io指令,根据译出的微指令,直接内存访问单元1从外部地址空间读取所有与lstm网络计算有关的所有指令,并将其缓存入指令缓存单元2中。

在步骤s3中,控制器单元3从指令缓存单元2读入一条io指令,根据译出的微指令,直接内存访问单元1从外部指定地址空间读取lstm网络运算相关的权值、偏置,包括输入门、输出门、忘记门以及待选状态单元的权值和偏置,根据权值对应的神经元的不同,将权值、偏置分割后分别读入到不同的数据缓存模块4中。

在步骤s4中,控制器单元3从指令缓存单元2读入一条状态单元初始化指令,根据译出的微指令,将数据缓存模块4中的状态单元值进行初始化将输入门部分和、输出门部分和、忘记门部分和、待选状态单元部分和置为对应的神经元偏置值。

在步骤s5中,控制器单元3从指令缓存单元2读入一条io指令,根据译出的微指令,直接内存访问单元1从外部指定地址空间读取输入值到数据缓存单元4中,每个数据缓存单元4中都收到一份相同的输入值向量。

在步骤s6中,控制器单元3从指令缓存单元2读入一条数据处理指令,根据译出的微指令,数据处理模块5从对应的数据缓存单元4中获取运算所需相关数据进行运算,运算得到的结果为一个时间点对应的部分神经元的输出值,所有的数据处理模块5处理得到的输出值合并后对应一个时间点的输出值,对于详细的处理过程详见图4。处理结束后,数据处理模块5将处理得到的中间值或输出值以及状态单元值存储到数据缓存单元4中。

在步骤s7中,控制器单元3从指令缓存单元2读入一条io指令,根据译出的微指令,数据缓存单元4中输出值进行拼接通过直接内存访问单元1输出到外部指定地址。

在步骤s8中,控制器单元3从指令缓存单元2读入一条判别指令,根据译出的微指令,控制器单元3决定本次正向过程是否完成,如果完成,结束运行。如果未完成,转向s6中继续运行。

图4示出了根据本发明一实施例的用于执行lstm网络运算的方法中数据处理过程的详细流程图。

在步骤s1中,数据处理模块5从数据缓存单元4读入一部分输入门的权值、输入值。

在步骤s2中,数据处理模块5中数据处理控制子模块51控制数据运算子模块53中的向量点乘部件计算输入门权值、输入值的点乘,然后,根据结果所属的神经元不同进行分组,将组内的点乘结果通过数据运算子模块53中向量求和部件计算得到部分和。

在步骤s3中,数据处理模块5从数据缓存单元4读入输入门部分。

在步骤s4中,数据处理模块5中数据处理控制子模块51控制数据运算子模块53将计算得到的部分和和刚读入的部分和相加得到更新后的输入门部分和。

在步骤s5中,数据处理模块5将更新后的部分和写入到数据缓存模块4中。

在步骤s6中,数据处理模块5判断是否所有的输入门权值都进行了一次运算,如果是,数据缓存单元中的部分和即为输入门的值,将r1寄存器置为非零,否则,改用不同的输入门权值和输入值中的一部分转s1继续运行。

在步骤s7中,采用与运算方式运算得到忘记门输出值、输出门输出值以及待选状态单元输出值,并置r2、r3、r4为非零,同时将输出值都写回到数据缓存单元4中。

在步骤s8中,数据处理模块5中的数据处理控制子模块51控制数据依赖判别子模块52判断忘记门、输入门以及待选状态单元之间是否完成运算,即判断r1、r2、r4是否均为非零,如果否,数据处理控制子模块51控制数据运算子模块53进行空操作,然后转向s8继续运行,如果是,转s9运行。

在步骤s9中,数据处理模块5从数据缓存单元4中读取旧的状态单元以及忘记门输出值。

在步骤s10中,数据处理模块5中的数据处理控制子模块51控制数据运算子模块53对旧的状态单元以及忘记门输出值用向量点乘部件计算得到部分和。

在步骤s11中,数据处理模块5从数据缓存单元4中读取待选状态单元以及输入门输出值。

在步骤s12中,数据处理模块5中的数据处理控制子模块51控制数据运算子模块53对待选状态单元以及输入门输出值用向量点乘部件计算得到部分和,并将部分和与s10计算得到的部分和通过向量加法部件计算得到更新的状态单元。

在步骤s13中,数据处理模块5将更新的状态单元送回到数据缓存单元4中。

在步骤s14中,数据处理模块5中的数据处理控制子模块51控制数据运算子模块53将更新后的状态单元利用向量非线性变换部件计算得到状态单元的非线性变换函数tanh变换值,并将r5置为非零。

在步骤s15中,数据处理模块5中的数据控制子模块51控制数据依赖判别子模块52判断输出门输出值以及状态单元的非线性变换函数tanh变换值的计算是否完成,即判断r3和r5是否均非零,如果否,数据处理控制子模块51控制数据运算子模块53进行空操作,然后转向s15继续运行,如果是,转s16运行。

在步骤s16中,数据处理模块5从数据缓存单元4中读入输出门的输出。

在步骤s17中,数据处理模块5中的数据处理控制子模块51控制数据运算子模块53将输出门输出值以及状态单元的非线性变换函数tanh变换值通过向量点乘部件计算得到输出值,即为lstm网络中数据处理模块5对应的神经元中的输出值。

在步骤s18中,数据处理模块5将输出值写入到数据缓存单元4中。

前面的附图中所描绘的进程或方法可通过包括硬件(例如,电路、专用逻辑等)、固件、软件(例如,被具体化在非瞬态计算机可读介质上的软件),或两者的组合的处理逻辑来执行。虽然上文按照某些顺序操作描述了进程或方法,但是,应该理解,所描述的某些操作能以不同顺序来执行。此外,可并行地而非顺序地执行一些操作。

本发明装置使用专门设计的指令集进行工作,指令译码的效率较高。多个数据处理模块之间并行进行计算,以及多个数据缓存单元之间并行运行不需要数据传输,大幅提高了运算的并行性。另外,将权值和偏置放置在数据缓存单元中可以减少装置与外部地址空间之间的io操作,降低内存访问所需的带宽。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


技术特征:

1.一种用于执行lstm神经网络运算的装置,其特征在于,包括:

并列设置的多个数据缓存单元,用于对所述lstm神经网络运算所需数据、状态和结果进行缓存;

并列设置的多个数据处理模块,用于从对应数据缓存单元中获取输入数据和运算时所需的权值和偏置,进行lstm神经网络运算;其中所述多个数据处理模块与所述数据缓存单元一一对应。

2.如权利要求1所述的装置,其特征在于,所述装置还包括直接内存访问单元,指令缓存单元和控制器单元,其中,

所述直接内存访问单元,用于从外部地址空间获取指令和lstm神经网络运算所需的数据,并将其中的指令和数据分别传输给所述指令缓存单元和所述数据缓存单元,以及从所述数据处理模块和所述数据缓存单元将运算结果写回到外部地址空间;

所述指令缓存单元,用于缓存所述直接内存访问单元从外部地址空间获取的指令,并输入到所述控制器单元;

所述控制器单元,用于从所述指令缓存单元中读取指令,并将指令译码成微指令,还用于控制所述直接内存访问单元进行数据io操作、控制所述数据处理模块进行运算和控制所述数据缓存单元进行数据缓存和传输。

3.如权利要求1所述的装置,其特征在于,所述数据缓存单元还用于对所述数据处理模块计算的中间结果进行缓存,且在所述lstm神经网络运算的执行过程中,从所述直接内存访问单元导入权值和偏置。

4.如权利要求1所述的装置,其特征在于,各所述数据缓存单元中缓存对应于所述lstm神经网络运算的神经元而被分割的权值和偏置,其中各数据缓存单元中的权值和偏置的数量相同,且各数据缓存单元中缓存完整的输入数据。

5.如权利要求1所述的装置,其特征在于,所述数据处理模块采用向量点乘部件、向量加法部件、向量求和部件和向量非线性函数转换部件进行所述lstm神经网络运算。

6.如权利要求5所述的装置,其特征在于,所述向量非线性函数转换部件通过查表进行函数运算。

7.如权利要求2至6中任一项所述的装置,其特征在于,各所述数据处理模块将对应的数据缓存单元中的权值和输入数据分割成若干份,其中每份的权值或输入数据的数量与对应的数据处理模块中向量运算单元运算的数量相同;

所述控制器单元,还用于从所述数据缓存单元中将一份权值和输入数据送入相应的所述数据处理模块中以计算得到部分和,再从所述数据缓存单元取出之前得到的部分和送入所述数据处理模块中,以使所述数据处理模块对部分和进行向量加,得到新的部分和,并将所述新的部分和送回到所述数据缓存单元中,其中所述部分和的初始值为偏置值。

8.如权利要求1所述的装置,其特征在于,每一个所述数据处理模块通过分别计算出lstm网络运算中的忘记门、输入门、输出门以及待选状态单元的向量值来进行向量运算,再由各所述向量值得到每一个所述数据处理模块的输出值,最后将各所述数据处理模块的输出值拼接得到最终的输出值。

9.如权利要求1所述的装置,其特征在于,所述数据处理模块包括数据处理控制子模块、数据依赖判别子模块和数据运算子模块,其中,

所述数据处理控制子模块控制所述数据运算子模块所进行的运算,控制所述数据依赖判别子模块对当前的运算是否存在数据依赖进行判断。

10.一种lstm神经网络的运算方法,其特征在于,所述方法应用于lstm神经网络运算装置,所述lstm神经网络运算装置包括多个并行设置的数据缓存单元和与所述数据缓存单元一一对应的多个数据处理模块,所述方法包括:

目标数据处理模块从对应的数据缓存单元中获取输入数据和运算时所需的权值和偏置,进行lstm神经网络运算,并将运算得到的结果缓存至对应的数据缓存单元,所述目标数据处理模块为任一所述数据处理模块。

11.如权利要求10所述的方法,其特征在于,所述装置还包括直接内存访问单元,指令缓存单元和控制器单元,所述方法还包括:

所述直接内存访问单元从外部地址空间获取指令和lstm神经网络运算所需的数据,并将其中的指令和数据分别传输给所述指令缓存单元和所述数据缓存单元;

所述控制器单元从所述指令缓存单元中读取指令,并将指令译码成微指令,控制所述直接内存访问单元进行数据io操作、控制所述数据处理模块进行运算和控制所述数据缓存单元进行数据缓存和传输;

所述直接内存访问单元从所述数据处理模块和所述数据缓存单元将运算结果写回到外部地址空间。

12.如权利要求10所述的方法,其特征在于,所述方法还包括:

将所述数据处理模块计算的中间结果缓存至所述数据缓存单元,且在所述lstm神经网络运算的执行过程中,所述数据缓存单元从所述直接内存访问单元导入权值和偏置。

13.如权利要求10所述的方法,其特征在于,所述方法还包括:

各所述数据缓存单元中缓存对应于所述lstm神经网络运算的神经元而被分割的权值和偏置,其中各数据缓存单元中的权值和偏置的数量相同,且各数据缓存单元中缓存完整的输入数据。

14.如权利要求10所述的方法,其特征在于,所述数据处理模块采用向量点乘部件、向量加法部件、向量求和部件和向量非线性函数转换部件进行所述lstm神经网络运算。

15.如权利要求14所述的方法,其特征在于,所述向量非线性函数转换部件通过查表进行函数运算。

16.如权利要求11至15中任一项所述的方法,其特征在于,各所述数据处理模块将对应的数据缓存单元中的权值和输入数据分割成若干份,其中每份的权值或输入数据的数量与对应的数据处理模块中向量运算单元运算的数量相同;

所述控制器单元从所述数据缓存单元中将一份权值和输入数据送入相应的所述数据处理模块中以计算得到部分和,再从所述数据缓存单元取出之前得到的部分和送入所述数据处理模块中,以使所述数据处理模块对部分和进行向量加,得到新的部分和,并将所述新的部分和送回到所述数据缓存单元中,其中所述部分和的初始值为偏置值。

17.如权利要求10所述的方法,其特征在于,每一个所述数据处理模块通过分别计算出lstm网络运算中的忘记门、输入门、输出门以及待选状态单元的向量值来进行向量运算,再由各所述向量值得到每一个所述数据处理模块的输出值,最后将各所述数据处理模块的输出值拼接得到最终的输出值。

18.如权利要求10所述的方法,其特征在于,所述数据处理模块包括数据处理控制子模块、数据依赖判别子模块和数据运算子模块,其中,

所述数据处理控制子模块控制所述数据运算子模块所进行的运算,控制所述数据依赖判别子模块对当前的运算是否存在数据依赖进行判断。

19.一种用于执行lstm神经网络运算的装置,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求10至18中任一项所述方法的步骤。

技术总结
一种用于执行LSTM神经网络运算的装置和运算方法。该装置包括直接内存访问单元、指令缓存单元、控制器单元、并列设置的多个数据缓存单元和并列设置的多个数据处理模块,其中所述多个数据处理模块与所述数据缓存单元一一对应,用于从相应数据缓存单元中获取输入数据和运算时所需的权值和偏置,进行LSTM神经网络运算;所述多个数据处理模块之间执行并行运算。本发明采用专用指令运行,运算所需指令数大幅减少,译码开销降低;将权值和偏置缓存,使得数据传输开销降低;本发明不限制具体应用领域,可在诸如语音识别、文本翻译、音乐合成等领域使用,可扩展性强;多个数据处理模块并行运行,显著提高LSTM网络的运算速度。

技术研发人员:不公告发明人
受保护的技术使用者:上海寒武纪信息科技有限公司
技术研发日:2016.12.30
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-16026.html

最新回复(0)